跳到主要内容

其他

自定义App版本号

基调听云App SDK默认使用应用的「versionName」作为版本号上传,如需自定义版本号可以在初始化SDK时调用该接口进行配置。

  • 相关接口
/**
*@param versionName 最多包含64个字符,支持中文、英文、数字、下划线
*/
NBSAppAgent.setVersionName(String versionName);
  • 代码示例
public class MyApplication extends Application {
@Override
public void onCreate() {
NBSAppAgent.setLicenseKey("AppKey")
.setVersionName("v2.11.1")//在初始化SDK时调用接口设置版本号
.start(this.getApplicationContext());
}
}

自定义渠道

开发者可以在初始化基调听云App SDK时设置自定义的渠道名称。

  • 相关接口
/**
* @param channelID 渠道ID。
* 可以由英文字母、阿拉伯数字、下划线、中划线、空格、括号组成,可以含汉字以及其他明文字符,但是不建议使用中文命名,会出现乱码。
* 首尾字符不可以为空格。不要使用纯数字作为渠道ID。最多256个字符。
*/
NBSAppAgent.setChannelID(String channelID);
  • 代码示例
public class MyApplication extends Application {
@Override
public void onCreate() {
NBSAppAgent.setLicenseKey("AppKey")
.setChannelID("应用宝")//在初始化SDK时调用接口设置渠道
.start(this.getApplicationContext());
}
}

设置地理位置信息

可通过调用接口设置经纬度以便精准获取设备地理位置信息。

  • 相关接口
/**
* @param lat 纬度
* @param lng 经度
*/
NBSAppAgent.setLatLng(double lat, double lng);
  • 代码示例
public class MyApplication extends Application {
@Override
public void onCreate() {
NBSAppAgent.setLatLng(39.936846,116.39277);// 设置经纬度
}
}

开启SDK Log

调用接口后,可以打印 SDK INFO日志。

  • 相关接口
/**
* @param enable 默认 flase,设置为 true 输出日志
*/
NBSAppAgent.setLogEnable(boolean enable);
  • 代码示例
public class MyApplication extends Application {
@Override
public void onCreate() {
NBSAppAgent.setLicenseKey("AppKey")
.start(this.getApplicationContext());

NBSAppAgent.setLogEnable(true);//设置成 true,输出日志
}
}

只主进程采集数据

App SDK 在 Application 初始化时,默认采集所有进程的数据,也支持设置只采集主进程的数据。

  • 相关接口
/**
* @param enable 默认 flase,设置为 true 只采集主进程数据
*/
NBSAppAgent.withOnlyMainProcEnabled(boolean enable);
  • 代码示例
public class MyApplication extends Application {
@Override
public void onCreate() {
NBSAppAgent.setLicenseKey("AppKey")
.withOnlyMainProcEnabled(true)//设置为 true,只采集主进程数据
.start(this.getApplicationContext());
}
}

首次启动开启模块功能开关

出于兼容性考虑, 首次启动 SDK 仅在调试模式下开启全部功能模块,非调试模式下仅开启崩溃模块,可通过以下接口开启 SDK 的模块开关 模块功能开关接口。

  • 相关接口
/**
* @param option 开关的状态值
* SDK 定义了以下开关
* 网络数据采集
* NBSAppAgent.HTTP_NETWORK_ENABLED = 1;
* UI数据采集(启动、页面、操作数据)
* NBSAppAgent.UI_ENABLED = 2;
* 崩溃数据采集
* NBSAppAgent.CRASH_ENABLED = 4;
* WebView数据采集
* NBSAppAgent.WEBVIEW_ENABLED = 8;
* Socket Hook
* NBSAppAgent.SOCKET_DATA_ENABLED = 16;
* 跨应用功能
* NBSAppAgent.CROSS_APP_ENABLED = 32;
* 卡顿数据采集
* NBSAppAgent.ANR_ENABLED = 64;
* 行为数据采集
* NBSAppAgent.USER_ACTION_ENABLED = 128;
* CDN数据采集
* NBSAppAgent.CDN_ENDBLED = 256;
* 视频录制采集
* NBSAppAgent.RECORD_ENDBLED = 512;
* 全量Trace采集
* NBSAppAgent.ALL_TRACE_COLLECT_ENDBLED = 1024;
* 暴力点击采集
* NBSAppAgent.VIOLENCE_ENDBLED = 2048;
* 日志回捞
* NBSAppAgent.LOG_MODULE_ENABLED = 4096;
* OOM 采集
* NBSAppAgent.OOM_MODULE_ENABLED = 8192;
* 耗电采集
* NBSAppAgent.BATTERY_MODULE_ENABLED = 16384;
* 耗电异常采集
* NBSAppAgent.BATTERY_ERROR_ENABLED = 32768;
* 网络内容采集
* NBSAppAgent.RECORD_NETWORK_ENABLE = 65536;
* CPU 指标和异常采集
* NBSAppAgent.CPU_MODULE_ENABLED = 131072;
* FPS 采集
* NBSAppAgent.FPS_MODULE_ENABLED = 262144;
*/
NBSAppAgent.setStartOption(int option);
  • 代码示例
