高级功能
卡顿分析
卡顿分析需要集成基础组件库common 7.2.8及以上,apm库1.2.0及以上才可以使用,下载最新SDK
卡顿回调
崩溃、卡顿、自定义异常共用同一个回调接口。回调支持根据崩溃、卡顿、 自定义错误追加不同上下文。
该接口在iOS SDK至1.9.3及以上做了升级,如使用升级后的方法,需要删除旧方法。
当卡顿发生时,您可以通过此回调回调到您的业务逻辑,该接口返回string类型数据,该返回的数据会写入到卡顿文件中并上传到服务器展示。卡顿回调的限制为256个字符
新方法(适用iOS SDK 1.9.3及以上)
接口说明:
/**
* 异常回调,随异常信息一起上报。不同于“setCrashCBBlock:”方法,回调中提供了异常类型,两个方法按需取一个实现即可。return字符串不能大于256字节。
*/
+ (void)setCrashCallBackBlock:(CrashCallBackBlock _Nullable )cbBlock;接口示例:
[UMCrashConfigure setCrashCallBackBlock:^NSString * _Nullable(UMCrashType type) {
switch (type) {
case UMCrashTypeException:
//崩溃
break;
case UMCrashTypeBlock:
//卡顿
break;
case UMCrashTypeUserReported:
//自定义异常
break;
default:
break;
}
return @"崩溃/卡顿自定义字段 设置";
}];旧方法(适用iOS SDK 1.9.3以下)
回调接口:
//return字符串不能大于256字节,大于部分将被截取
+(void)setCrashCBBlock:(CallbackBlock_Nullable)cbBlock;接口示例:
[UMCrashConfigure setCrashCBBlock:^NSString*_Nullable{
return@“卡顿时自定义字符串”;
}];上传后即可在错误详情-自定义字段中「异常发生字段」中展示,「使用过程字段」由自定义信息更新接口提供
自定义信息更新
该接口在iOS SDK至1.9.3及以上使用,崩溃、卡顿、自定义异常共用同一接口。
接口说明:
/**
* 增加自定义信息
* 设置此接口后,当发生崩溃、卡顿、自定义错误时会携带相应信息。如用户ID、直播房间号。注:一个生命周期最多支持设置10对
* @key NSString 键。
* @value NSString 值。
*
*/
+ (void)addCustomInfoKey:(NSString *_Nonnull)key value:(NSString *_Nonnull)value;接口示例:
[UMCrashConfigure addCustomInfoKey:@"xxxKey" value:@"xxxValue"];上传后即可在错误详情-自定义字段中「使用过程字段」中展示,「异常发生字段」由崩溃回调接口提供

