请求数据相关接口
采集 WebView 配置
采集 WebView 数据需设置 setDomStorageEnabled(true),还需调用 setWebViewClient() 方法,如嵌码 App 中未调用该方法,请添加以下内容
WebSettings webSettings = webview.getSettings();
webSettings.setDomStorageEnabled(true);
webview.setWebViewClient(new WebViewClient(){});
自动注入 JS 探针
开启自动注入 JS 探针,需在 SDK 初始化时调用 isHookWebChromeClient(true)。
自动注入 JS 探针,SDK 会替换 WebChromeClient 为基调听云 SDK 的实现类,如遇到兼容性问题,请联系技术支持或改为手动注入 JS 探针方式。
相关接口
/** * @param isHookWebChromeClient 是否自动注入 JS 探针,默认 false */ NBSAppAgent.isHookWebChromeClient(boolean isHookWebChromeClient)
代码示例
NBSAppAgent.setLicenseKey("AppKey") .setRedirectHost("Host") .isHookWebChromeClient(true)// 开启自动注入 JS 探针 .start(this.getApplicationContext());
手动注入 JS 探针
相关接口
/** * 采集 WebView 数据需在 WebChromeClient 的 onProgressChanged() 方法中调用本接口 * @param view WebView 对象 * @param newProgreess 加载进度 */ NBSWebChromeClient.initJSMonitor(view, newProgress);
代码示例
webview.setWebChromeClient(new WebChromeClient(){ @Override public void onProgressChanged(WebView view, int newProgress) { NBSWebChromeClient.initJSMonitor(view, newProgress); super.onProgressChanged(view, newProgress); } });
采集 X5 WebView 配置
采集 WebView 数据需调用 setDomStorageEnabled() 和 setWebViewClient() 方法, 如嵌码 App 中未调用该方法,请添加以下内容
WebSettings webSettings = webview.getSettings();
webSettings.setDomStorageEnabled(true);
webview.setWebViewClient(new WebViewClient(){})
自动注入JS探针
开启自动注入 JS 探针,需在 SDK 初始化时调用 isHookWebChromeClient(true)。
注意:自动注入 JS 探针,SDK 会替换 WebChromeClient 为基调听云 SDK 的实现类,如遇到兼容性问题,请联系技术支持或改为手动注入 JS 探针方式。
相关接口
/** * @param isHookWebChromeClient 是否自动注入 JS 探针,默认 false */ NBSAppAgent.isHookWebChromeClient(boolean isHookWebChromeClient)
代码示例
NBSAppAgent.setLicenseKey("AppKey").setRedirectHost("Host") .isHookWebChromeClient(true)// 开启自动注入 JS 探针 .start(this.getApplicationContext());
手动注入 JS 探针
相关接口
/** * @param view X5 WebView 实例 * @param newProgress 加载进度 */ NBSWebChromeX5Client.initJSMonitorX5(view, newProgress);
代码示例
webview.setWebChromeClient(new WebChromeClient(){ @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); NBSWebChromeX5Client.initJSMonitorX5(view, newProgress);// 需设置 WebChromeClient 并在 onProgressChanged 方法中调用 initJSMonitorX5 方法 } });
添加 JsBridge
说明:手动注入 JS 探针,还需要添加 JsBridge,自动注入 JS 探针忽略此配置。
相关接口
/** * @param x5WebView 为 X5 WebView 实例 */ NBSWebChromeX5Client.addWebViewBridge(WebView x5WebView);
代码示例
NBSWebChromeX5Client.addWebViewBridge(x5WebView);//生成 X5WebView 实例后调用
mpaas 内嵌 WebView 数据采集
可以通过此接口采集 mpaas 内嵌 WebView 数据。
- 相关接口
/**
* @param h5Page H5Page 对象
* @param apWebViewClient 若存在自定义的 APWebViewClient 实现类,传入该对象,否则传 null
* @param apWebChromeClient 若存在自定义的 APWebChromeClient 实现类,传入该对象,否则传 null
*/
NBSNebulaWebViewConfig.configWebView(H5Page h5Page, APWebViewClient apWebViewClient, APWebChromeClient apWebChromeClient);
- 代码示例
MPNebula.getH5ViewAsync(this, param, new H5PageReadyListener() {
@Override
public void getH5Page(H5Page h5Page) {
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
// 不存在自定义的 APWebViewClient 或 APWebChromeClient 时,只需传入 h5Page 对象
NBSNebulaWebViewConfig.configWebView(h5Page, null, null);
mLayout.addView(h5Page.getContentView(), lp);
}
});
采集内容采集
调用该接口后,SDK 会采集 Http/Https 请求的请求头、响应头、请求体、响应体。
当请求头中Content-Type值为application/json、application/x-www-form-urlencoded、text/plain时,会采集请求体。 当响应头中Content-Type值为application/json、text/plain时,会采集响应体。
注:当平台「采集网络请求内容」开启且调用该接口时,请求内容采集功能才开启。
- 相关接口
/**
* @param enabled 默认 false,设置 true,SDK 将采集请求内容
*/
enableNetworkContentRecord(boolean enabled)
- 代码示例
NBSAppAgent.setLicenseKey("AppKey").setRedirectHost("Host")
.enableNetworkContentRecord(true)// 采集请求内容
.start(this.getApplicationContext());
自定义请求头/请求体采集
调用该接口后,可以自定义设置采集的请求头/请求体信息,调用多次则覆盖。
注:若平台和接口都配置请求头采集,接口配置优先。body 采集仅支持 okhttp3。
- 相关接口
/**
* @param headerCallBack 可以拦截 SDK 采集的网络 header 数据
* @param bodyCallBack 可以拦截 SDK 采集的网络 body 数据
*/
setRequestHeaderCallback(INBSNetworkHeader headerCallBack)
setRequestBodyCallback(INBSNetworkBody bodyCallBack)
- 代码示例
NBSAppAgent.setRequestHeaderCallback(new INBSNetworkHeader() {
@Override
public Map<String, String> processHeaderMap(String url, Map<String, String> headers) {
//当请求的 URL 包含 www.tingyun.com 时,不采集 x-tingyun 请求头
if(url.contains("www.tingyun.com")){
headers.remove("x-tingyun");
return haaders;
}else{
return headers;
}
}
});
NBSAppAgent.setRequestBodyCallback(new INBSNetworkBody() {
@Override
public String processBody(String url, String body) {
//当请求的URL包含www.tingyun.com时,返回自定义请求体信息
if(url.contains("www.tingyun.com")){
//返回自定义请求体信息
return "";
}else{
return body;
}
}
});
自定义响应头/响应体采集
调用该接口后,可以自定义设置采集的响应头/响应体信息,调用多次则覆盖。
注:若平台和接口都配置响应头采集,接口配置优先。body 采集仅支持 okhttp3。
- 相关接口
/**
* @param headerCallBack 可以拦截 SDK 采集的网络 header 数据
* @param bodyCallBack 可以拦截 SDK 采集的网络 body 数据
*/
setResponseHeaderCallback(INBSNetworkHeader headerCallBack)
setResponseBodyCallback(INBSNetworkBody bodyCallBack)
- 代码示例
NBSAppAgent.setResponseHeaderCallback(new INBSNetworkHeader() {
@Override
public Map<String, String> processHeaderMap(String url, Map<String, String> headers) {
//当请求的 URL 包含 www.tingyun.com 时,不采集 x-tingyun-data 响应头
if(url.contains("www.tingyun.com")){
headers.remove("x-tingyun-data");
return headers;
}else{
return headers;
}
}
});
NBSAppAgent.setResponseBodyCallback(new INBSNetworkBody() {
@Override
public String processBody(String url, String body) {
//当请求的 URL 包含 www.tingyun.com 时,返回自定义响应体信息
if(url.contains("www.tingyun.com")){
//返回自定义响应体信息
}else{
return body;
}
}
});