首页 帮助中心 听云App 高级功能

高级功能

本文档介绍了 TingYun SDK 基于请求数据、用户体验数据、异常数据和其他数据相关接口的使用及说明。

一、请求数据相关接口

1、采集 X5 WebView 数据配置

采集 X5WebView 数据需在生成 X5WebView 实例之后调用 SDK 的 addWebViewBridge() 方法,并调用 setWebViewClient() ,还需在 WebChromeClient 的 onProgressChanged() 函数中调用 SDK 的 initJSMonitorX5() 方法。
1、相关接口
/*
 @x5WebView 为 X5 WebView 实例
 */
NBSWebChromeX5Client.addWebViewBridge(WebView x5WebView);
2、代码示例:
NBSWebChromeX5Client.addWebViewBridge(x5WebView);//生成 X5WebView 实例后调用
1、相关接口
x5WebView.setWebViewClient(WebViewClient webViewClient);
2、代码示例:
webview.setWebViewClient(new WebViewClient(){});//设置 WebViewClient
1、相关接口
/*
 @view 为 X5 WebView 实例,newProgress 为加载进度
 */
NBSWebChromeX5Client.initJSMonitorX5(view, newProgress);
2、代码示例:
X5webview.setWebChromeClient(new WebChromeClient(){
	@Override
	public void onProgressChanged(WebView view, int newProgress) {
		super.onProgressChanged(view, newProgress);
		NBSWebChromeX5Client.initJSMonitorX5(view, newProgress);// 需设置 WebChromeClient 并在 onProgressChanged 方法中调用 initJSMonitorX5 方法
	}
});

2、请求参数及服务器响应加密上传

TingYun_SDK 会采集网络请求中的「请求参数」默认明文传输,若参数中有涉及用户隐私数据,可以调用该接口对「请求参数」及「服务器响应数据」进行加密上传。
1、相关接口。
/*
 @encryptionRequired 设置为 true,加密上传
 */
NBSAppAgent.encryptionRequired(boolean encryptionRequired);
2、代码示例。
public class MyApplication extends Application {
    @Override
    public void onCreate() {  
	NBSAppAgent.setLicenseKey("AppKey")
	.encryptionRequired(true)//默认flase,设置为true加密
	.start(this.getApplicationContext());
	}
}

二、用户体验数据相关接口

1、自定义埋点

由于 TingYun_SDK 默认关注系统类和方法,无法关注「业务代码」的耗时情况,使用「自定义埋点」接口可以补全「页面体验分析」和「操作体验分析」模块中的【分解图】,能够帮助开发者清晰的了解其业务代码的耗时及调用情况。
1、相关接口
注意:「自定义埋点」接口需要成对调用,请勿跨方法、跨进程以及在异步加载和递归调用中使用该接口。。
//Name 为当前方法所在方法名或自定义名称,支持中文、英文、数字、下划线,但不能包含空格或其他的转义字符
NBSAppAgent.beginTracer(String tracerName);
NBSAppAgent.endTracer(String tracerName);
2、代码示例。
//用户可以在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方法”);
}

2、设置控件 ID

TingYun SDK 会采集用户操作的控件 ID,建议您在 Layout 文件中添加控件ID。示例如下:
1、相关接口。
/*
@view 为要设置 ID 的控件,@viewId 为设置的控件 ID,viewId最多包含32个字符,支持英文、数字、下划线
*/
NBSAppAgent.setViewId(View view, String viewId);
2、代码示例
//对于动态生成的控件,可以使用 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;
}

3、自定义冷启动耗时

TingYun_SDK 默认计算 SDK 初始化开始至第一个页面加载结束的时间为「冷启动耗时」,研发人员可以根据自身应用需求更改计算「冷启动耗时」的结束点。
1、相关接口
/*
默认关闭,如需开启,isCustom 设置为 true
*/
NBSAppAgent.isCustomAppStart(boolean isCustom);
2、代码示例。
public class MyApplication extends Application {
    @Override
    public void onCreate() {  
	NBSAppAgent.setLicenseKey("AppKey")
	.isCustomAppStart(true)//在初始化SDK时调用,开启自定义启动时间功能
	.start(this.getApplicationContext());
	}
}
该接口需要与「isCustomAppStart」配合使用,当设置「isCustomAppStart」接口为 true 时,「setCustomOnResumeEndIns」接口设置生效
1、相关接口
/*
className 需传入启动的第一个 Activity 的 class.getName
*/
NBSAppAgent.setCustomOnResumeEndIns(String className);
2、代码示例。
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()方法作为启动结束时间    
	}
}

4、页面加载埋点

在页面加载分析模块,SDK 默认以 IdleHandler 的 queueIdle() 回调时间点作为页面内容加载完成的时间点。用户可以通过 setPageLoadingEndTime() 方法手动埋点,设置页面结束时间点。
1、相关接口。
/*
@clazz 为页面 Activity 的 class
*/
NBSAppAgent.setPageLoadingEndTime(Class clazz);
2、代码示例。
//用户可以在页面加载回调中(或其他合适的位置),调用setPageLoadingEndTime()方法
private void showSuccess() {
	networkStateView.showSuccess();
//传入当前 Activity.class 或当前 Fragment.class
    NBSAppAgent.setPageLoadingEndTime(MainActivity.class);
}

