本文档介绍了 TingYun SDK 基于请求数据、用户体验数据、异常数据和其他数据相关接口的使用及说明。
采集 X5WebView 数据需在生成 X5WebView 实例之后调用 SDK 的 addWebViewBridge() 方法,并调用 setWebViewClient() ,还需在 WebChromeClient 的 onProgressChanged() 函数中调用 SDK 的 initJSMonitorX5() 方法。
/*
@x5WebView 为 X5 WebView 实例
*/
NBSWebChromeX5Client.addWebViewBridge(WebView x5WebView);
NBSWebChromeX5Client.addWebViewBridge(x5WebView);//生成 X5WebView 实例后调用
x5WebView.setWebViewClient(WebViewClient webViewClient);
webview.setWebViewClient(new WebViewClient(){});//设置 WebViewClient
/*
@view 为 X5 WebView 实例,newProgress 为加载进度
*/
NBSWebChromeX5Client.initJSMonitorX5(view, newProgress);
X5webview.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
NBSWebChromeX5Client.initJSMonitorX5(view, newProgress);// 需设置 WebChromeClient 并在 onProgressChanged 方法中调用 initJSMonitorX5 方法
}
});
TingYun_SDK 会采集网络请求中的「请求参数」默认明文传输,若参数中有涉及用户隐私数据,可以调用该接口对「请求参数」及「服务器响应数据」进行加密上传。
/*
@encryptionRequired 设置为 true,加密上传
*/
NBSAppAgent.encryptionRequired(boolean encryptionRequired);
public class MyApplication extends Application {
@Override
public void onCreate() {
NBSAppAgent.setLicenseKey("AppKey")
.encryptionRequired(true)//默认flase,设置为true加密
.start(this.getApplicationContext());
}
}
由于 TingYun_SDK 默认关注系统类和方法,无法关注「业务代码」的耗时情况,使用「自定义埋点」接口可以补全「页面体验分析」和「操作体验分析」模块中的【分解图】,能够帮助开发者清晰的了解其业务代码的耗时及调用情况。
注意:「自定义埋点」接口需要成对调用,请勿跨方法、跨进程以及在异步加载和递归调用中使用该接口。。
//Name 为当前方法所在方法名或自定义名称,支持中文、英文、数字、下划线,但不能包含空格或其他的转义字符
NBSAppAgent.beginTracer(String tracerName);
NBSAppAgent.endTracer(String tracerName);
//用户可以在SDK初始化后的任意方法前后添加自定义Trace
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
private void init() {
//方法开始前添加beginTracer
NBSAppAgent.beginTracer(“这是Init方法”);
try {
………
} catch (NameNotFoundException e) {
e.printStackTrace();
}
//方法结束后添加endTracer
NBSAppAgent.endTracer(“这是Init方法”);
}
TingYun SDK 会采集用户操作的控件 ID,建议您在 Layout 文件中添加控件ID。示例如下:
1、相关接口。
/*
@view 为要设置 ID 的控件,@viewId 为设置的控件 ID,viewId最多包含32个字符,支持英文、数字、下划线
*/
NBSAppAgent.setViewId(View view, String viewId);
//对于动态生成的控件,可以使用 setViewId() 方法对它设置唯一的 ID
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LinearLayout layout = findViewById(R.id.layout);
final Button button = new Button(this);
button.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
button.setText("Login");
NBSAppAgent.setViewId(button, "bt_login");
Layout.addView(button);
}
//对于ListView的item点击事件,TingYun SDK默认采集ListView的控件ID,若需要区分不同item点击,可以在Adapter的getVIew()方法中使用setViewId()方法对item设置ID。
public View getView(int i, View convertView, ViewGroup parent) {
MyViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.page_item_gridview, parent, false); //加载布局
holder = new MyViewHolder();
holder.iv = convertView.findViewById(R.id.page_item_grid_iv);
holder.tv = convertView.findViewById(R.id.page_item_grid_tv);
convertView.setTag(holder);
} else {
holder = (MyViewHolder) convertView.getTag();
}
Glide.with(mContext).load(list.get(i).getUrl()).into(holder.iv);
holder.tv.setText("图片" + i);
NBSAppAgent.setViewId(convertView,"图片"+i);
return convertView;
}
TingYun_SDK 默认计算 SDK 初始化开始至第一个页面加载结束的时间为「冷启动耗时」,研发人员可以根据自身应用需求更改计算「冷启动耗时」的结束点。
/*
默认关闭,如需开启,isCustom 设置为 true
*/
NBSAppAgent.isCustomAppStart(boolean isCustom);
public class MyApplication extends Application {
@Override
public void onCreate() {
NBSAppAgent.setLicenseKey("AppKey")
.isCustomAppStart(true)//在初始化SDK时调用,开启自定义启动时间功能
.start(this.getApplicationContext());
}
}
该接口需要与「isCustomAppStart」配合使用,当设置「isCustomAppStart」接口为 true 时,「setCustomOnResumeEndIns」接口设置生效
/*
className 需传入启动的第一个 Activity 的 class.getName
*/
NBSAppAgent.setCustomOnResumeEndIns(String className);
public class MyApplication extends Application {
@Override
public void onCreate() {
NBSAppAgent.setLicenseKey("AppKey")
.isCustomAppStart(true)//在初始化SDK时调用,开启自定义启动时间功能
.start(this.getApplicationContext());
}
}
public class SplashActivity extends Activity {
//启动的第一个Activity
}
public class MainActivity extends Activity {
//启动的第二个Activity
@Override
public void onResume() {
super.onResume();
NBSAppAgent.setCustomOnResumeEndIns(SplashActivity.class.getName());
//以第二个Activity的onResume()方法作为启动结束时间
}
}
在页面加载分析模块,SDK 默认以 IdleHandler 的 queueIdle() 回调时间点作为页面内容加载完成的时间点。用户可以通过 setPageLoadingEndTime() 方法手动埋点,设置页面结束时间点。
/*
@clazz 为页面 Activity 的 class
*/
NBSAppAgent.setPageLoadingEndTime(Class clazz);
//用户可以在页面加载回调中(或其他合适的位置),调用setPageLoadingEndTime()方法
private void showSuccess() {
networkStateView.showSuccess();
//传入当前 Activity.class 或当前 Fragment.class
NBSAppAgent.setPageLoadingEndTime(MainActivity.class);
}
研发人员可以在应用程序的任意位置调用「面包屑」接口进行埋点。当应用程序发生崩溃时,SDK 会按代码的触发顺序收集埋点信息并在崩溃轨迹中高亮显示,以协助研发人员在应用崩溃时了解代码调用逻辑。
/*
@breadcrumb:自定义信息,最多包含100个字符,支持中文、英文、数字、下划线
*/
NBSAppAgent.leaveBreadcrumb(String breadcrumb);
public MyActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
NBSAppAgent.setLicenseKey("AppKey")
.withLocationServiceEnabled(true).start(this.getApplicationContext());
NBSAppAgent.leaveBreadcrumb("login MyActivity onCreate");
}
public void onResume() {
super.onResume();
NBSAppAgent.leaveBreadcrumb("login MyActivity onResume");
}
public void logginPressed(View view) {
NBSAppAgent.leaveBreadcrumb("login MyActivity logginPressed");
new LoginAsyncTask.execute();
}
public void onStop() {
super.onStop();
NBSAppAgent.leaveBreadcrumb("login MyActivity onStop");
}
}
在应用发生崩溃的时候,研发人员往往需要更多的信息以收集现场环境,可以通过调用「自定义崩溃附加信息」接口上传额外信息,协助分析崩溃问题。
/*
最多可添加10条附加信息,每条附加信息最大支持100个字节,随崩溃上传。
*/
NBSAppAgent.setUserCrashMessage(String key,String value);
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
NBSAppAgent.setLicenseKey("AppKey")
.withLocationServiceEnabled(true).start(this.getApplicationContext());
//初始化后的任意位置插入自定义附加信息
NBSAppAgent.setUserCrashMessage(“张三”,“13700001234”);}
开发者可通过 Android 日志系统的 LogCat,来收集和查看系统调试输出的信息,通过打印输出的 Log 信息来调查 Bug 发生时的应用程序信息,并通过TingYun SDK 上传自定义 Log 日志。
/*
@enable 设置为 true,崩溃时上传 LogCat 日志
*/
enableLogging(boolean enable)
NBSAppAgent.setLicenseKey("AppKey").withLocationServiceEnabled(true).enableLogging(true).start(this.getApplicationContext());
TingYun_App_SDK 默认会校验当前使用的 SDK 版本是否为最新版本,新版 SDK 上线后,App 运行时会在控制台输出版本更新提示的 Log 日志,如不需要「版本更新提示」调用此接口关闭即可。
说明:项目工程只有 debug 模式才会开启此功能。
可通过在 AndroidMainfest.xml 文件中的 application 标签添加 debuggable 属性控制是否开启调试模式。
<application android:debuggable=“true”>
NBSAppAgent.closeLogForUpdateHint();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
NBSAppAgent.setLicenseKey("AppKey").withLocationServiceEnabled(true)
.closeLogForUpdateHint().start(this.getApplicationContext());
//初始化时调用接口关闭版本提示功能
}
TingYun_SDK 默认使用应用的「versionName」作为版本号上传,如需自定义版本号可以在初始化 SDK 时调用该接口进行配置。
//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());
}
}
开发者可以在初始化TingYun SDK时设置自定义的渠道名称。
NBSAppAgent.setChannelID(String channelID);
public class MyApplication extends Application {
@Override
public void onCreate() {
NBSAppAgent.setLicenseKey("AppKey")
.setChannelID("应用宝")//在初始化SDK时调用接口设置渠道
.start(this.getApplicationContext());
}
}
TingYun SDK 支持采集设备的地理位置信息,开发者需要在初始化 SDK 时调用 withLocationServiceEnabled()方法。
采集地理位置需要配置 android.permission.ACCESS_FINE_LOCATION 权限。
//enable 设置为 true,采集 GPS 经纬度信息
NBSAppAgent.withLocationServiceEnabled(boolean enable);
public class MyApplication extends Application {
@Override
public void onCreate() {
NBSAppAgent.setLicenseKey("AppKey")
.withLocationServiceEnabled(true)//默认flase,设置为true采集地理位置信息
.start(this.getApplicationContext());
}
}
TingYun SDK 可以输出采集到的数据日志。
//enable 设置为 true,打印日志
NBSAppAgent.setLogEnable(boolean enable);
public class MyApplication extends Application {
@Override
public void onCreate() {
NBSAppAgent.setLicenseKey("AppKey")
.start(this.getApplicationContext());
NBSAppAgent.setLogEnable(true);//设置成 true,输出日志
}
}