跳转到主要内容
PRODUCT DOCUMENTS

快速找到所需文档,高效完成接入与排障

浏览产品文档与友盟 Skill,展开目录并阅读正文。

高级功能

卡顿分析

卡顿分析需要集成基础组件库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@“卡顿时自定义字符串”;
}];

上传后即可在错误详情-自定义字段中「异常发生字段」中展示,「使用过程字段」由自定义信息更新接口提供image

自定义信息更新

重要

该接口在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"];

上传后即可在错误详情-自定义字段中「使用过程字段」中展示,「异常发生字段」由崩溃回调接口提供

image

自定义日志(日志跟踪)

重要

崩溃、卡顿、自定义异常共用同一个回调接口。

接口说明:

@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"];

image

启动分析

启动分析功能需要使用U-APM SDK版本V 1.3.1及以上,集成后自动开通

启动阶段

启动分为冷启动和热启动:

冷启动

默认监控四个预定义启动阶段:

  1. Pre-初始化耗时:从进程开始函数exec开始到指定+load执行的阶段。

  2. 初始化耗时:从指定的+load执行到finishLaunching的阶段。

  3. 应用构建耗时:从finishLaunching到FirstVC.viewDidLoad()的阶段。(viewDidLoad里面还需要构建childview)

  4. 首页面加载耗时:从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"];

应用内(Webview版)H5 SDK集成文档

原生页面分析

模块开关

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;