用户体验数据相关接口

自定义Trace埋点

由于 TingYun_SDK 默认关注系统类和方法,无法关注「业务代码」的耗时情况,使用「自定义埋点」接口可以补全「页面体验分析」和「操作体验分析」模块中的【分解图】,能够帮助开发者清晰的了解其业务代码的耗时及调用情况。

  • 相关接口

注意:「自定义Trace埋点」接口需要成对调用,请勿跨方法、跨进程以及在异步加载和递归调用中使用该接口。

/**
 * @param tracerName 为当前方法所在方法名或自定义名称,支持中文、英文、数字、下划线,但不能包含空格或其他的转义字符
 */
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 默认计算 SDK 初始化开始至第一个页面加载结束的时间为「冷启动耗时」,研发人员可以根据自身应用需求更改计算「冷启动耗时」的结束点。

  • 开启自定义冷启动耗时控制开关

    • 相关接口

        /**
         * @param isCustom 默认为 false,设置为 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」接口设置生效。

    • 相关接口

        /** 
         * @param className 需传入启动的第一个 Activity 的 class.getName,需在第一个 Activity onResume() 结束之后调用 
         */ 
        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 默认以异步请求完成的时间点作为页面内容加载完成的时间点。用户可以通过 setPageLoadingEndTime() 方法手动埋点,设置页面结束时间点。

  • 相关接口
/**
 * @param clazz 为页面 Activity 的 class
 */
NBSAppAgent.setPageLoadingEndTime(Class clazz);
  • 代码示例
//用户可以在页面加载回调中(或其他合适的位置),调用setPageLoadingEndTime()方法
private void showSuccess() {
    networkStateView.showSuccess();
    // 传入当前 Activity.class 或当前 Fragment.class
    NBSAppAgent.setPageLoadingEndTime(MainActivity.class);
}

自定义操作

通过「自定义操作」来定义一个【业务操作】用以了解其性能表现情况.

  • 相关接口

注意:「自定义操作」接口需要成对调用,actionName不可为空,支持跨方法、跨线程调用。

/**
 * @param actionName 操作名称
 */
standbyEventActionStart(String actionName);
standbyEventActionEnd(String actionName);
  • 代码示例
private void login() {   
    NBSAppAgent.standbyEventActionStart(“login”); 

        ………

    NBSAppAgent.standbyEventActionEnd(“login”);
}

设置 ViewID

设置 viewId 后,平台「操作分析」和「可视化命名」功能会优先使用该属性进行归类。

  • 相关接口
/**
 * @param view 为要设置 ID 的控件
 * @param viewId 为设置的控件 ID,viewId 最多可包含 128 个字符,支持英文、数字、下划线
 */
NBSAppAgent.setViewId(View view, String viewId);
  • 代码示例
Button button = findViewById(R.id.bt_login);
NBSAppAgent.setViewId(button, "login");

设置 ViewName

设置ViewName后,平台「操作分析」和「可视化命名」功能会优先使用该属性进行归类。

  • 相关接口
/**
 * @param view View 对象
 * @param description ViewName,最多包含 128 个字符
 */
setViewContent(View view, String description)
  • 代码示例
Button button = findViewById(R.id.bt_login);
NBSAppAgent.setViewContent(button, "登录");

设置 PageName「视图别名」

设置 PageName 后,平台「操作分析」和「可视化命名」功能会优先使用该属性进行归类。

  • 相关接口
/**
 * @param activity Activity 对象
 * @param fragment Fragment 对象
 * @param alias PageName,最多可包含 128 个字符
 */
setPageName(Activity activity, String alias)
setPageName(Fragment fragment, String alias)
  • 代码示例
public class MainActivity extends AppCompatActivity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_uiactivity);
        NBSAppAgent.setPageName(this, "主页");
    }
}

采集列表操作 item 位置

若项目使用的是 androidx 包的 RecyclerView,且重写了 onBindViewHolder(),SDK 可以自动嵌码采集 item 位置数据。若项目使用的是 ListView(GridView) 或 support 包的 RecyclerView ,需要手动调用 setRowTagForList() 方法采集 item 位置数据。

  • 相关接口
/**
 * 采集 support 包的 RecyclerView 或 ListView(GridView),需要在 Adapter 中埋点
 * @param obj item View
 * @param position 位置
 */
NBSActionInstrumentation.setRowTagForList(Object obj, int position)
  • 代码示例
//  如果使用了 support 包的 RecyclerView,需要在 Adapter 的 onBindViewHolder() 方法末行埋点
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    ...// 其他代码
    NBSActionInstrumentation.setRowTagForList(holder.itemView, position);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position, @NonNull List payloads) {
    super.onBindViewHolder(holder, position, payloads);
    ...// 其他代码
    NBSActionInstrumentation.setRowTagForList(holder.itemView, position);
}

//  如果使用了 ListView 或 GridView,需要在 Adapter 的 getView() 方法末行埋点
public View getView(int position, View convertView, ViewGroup parent) {
    ...// 其他代码
    NBSActionInstrumentation.setRowTagForList(view, position);
    return view;
}
© 2007-2024 北京基调网络股份有限公司 all right reserved,powered by Gitbook本文档更新于: 2024-03-04 10:18

results matching ""

    No results matching ""