三、异常数据相关接口

1、面包屑

研发人员可以在应用程序的任意位置调用「面包屑」接口进行埋点。当应用程序发生崩溃时,SDK 会按代码的触发顺序收集埋点信息并在崩溃轨迹中高亮显示,以协助研发人员在应用崩溃时了解代码调用逻辑。
1、相关接口。
/*
  @breadcrumb:自定义信息,最多包含100个字符,支持中文、英文、数字、下划线
*/
NBSAppAgent.leaveBreadcrumb(String breadcrumb);
 2、代码示例。
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");
         }
}

2、自定义附加信息

在应用发生崩溃的时候,研发人员往往需要更多的信息以收集现场环境,可以通过调用「自定义崩溃附加信息」接口上传额外信息,协助分析崩溃问题。
1、相关接口
/*
最多可添加10条附加信息,每条附加信息最大支持100个字节,随崩溃上传。
*/
NBSAppAgent.setUserCrashMessage(String key,String value);
2、代码示例。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
     NBSAppAgent.setLicenseKey("AppKey")
     .withLocationServiceEnabled(true).start(this.getApplicationContext());
      //初始化后的任意位置插入自定义附加信息
      NBSAppAgent.setUserCrashMessage(“张三”,“13700001234”);}

3、自定义Log

开发者可通过 Android 日志系统的 LogCat,来收集和查看系统调试输出的信息,通过打印输出的 Log 信息来调查 Bug 发生时的应用程序信息,并通过TingYun SDK 上传自定义 Log 日志。
1、相关接口
/*
@enable 设置为 true,崩溃时上传 LogCat 日志
*/
enableLogging(boolean enable)
2、代码示例
NBSAppAgent.setLicenseKey("AppKey").withLocationServiceEnabled(true).enableLogging(true).start(this.getApplicationContext());

四、其他数据相关接口

1、控制台版本提示

TingYun_App_SDK 默认会校验当前使用的 SDK 版本是否为最新版本,新版 SDK 上线后,App 运行时会在控制台输出版本更新提示的 Log 日志,如不需要「版本更新提示」调用此接口关闭即可。
1、相关接口

说明:项目工程只有 debug 模式才会开启此功能。

可通过在 AndroidMainfest.xml 文件中的 application 标签添加 debuggable 属性控制是否开启调试模式。

<application android:debuggable=“true”>

NBSAppAgent.closeLogForUpdateHint();
2、代码示例。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
     NBSAppAgent.setLicenseKey("AppKey").withLocationServiceEnabled(true)
     .closeLogForUpdateHint().start(this.getApplicationContext());
     //初始化时调用接口关闭版本提示功能
}

2、自定义版本号

TingYun_SDK 默认使用应用的「versionName」作为版本号上传,如需自定义版本号可以在初始化 SDK 时调用该接口进行配置。
1、相关接口。
//versionName最多包含64个字符,支持中文、英文、数字、下划线
NBSAppAgent.setVersionName(String versionName);
2、代码示例。
public class MyApplication extends Application {
    @Override
    public void onCreate() {  
	NBSAppAgent.setLicenseKey("AppKey")
	.setVersionName("v2.11.1")//在初始化SDK时调用接口设置版本号
	.start(this.getApplicationContext());
	}
}

3、自定义渠道

开发者可以在初始化TingYun SDK时设置自定义的渠道名称。

1、相关接口。
NBSAppAgent.setChannelID(String channelID);
2、代码示例。
public class MyApplication extends Application {
    @Override
    public void onCreate() {  
	NBSAppAgent.setLicenseKey("AppKey")
	.setChannelID("应用宝")//在初始化SDK时调用接口设置渠道
	.start(this.getApplicationContext());
	}
}

4、地理位置采集

TingYun SDK 支持采集设备的地理位置信息,开发者需要在初始化 SDK 时调用 withLocationServiceEnabled()方法。
采集地理位置需要配置 android.permission.ACCESS_FINE_LOCATION 权限。

1、相关接口。
//enable 设置为 true,采集 GPS 经纬度信息
NBSAppAgent.withLocationServiceEnabled(boolean enable);
2、代码示例。
public class MyApplication extends Application {
    @Override
    public void onCreate() {  
	NBSAppAgent.setLicenseKey("AppKey")
	.withLocationServiceEnabled(true)//默认flase,设置为true采集地理位置信息
	.start(this.getApplicationContext());
	}
}

5、日志输出

TingYun SDK 可以输出采集到的数据日志。
1、相关接口。
//enable 设置为 true,打印日志
NBSAppAgent.setLogEnable(boolean enable);
2、代码示例。
public class MyApplication extends Application {
    @Override
    public void onCreate() {  
	NBSAppAgent.setLicenseKey("AppKey")
	.start(this.getApplicationContext());
	
	NBSAppAgent.setLogEnable(true);//设置成 true,输出日志
	}
}