跳到主要内容

请求数据

采集 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;
}
}
});