跳到主要内容

用户体验数据

自定义冷启动耗时

SDK 默认计算 SDK 初始化开始至第一个页面加载结束的时间为「冷启动耗时」,研发人员可以根据自身应用需求更改计算「冷启动耗时」的结束点。

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

    • 相关接口
    /**
    * @enable 传入YES,开启设置自定义启动结束功能
    */
    + (void)customLaunchEnd:(BOOL)enable;
    • 代码示例
    int main(int argc, char * argv[]) {
    @autoreleasepool {
    // 设置开启自定义结束点功能,在启动SDK之前调用。
    [NBSAppAgent customLaunchEnd:YES];
    [NBSAppAgent startWithAppID:@"appkey"];
    ...
    }
    }
  • 设置自定义冷启动耗时的结束点

    该接口需要与「customLaunchEnd」配合使用,当设置「customLaunchEnd」接口为 YES 时,「launchFinish」接口设置生效。

    • 相关接口
    /**
    * 自定义结束时间点,在启动结束时调用。
    */
    + (void)launchFinish:(NSString *)lanuchName;
    • 代码示例
    -(void)viewDidAppear:(BOOL)animated
    {
    [super viewDidAppear:animated];
    [NBSAppAgent launchFinish:@"firstVC"];
    }

自定义Trace埋点

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

  • 相关接口

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

// @String Name为当前方法所在方法名或自定义名称,支持中文、英文、数字、下划线,但不能包含空格或其他的转义字符
beginTracer(@"StringName")
endTracer(@"StringName")
  • 代码示例
- (void)doSomething
{
// 用户可以在SDK初始化后的任意方法前后添加自定义Trace
beginTracer(@"TraceName")
// write you code here
endTracer(@"TraceName")
}

自定义操作

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

  • 相关接口

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

+ (void)customActionStart:(NSString *)actionName;
+ (void)customActionEnd:(NSString *)actionName withTag:(NSString *)tag withCustomInfo:(NSDictionary *)customInfo;
  • 代码示例
- (void)doSomething
{
[NBSAppAgent customActionStart:@"doSomething"];
...
NSDictionary *cust = @{@"key":@"value"};
[NBSAppAgent customActionEnd:@"doSomething" withTag:@"tag" withCustomInfo:cust];
}

自定义页面结束

通过「自定义页面结束」来定义一个【页面实际加载时间】用以了解其性能表现情况

  • 相关接口

注意:「自定义页面结束」接口需要成对调用,pageName不可为空,支持跨方法、跨线程调用,App启动过程中的视图控制器不支持自定义;需要将 customPageLoad: 返回的结果 customId 传入到 customPageLoadFinish:withPageName: 中来关联结束。 在待自定义视图控制器 viewDidLoad 中调用 customPageLoad: ;在待自定义视图控制器 viewDidAppear 之后调用customPageLoadFinish:withPageName: 。

/**
* 是否自定义页面结束点
* @param enable 是否自定义.
* @result identifier 关联结束。
*/
+ (NSInteger)customPageLoad:(BOOL)enable;

/**
* 自定义页面结束。
* @param customId 传入customPageLoad返回的id。
* @param pageName 页面名称
*/
+ (void)customPageLoadFinish:(NSInteger)customId withPageName:(NSString *)pageName;
  • 代码示例
- (void)viewDidLoad {
[super viewDidLoad];
customId = [NBSAppAgent customPageLoad:YES];
...
}

- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
....
dispatch_async(dispatch_get_main_queue(), ^{
[NBSAppAgent customPageLoadFinish:customId withPageName:@"CustomPage"];
});
}

设置ViewID

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

  • 示例
UIView *view = [UIView new];
[view setTingyunAttributesIdentifier:@"TYIdentifier"];

设置ViewName

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

  • 示例
UIView *view = [UIView new];
[view setTingyunAttributesName:@"TYViewName"];

设置PageName「视图别名」

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

  • 示例
ViewController *vc = [ViewController new];
[vc setTingyunAttributesPageName:@"TYPageName"];

设置页扫描间隔

可以自定义扫描页面中 View 的时间间隔,默认 50ms 扫描一次。

  • 接口
/**
*设置页面加载扫描间隔,单位ms,默认50ms
*/
+ (void)setPageScanInterval:(NSInteger)interval;
  • 示例
[NBSAppAgent setPageScanInterval:100]; // 扫描间隔设置为 100ms

设置扫描超时

可以自定义扫描页面中 View 的超时时间,默认 5s。

  • 接口
/**
*设置页面加载超时时间,单位s,默认5s,最大可设置15s
*/
+ (void)setPageLoadTimeoutSec:(NSInteger)sec;
  • 示例
[NBSAppAgent setPageLoadTimeoutSec:10]; // 设置扫描超时时间为 10 秒

设置View状态

页面加载过程中,SDK 以一定间隔扫描当前页面中 View 的状态计算页面是否加载完成,可以通过设置View属性isInvalidView、isIgnoredView来设置View状态,SDK 将优先使用设置的状态。

  • 说明
// 先将该view设成无效的,等内容渲染完成后在设置成有效,可以解决占位图导致页面加载结束点不准的问题
@property (nonatomic, assign) BOOL isInvalidView;
// 忽略该view,计算页面加载完成度时,该view不参与计算
@property (nonatomic, assign) BOOL isIgnoredView;
  • 示例
 UIView *view = [[UIView alloc] initWithFrame:CGRectMake(200, 200, 200, 200)];
view.isIgnoredView = YES; // 先将该view设成无效的
view.isInvalidView = YES; //忽略该view,计算页面加载完成度时,该view不参与计算
...
//页面加载结束
view.isIgnoredView = NO;