Flutter接口说明
自定义网络请求
基调听云SDK 通过设置 HttpOverrides.global 自动采集网络数据,目前支持httpClient以及基于HttpClient 封装的dio、http等网络库。
若您的项目设置了 HttpOverrides,将会导致基调听云SDK无法采集网络数据,需要手动埋点采集数据。
- 相关接口
/*
@url:网络请求的完整 url
*/
TYWebRequestTiming timing = await Tingyun().createWebRequest(String url);// 创建一条网络性能数据
timing.start();// 请求开始
/*
@code:请求的状态码
*/
timing.stop(int code);// 请求结束
- 代码示例
var url = "https://www.tingyun.com";
TYWebRequestTiming timing = await Tingyun().createWebRequest(url);
timing.startWebRequestTiming();
var response = await http.get(url)
.then((response) {
timing.stop(response.statusCode);// 请求结束
return response;
});
自定义启动结束点
基调听云SDK 默认计算 SDK 初始化开始至第一个页面加载结束的时间为「冷启动耗时」,研发人员可以根据自身应用需求更改计算「冷启动耗时」的结束点。
项目要求
Android 项目:采集冷启动(含首次启动)数据需实现自定义的 Application 类。
iOS 项目:采集启动数据需要在 main 函数中嵌码。
开启自定义启动开关
需在 native 部分初始化 TingYun_SDK 时调用相关接口。
Android 接口
/* @isCustom:是否启用自定义启动,默认 false,如需开启,置为 true */ NBSAppAgent.isCustomAppStart(boolean isCustom);
iOS 接口
/** 是否启用自定义启动,在启动SDK之前调用,默认 NO,如需开启,置为 YES */ + (void)customLanuchEnd:(BOOL)enable;
代码示例
- Android 示例
public class MyApplication extends Application { @Override public void onCreate() { NBSAppAgent.setLicenseKey("AppKey") .isCustomAppStart(true)//在初始化SDK时调用,开启自定义启动时间功能 .start(this.getApplicationContext()); } }
- iOS 示例
int main(int argc, char* argv[]) { @autoreleasepool { [NBSAppAgent customLanuchEnd:YES]; [NBSAppAgent setRedirectURL:@"Dc_Redirect"]; [NBSAppAgent startWithAppID:@"AppKey"]; return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } }
设置自定义启动的结束点
需要开启自定义启动开关,当自定义启动开关设置为 true 时,自定义启动结束点的接口设置才会生效。
相关接口
Tingyun().setCustomOnResumeEndIns();
代码示例
Widget build(BuildContext context) { Tingyun().setCustomOnResumeEndIns(); return Scaffold( body:Column( crossAxisAlignment: CrossAxisAlignment.center, ..... )); }
自定义用户操作
支持通过埋点方式采集操作数据,可支持 root 和 sub 两层 trace(注意:这里两层是指 sub trace 允许有多个并非两个)。
接口限制
操作数据截至到 root 节点结束。
多组埋点 root 节点不能交叉调用。
相关接口
/*
@name:操作名称
*/
TingyunRootAction rootAction = Tingyun().enterAction(String name);//创建一个操作
/*
@name:子 Action 名称
*/
TingyunAction subAction = rootAction.enterAction(String name);//创建一个子 Action
subAction.leaveAction();//子 Action 完成
/*
@props:附加信息
@tag:tag 标识
*/
rootAction.leaveAction({Map<String, dynamic> props, String tag = ""});//操作完成
- 代码示例
TingyunRootAction rootAction = Tingyun().enterAction('my button enter');
TingyunAction subAction1 = rootAction.enterAction('sub1 button enter');
subAction1.leaveAction();
TingyunAction subAction2 = rootAction.enterAction('sub2 button enter');
subAction2.leaveAction();
rootAction.leaveAction(props:{"key1":"value1","key2":"value2"},tag: "tag");
自定义错误
使用「自定义错误」接口可以采集研发人员「try / catch 异常」和「业务错误」,并在基调听云平台异常分析>错误中进行展示,可以帮助研发人员收集异常和错误。
- 相关接口
/*
@message:不可以传空,最大长度 1024 字节,超出截取前 1024 字节
@stackTrace:上传 exception 取到抛出时的堆栈
@props:value 值支持 Number, String, Array, Map 类型,最大限制128k,若超出最大限制上传为空
*/
Tingyun().reportError(String message, String stackTrace, {Map<String, dynamic> props});
- 代码示例
try {
throw new StateError('This is an async Dart exception.');
} catch (exception, stack) {
Tingyun().reportError(exception.toString(), stack.toString(),props: {"ke y1":"value1","key2":"value2"});
}
设置用户标识
通过添加用户标识可在基调听云报表平台通过该标识检索到具体用户的性能问题。
- 相关接口
/*
@userIdentifier:最多包含64个字符,超出截取前64字符,支持中文、英文、数字、下划线,但不能包含空格或其他的转义字符
*/
Tingyun().setUserIdentifier(String userIdentifier);
- 代码示例
Tingyun().setUserIdentifier("zhangsan@tingyun.com");
记录用户路径(面包屑)
研发人员可以在应用程序的任意位置调用「面包屑」接口进行埋点。当应用程序发生崩溃时,SDK 会按代码的触发顺序收集埋点信息并在崩溃轨迹中高亮显示,以协助研发人员在应用崩溃时了解代码调用逻辑。
- 相关接口
/*
@breadcrumb:自定义信息,最多包含100个字符,超出截取前100字符,支持中文、英文、数字、下划线
*/
Tingyun().leaveBreadcrumb(String breadcrumb);
- 代码示例
Tingyun().leaveBreadcrumb("添加购物车");
自定义附加信息
在应用发生崩溃的时候,研发人员往往需要更多的信息以收集现场环境,可以通过调用「自定义崩溃附加信息」接口上传额外信息,协助分析崩溃问题。
- 相关接口
/*
只保留最新的10条数据,随崩溃上传
@key:key 值
@value:value 值,最大长度限制100,超出则截取前100
*/
Tingyun().setUserCrashMessage(String key, String value);
- 代码示例
Tingyun().setUserCrashMessage("当前页面", "Main");