自定义日志(日志跟踪)
崩溃、卡顿、自定义异常共用同一个回调接口。
接口说明:
@interface UMAPMCustomLog : NSObject
// tag 字节最大长度为64, msg 字节最大长度为 256
+ (void)vTag:(NSString *)tag msg:(NSString *)msg;
+ (void)dTag:(NSString *)tag msg:(NSString *)msg;
+ (void)iTag:(NSString *)tag msg:(NSString *)msg;
+ (void)wTag:(NSString *)tag msg:(NSString *)msg;
+ (void)eTag:(NSString *)tag msg:(NSString *)msg;
/// 设置写入日志的缓存大小,日志将根据设置的缓存大小循环写入,最大限制100条,未设置默认100条
/// - Parameter size: 最大缓存条数
+ (void)setMaxCount:(NSInteger)size;
@end接口示例:
[UMAPMCustomLog eTag:@"demo" msg:@"customlog"];
启动分析
启动分析功能需要使用U-APM SDK版本V 1.3.1及以上,集成后自动开通
启动阶段
启动分为冷启动和热启动:
冷启动
默认监控四个预定义启动阶段:
Pre-初始化耗时:从进程开始函数exec开始到指定+load执行的阶段。
初始化耗时:从指定的+load执行到finishLaunching的阶段。
应用构建耗时:从finishLaunching到FirstVC.viewDidLoad()的阶段。(viewDidLoad里面还需要构建childview)
首页面加载耗时:从FirstVC.viewDidLoad()到FirstVC.viewDidAppear()结束,首次渲染完成。
热启动
从applicationWillEnterForeground()开始到applicationDidBecomeActive()结束。
启动监控的方式
启动监控分自动监控和手动监控两种模式。
两种模式可以交叉使用,以用户手动埋点方式为准。
自动模式
用户只需要初始化appkey即可。
用户也可以设置可选的操作来设置首ViewController来明确首页面,保证正确的监控冷启动首页面的加载耗时。 相关的API如下:
+(void)setRootVCCls:(Class)cls;//在DidFinishLaunching第一句代码提前设置RootViewController如果没有设置,我们会寻找[UIApplication sharedApplication]的delegate的window的rootViewController为监控生命周期。
手动模式
目前手动模式只支持冷启动/首次启动阶段的埋点
相关的API如下:
/*
* 手动设置三个预定义时间结束时间(初始化耗时结束,应用构建耗时结束,页面加载耗时结束)
*/
+(void)setPredefineLaunchType:(UMPredefineLaunchType)predefineLaunchType;
目前给出的冷启动的三个预定义阶段的埋点分别为:
1、初始化耗时结束时间点(UMPredefineLaunchType_DidFinishLaunchingEnd)。
2、应用构建耗时结束时间点(UMPredefineLaunchType_ViewDidLoadEnd)。
3、首页面加载完成的结束时间点(UMPredefineLaunchType_ViewDidAppearEnd)。
分别对应的枚举变量为:
//冷启动的预定义类型
typedef NS_ENUM(NSInteger,UMPredefineLaunchType){
UMPredefineLaunchType_DidFinishLaunchingEnd,//在didFinishLaunchingWithOptions的最后一句设置
UMPredefineLaunchType_ViewDidLoadEnd,//在第一个ViewController的viewDidLoad函数的最后调用
UMPredefineLaunchType_ViewDidAppearEnd//在第一个ViewController的viewDidAppear函数的最后调用
};初始化耗时结束时间点示例
用户需要在系统回调函数的didFinishLaunchingWithOptions的函数最后埋点,以保证准确性。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[UMConfigure initWithAppkey:@"5fd9c8e6498d9e0d4d916130" channel:@"App Store"];
//....TODO
//在didFinishLaunchingWithOptions的最后埋点,以保证准确性
[UMLaunch setPredefineLaunchType:UMPredefineLaunchType_DidFinishLaunchingEnd];
return YES;
}首页面加载耗时结束时间点示例
用户需要在第一个ViewController的viewDidAppear的函数最后埋点,以保证准确性。
- (void)viewDidAppear {
[super viewDidAppear];
//在viewDidAppear的最后埋点
[UMLaunch setPredefineLaunchType:UMPredefineLaunchType_ViewDidAppearEnd];
}用户自定义阶段埋点
用户自定义阶段埋点只能在冷启动阶段埋点,用户统计某个函数或者代码块的执行时间,方便客户细化启动阶段。
1、beginLaunch和endLaunch必须配对使用
2、beginLaunch和endLaunch的调用时机必须在冷启动界面viewDidAppear之前调用,后续的调用无效
3、beginLaunch和endLaunch的参数长度不能大于10个字符。
4、beginLaunch和endLaunch的个数不能大于10个。
相关的API如下:
/*
* 用户在冷或者热启动阶段设置自己的自定义阶段
* @note beginLaunch和endLaunch必须要配对调用
* 如果调用时间段,不在页面加载耗时结束前调用,是不会上报的
*/
+ (void)beginLaunch:(NSString *)methodName;
+ (void)endLaunch:(NSString *)methodName;代码示例如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[UMLaunch beginLaunch:@"initCommon"];
[UMConfigure initWithAppkey:@"5fd9c8e6498d9e0d4d916130" channel:@"App Store"];
[UMLaunch endLaunch:@"initCommon"];
NSLog(@"UMAPM version:%@",[UMCrashConfigure getVersion]);
[UMLaunch setPredefineLaunchType:UMPredefineLaunchType_DidFinishLaunchingEnd];
return YES;
}内存分析
目前U-APM 内存分析模块为专业版的模块,需要付费开通后使用。
内存分析支持OOM异常和内存占用指标。
OOM异常和内存占用 需要接入U-APM SDK 1.4.0及以上版本,并建议搭配最新版本Common接入, 如您不希望采集内存占用相关指标,可通过【集成接入】-【采集开关】调整。
采集开关
本采集开关适用于开发者在不想使用某个U-APM 监控模块时可灵活自定义采集范围。如目前提供功能都需要采集,则不需要使用该开关,如需要调整某个模块,可按照下面配置变量说明进行设置。自U-APM SDK 1.4.0及以上版本提供该开关,如低于1.4.0版本SDK 需要先升级后再使用。
此API需要在调用初始化方法前使用
UMAPMConfig类为UMAPM中各个模块的提供配置打开或关闭功能。
@interface UMAPMConfig : NSObject<NSCopying>
+(UMAPMConfig*)defaultConfig;
/**
* crash&卡顿监控开关,默认开启
*/
@property (nonatomic,assign) BOOL crashAndBlockMonitorEnable;
/**
* 启动模块监控开关,默认开启
*/
@property (nonatomic,assign) BOOL launchMonitorEnable;
/**
* 内存占用模块监控开关,默认开启
*/
@property (nonatomic,assign) BOOL memMonitorEnable;
/**
* OOM模块监控开关,默认开启
*/
@property (nonatomic,assign) BOOL oomMonitorEnable;
/**
* 网络模块监控开关,默认开启
*/
@property (nonatomic,assign) BOOL networkEnable;
/**
* H5打通模块开关,默认开启
*/
@property (nonatomic,assign) BOOL javaScriptBridgeEnable;
/*
* 卡顿监控参数
* 发送检测心跳的时间间隔。单位:秒。
* 区间范围[1,4],超过就用默认值2
*/
@property (nonatomic, assign) float sendBeatInterval;
/*
* 卡顿监控参数
* 检测卡顿的时间间隔 单位是秒。 (发送心跳后checkBeatInterval秒进行检测)
* 区间范围[1,4],超过就用默认值2
*/
@property (nonatomic, assign) float checkBeatInterval;
/*
* 卡顿监控参数
* 连续多少次没心跳 认为触发卡顿
* 区间范围[1,4],超过就用默认值3,注意此参数必须为整数
*/
@property (nonatomic, assign) NSInteger toleranceBeatMissingCount;
@end配置模块 | 配置变量名 | 默认值 |
crash&卡顿模块 | crashAndBlockMonitorEnable | YES |
启动模块 | launchMonitorEnable | YES |
内存占用模块 | memMonitorEnable | YES |
OOM模块 | oomMonitorEnable | YES |
网络模块 | networkEnable | YES |
H5 | javaScriptBridgeEnable | YES |
日志回捞 | logCollectEnable | YES |
示例
配置类默认都开启,如果用户需要关闭部分功能,请在初始化appkey之前配置好。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UMAPMConfig* config = [UMAPMConfig defaultConfig];
config.crashAndBlockMonitorEnable = YES;
config.launchMonitorEnable = YES;
config.memMonitorEnable = NO;
config.oomMonitorEnable = NO;
config.sendBeatInterval = 2;
config.checkBeatInterval = 2;
config.toleranceBeatMissingCount = 3;
[UMCrashConfigure setAPMConfig:config];
[UMConfigure initWithAppkey:@"5fd9c8e6498d9e0d4d916130" channel:@"App Store"];
}H5 页面分析
JS SDK应用于H5分析功能,需要与Android/iOS SDK V1.6.0及以上的版本同步使用。使用H5页面分析需要付费升级为专业版本,如您已经有对接的友盟商务销售请联系他确认意向,如果没有您可以联系我们了解开通
iOS/Android端与JS SDK打通的同时,JS SDK也要与iOS/Android端进行打通,详情可以参考JS SDK介入文档
SDK 初始化前,将UMAPMConfig实例的javaScriptBridgeEnable属性设置为YES (注:默认开启)
UMAPMConfig* config = [UMAPMConfig defaultConfig];
...其他配置
config.javaScriptBridgeEnable = YES;
[UMCrashConfigure setAPMConfig:config];
//初始化
UMConfigure initWithAppkey:UMAPPKEY channel:@"App Store"];原生页面分析
模块开关
SDK 初始化前,将UMAPMConfig实例的pageMonitorEnable属性设置为YES (注:默认开启)
UMAPMConfig* config = [UMAPMConfig defaultConfig];
...其他配置
config.pageMonitorEnable = YES;
[UMCrashConfigure setAPMConfig:config];
//初始化
UMConfigure initWithAppkey:UMAPPKEY channel:@"App Store"];用户自定义埋点
用于统计某个函数或者代码块的执行时间,方便客户细化启动阶段。
1、trackBegin和trackEnd必须配对使用
2、trackBegin和trackEnd的调用时机必须在界面viewDidAppear结束之前调用,后续的调用无效
3、trackBegin和trackEnd的参数长度不能大于10个字符。
4、trackBegin和trackEnd的个数不能大于6个(以methodName为依据)。
+ (void)trackBegin:(NSString *)methodName viewController:(UIViewController *)vc;
+ (void)trackEnd:(NSString *)methodName viewController:(UIViewController *)vc;