public void onCreate() {  
NBSAppAgent.setLicenseKey("AppKey")
.setStartOption(NBSAppAgent.HTTP_NETWORK_ENABLED | NBSAppAgent.UI_ENABLED | NBSAppAgent.CRASH_ENABLED)
//首次启动开启网络、UI、崩溃数据采集
.start(this.getApplicationContext());
}

获取基调听云设备 ID

应用首次启动时,基调听云服务器会下发 deviceId 用以标识设备。用户可以通过接口获取基调听云的 deviceId 值。

  • 相关接口
/**
* @return 返回基调听云设备 ID
*/
NBSAppAgent.getTingyunDeviceId()
  • 代码示例
public void onCreate() {  
String tingYunDid = NBSAppAgent.getTingyunDeviceId();
if(!TextUtils.isEmpty(tingYunDid)){//若不存在 deviceId,返回 null。建议判空后使用
...
}
}

忽略基调听云 Scheme 配置

基调听云 Scheme 适用于应用开发及运营人员,对 SDK 采集的页面及操作数据进行可视化命名,可能会触发弹窗申请悬浮窗权限。对于 Scheme 拉活,我们建议您另外定义 Scheme。若其他应用,已经用了基调听云 Scheme 来唤起您的应用,可以使用 setIngoreScheme() 方法指定 Scheme,SDK 对该 Scheme 将不再开启可视化配置功能 。

  • 相关接口
/**
* @param scheme 传入忽略的 scheme 值
*/
NBSAppAgent.setIngoreScheme(String scheme);
  • 代码示例
public class MyApplication extends Application {
@Override
public void onCreate() {
NBSAppAgent.setLicenseKey("AppKey")
.setIngoreScheme("tingyun.1234")//在初始化 SDK 时调用接口设置要忽略的 scheme 值
.start(this.getApplicationContext());
}
}

设置 okhttp3.EventListener 开关

若项目集成了 OkHttp3.11.0 或以上版本,基调听云 SDK 会通过 EventListener 来采集数据,若您的项目也设置了 EventListener,基调听云 SDK 会在提替换成时记录之前的 EventListener。基调听云 SDK 在收到相关回调方法时,会回调给项目的 EventListener,就不会影响项目自身的 EventListener 接收到回调。若不希望基调听云 SDK 设置 EventListener,可以通过 setOkhttpTcpListener() 方法关闭基调听云设置 EventListener。

  • 相关接口
/**
* @param isSetListener 默认为 true,设置成 false 设置 EventListener
*/
NBSAppAgent.setOkhttpTcpListener(boolean isSetListener);
  • 代码示例
public class MyApplication extends Application {
@Override
public void onCreate() {
NBSAppAgent.setLicenseKey("AppKey")
.setOkhttpTcpListener(false)// 在初始化 SDK 时调用接口,SDK 不设置 EventListener
.start(this.getApplicationContext());
}
}

获取项目的 EventListener

若项目集成了 OkHttp3.11.0 或以上版本,基调听云 SDK 会通过 EventListener 来采集数据,若您的项目也设置了 EventListener,基调听云 SDK 会在提替换成时记录之前的 EventListener。若您在代码中通过反射获取 EventListener 时,会返回基调听云的 EventListener,可以通过 NBSHttpTcpListener.getListener() 方法获取项目自身的 EventListener。

  • 相关接口
/**
* @return 返回 SDK 替换的 EventListener
*/
NBSHttpTcpListener.getListener()
  • 代码示例
// HttpEventListener 表示项目自身的 EventListener
HttpEventListener listener = null;
try {
if (mEventListenerField == null) {
synchronized (this) {
if (mEventListenerField == null) {
Class<?> realCallClass = call.getClass();
mEventListenerField = realCallClass.getDeclaredField("eventListener");
mEventListenerField.setAccessible(true);
}
}
}
// listener = (HttpEventListener) mEventListenerField.get(call);// 嵌码听云后直接强转为自己的 listener 会报异常
EventListener eventListener = (EventListener) mEventListenerField.get(call);// 反射获取 EventListener
if (eventListener instanceof HttpEventListener) { // 判断 eventListener 是自己的还是听云的
listener = (HttpEventListener) eventListener;// 如果是自己的 listener,强转为自己
}else if (eventListener instanceof NBSHttpTcpListener){
NBSHttpTcpListener nbsHttpTcpListener = (NBSHttpTcpListener) eventListener;// 如果是听云的 listener,强转为听云
listener = (HttpEventListener) nbsHttpTcpListener.getListener();// 通过听云的 getListener() 返回自己的 listener
}
} catch (Exception e) {
}

设置 OAID

若项目集成了 OAID SDK,可以将获取到的 OAID 传给基调听云 SDK 用以生成设备 ID。

注意:部分设备由于隐私问题,OAID 可能返回固定的值,如 00000000-0000-0000-0000-0000000000000000000000000000000000000000000000000000000000000000000000000000。请勿将固定的值传给 SDK。

  • 相关接口
/**
* @param oaid 传入的 OAID
*/
NBSAppAgent.setOaidData(String oaid)
  • 代码示例
NBSAppAgent.setOaidData("e6ee0f4b6b67cf8b")

过滤 okhttp3.ResponseBody 嵌码

基调听云 SDK 为了采集下载字节数,会替换 okhttp3.ResponseBody,若您项目中的代码在获取到 response.body() 后有类型转换操作,会触发异常,可以通过 setOkhttpResponseBodyFilter() 接口过滤 okhttp.ResponseBody 嵌码 。

  • 相关接口
/**
* @param className 为需要过滤的 ResponseBody 的完整类名,该类不能被混淆
*/
NBSAppAgent.setOkhttpResponseBodyFilter(String className)
  • 代码示例
NBSAppAgent.setOkhttpResponseBodyFilter("com.xxx.okhttptest.util.ProgressResponseBody")// 传入过滤的 ResponseBody 的完整类名

禁用鸿蒙设备识别

在鸿蒙设备上,SDK 初始化时会将操作系统置为 “HarmonyOS”,可以通过此接口禁用 SDK 的鸿蒙设置识别,禁用后,SDK 会将操作系统置为 “Android”。

若您使用的是私有化平台,需确认平台是否支持鸿蒙设备识别,若平台不支持鸿蒙设备识别,需要调用 isHarmonyOs(false)。

  • 相关接口
/**
* @param isHarmonyOS 是否启用鸿蒙设备识别,默认为 true
*/
NBSAppAgent.isHarmonyOs(boolean isHarmonyOS)
  • 代码示例
NBSAppAgent.setLicenseKey("AppKey").setRedirectHost("Host")
.isHarmonyOs(false)// 禁用鸿蒙设备识别
.start(getApplicationContext());

获取用户标识

通过添加「用户标识」可在基调听云报表平台通过该标识检索到具体用户的性能问题。

  • 相关接口
/**
* @param userIdentifier 最多包含 256 个字符,支持中文、英文、数字、下划线,但不能包含空格或其他的转义字符
*/
NBSAppAgent.setUserIdentifier(String userIdentifier);
  • 代码示例
public class MainActivity extends Activity {  
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String userIdentifier = getUserID();
NBSAppAgent.setLicenseKey("AppKey")
.start(this.getApplicationContext());
//用户标识可为邮箱、手机号等能够标识用户身份的信息,如:xxx@tingyun.com
NBSAppAgent.setUserIdentifier(userIdentifier);
}
}

SDK传输数据使用国密加密

SDK传输数据支持国密加密,调用该接口开启国密加密。

注:

  • 国密加密只支持 Android 6.0 及以上版本,启用国密加密后,安卓 5.x 及以下版本 SDK 将不采集数据。

  • 启用国密需集成 bcpkix-jdk15to18-version.jar 和 bcprov-jdk15to18-version.jar 。

  • 服务端也需要同步开启国密加密功能。

  • 相关接口
/**
* param isEncryptionRequired 默认 false,设置为 ture 启用国密加密
*/
NBSAppAgent.encryptionRequired(boolean isEncryptionRequired)
  • 代码示例
NBSAppAgent.setLicenseKey("AppKey").setRedirectHost("Host")
.encryptionRequired(true)// 启用国密加密
.start(this.getApplicationContext());

关闭移动运营商采集

SDK 通过 TelephonyManager.getSimOperator() 采集移动网络运营商信息,可以在初始化 SDK 时调用 isOperatorCollect() 接口控制是否采集。

  • 相关接口
/**
* @param isCollect 默认 true,设置为 false 关闭运营商采集
*/
NBSAppAgent.isOperatorCollect(boolean isCollect)NBSAppAgent.isOperatorCollect(boolean isCollect)
  • 代码示例
NBSAppAgent.setLicenseKey("AppKey").setRedirectHost("Host")
.isOperatorCollect(false)// 关闭运营商采集
.start(this.getApplicationContext());

设置基站数据采集开关

可以通过 setCellCollectEnabled() 接口控制是否开启基站数据采集。本接口需在SDK初始化前调用。

2.17.4 版本 SDK 已默认关闭基站数据采集。

  • 相关接口
/**
* @param enable 基站数据采集开关,默认 true,可以设置为 false 关闭采集
*/
NBSAppAgent.setCellCollectEnabled(boolean enable);
  • 代码示例
NBSAppAgent.setCellCollectEnabled(false);// 关闭基站数据采集

设置业务线名称

使⽤「设置业务线」接⼝可以将崩溃、卡顿、⽹络错误以业务线进⾏区分,以便查看具体业务的性能数据。

  • 相关接口
/**
* @param key:固定为 bname
* @param value:即需要设置的业务名称
*/
NBSAppArent.setBusinessLine(String key, String value);
  • 代码示例
public class MyApplication extends Application {
@Override
public void onCreate() {
NBSAppArent.setBusinessLine("bname", "购物车");
}
}