跳转到主要内容
PRODUCT DOCUMENTS

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

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

接入与基础功能

*U-APM推荐在国内发行的APP上使用,我们持续更新优化SDK,提供APP性能监控产品。

*如您需要应用在海外应用市场,请您通过工单提交申请,申请入口

Cocoapods自动集成(推荐)

更新Pod环境

在终端执行pod setup命令,拉取最新pod库时间较长。

$ pod setup

集成组件化各业务SDK

Cocoapods集成友盟+可灵活配置所需SDK,如工程target名为UMPlusDemo,可选添下面的SDK,如在项目根目录的Podfile的格式:

target 'UMPlusDemo'do
    pod ‘<友盟+SDK名>'
end
说明

升级说明:如果现有项目已经通过 Pod 集成过友盟相关SDK,需要检查替换相关 Pod 名,参考页面最后一节「较早Cocoapods集成版本升级说明」进行相应 Pod 替换。

由于 pod search 命令对新增项目可能出现无法找到的情况,建议直接使用 pod update 命令进行直接更新。

pod search的解决方案请在本页最后[常见问题]中查看

基础库

    pod 'UMCommon'
    pod 'UMDevice'
说明

可在项目中加入 “基础库-日志库” 中的 UMCCommonLog 进行开发调试。

APM库

实现APM相关功能,如稳定性分析等

    pod 'UMAPM'

日志库(调试)

开发阶段进行调试SDK及相关功能使用,可在发布 App 前移除

    pod 'UMCCommonLog'

手动集成

依赖库

CoreTelephony.framework    获取运营商标识

    libz.tbd  数据压缩

    libsqlite.tbd  数据缓存

    libc++.tbd  异常捕获

SystemConfiguration.framework  判断网络状态

工程配置

  1. 选择SDK功能组件并下载,解压.zip文件得到相应组件包(例如:UMCommon.framework,UMDevice.framework,UMAPM.framework等)。

  2. XcodeFile —> Add Files to "Your Project",在弹出Panel选中所下载组件包->Add。(注:选中“Copy items if needed”)apm1apm2

  3. 添加依赖库,在项目设置target -> 选项卡General ->Linked Frameworks and Libraries如下:apm3

  4. Targets->BuildSettings 中 , Other Linker Flags增加-ObjC,⼀定要添加此项,注意是⼤写C,不是⼩写c。

初始化

重要

我们强烈建议您仅使用一款错误及性能捕获SDK(U-APM),多款错误捕获SDK可能存在彼此拦截干扰及对您终端用户性能影响。

如果您因为特殊需要集成多个SDK,请后初始化友盟+的 iOS U-APM SDK。

1.说明和用途

组件化SDK用来聚合(移动统计 SDK,消息推送 SDK,社会化分享 SDK等)业务的初始化接口,方便对各个业务的初始化统一调用。

2.接口函数

接口:

/** 初始化友盟所有组件产品
 @param appKey 开发者在友盟官网申请的appkey.
 @param channel 渠道标识,可设置nil表示"App Store".
 */
+(void)initWithAppkey:(NSString*)appKey channel:(NSString*)channel;

参数:

参数

类型

描述

备注

appKey

NSString

在 App Analytics 创建应用后,进入数据报表页中, 在“统计分析->设置->应用信息” 页面查看。

AppKey为必需,为了根据您的AppKey查看后台的实时和离线统计数据,帮助您了解目前您的产品的详细情况。

channel

NSString

channel为您应用的推广渠道。channel为nil或@””时,默认会被当作@”App Store”渠道

渠道命名规范:可以由英文字母、阿拉伯数字、下划线、中划线、空格、括号组成,可以含汉字以及其他明文字符,但是不建议使用中文命名,会出现乱码。 首尾字符不可以为空格 最多256个字符 “App Store” 及其各种大小写形式,作为友盟保留的字段,不可以作为渠道名。

提示每台设备仅记录首次安装激活的渠道,如果该设备再次安装其他渠道包,则数据仍会被记录在初始的安装渠道上。 所以在测试不同的渠道时,请使用不同的设备来分别测试。也可使用集成测试功能进行测试,了解更多集成测试请点击这里。

3.示例代码

#import <UMCommon/UMCommon.h>

-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
[UMConfigure initWithAppkey:@"Your appkey" channel:@"App Store"];
}

设置日志

1.说明和用途

设置是否在console输出sdk的log信息。详细集成

2.接口函数

接口:

/** 设置是否在console输出SDK的log信息.
 @param bFlag 默认NO(不输出log); 设置为YES, 输出可供调试参考的log信息. 发布产品时必须设置为NO.
 */
+(void)setLogEnabled:(BOOL)bFlag;

注意:在统计iOS SDK7.2.0及以上版本查看Crash Log时,需要断开Xcode调试,然后打开控制台,看iPhone日志,当App产生crash后再启动会发送。在Log中会有Crash Log Start 和Crash Log End中间就是上次产生的crash。

日志格式如下:

举例:如果用户传入的AppKey为空的话,打印日志如下图:

UMCommLog_invalidAppkeyLog

  • 2018-02-08 20:19:44: 指当前的打印的时间;

  • UMengCommon: 指组件化SDK(UMCommon.framework)的名字;

  • <1.4.3>: 指组件化SDK(UMCommon.framework)的版本号;

  • (Error): 指日志等级是Error的日志;

  • [CIE10001]: 指日志的FAQ的代号,也可通过FAQ文档找到对应的解决方法;

  • 用户传入的AppKey不合法,请到官网申请AppKey,以免影响自己App的统计数据。: 指提示开发者的错误信息,帮助开发者找到错误原因。

3.示例代码

#import <UMCommonLog/UMCommonLogHeaders.h>

-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
// Override point for customization after application launch.

//开发者需要显式的调用此函数,日志系统才能工作
[UMCommonLogManager setUpUMCommonLogManager];
}

Swift集成

[[Swift调用Objective-C需要建立一个桥接头文件进行交互 具体使用可参考|| Swift Demo]]

1. 新建桥接头文件

1.该文件在第一次创建Swift文件时会提示创建该文件,选择创建。

2.该文件可以手动创建, 选择Header File文件创建

桥接命名格式为 工程名-Bridging-Header.h

1

2. 配置信息

将桥接文件路径拷到Objective-C Bridging Header 里

设置Precompile Bridging Header 为Yes

3. 导入桥接头文件

在工程名-Bridging-Header.h中加入相应业务SDK的头文件

代码实例

//导入UMCommon的OC的头文件
#import <UMCommon/UMCommon.h>

//导入UMAPM的OC的头文件
#import <UMAPM/UMLaunch.h>
#import <UMAPM/UMCrashConfigure.h>
#import <UMAPM/UMAPMConfig.h>

//导入UMCommonLog的OC的头文件(如需加入日志库 把此注释打开)
#import <UMCommonLog/UMCommonLogManager.h>

//导入UMAnalytics的OC的头文件
#import <UMCommon/MobClick.h>

//导入UMAnalytics Game的OC的头文件(如需游戏统计可选)
#import <UMAnalyticsGame/MobClickGameAnalytics.h>

导入相对业务桥接文件

2

崩溃分析

通用崩溃

如您完成common和apm插件集成,完成初始化即可使用崩溃分析功能。

崩溃回调

重要

崩溃、卡顿、自定义异常共用同一个回调接口。回调支持根据崩溃、卡顿、 自定义错误追加不同上下文。

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

自定义维度

自定义维度,限定Key的自定义数据。支持的数据类型:String,SDK预设10个key。开发者可根据实际需求,选择合适的Key上报数据。

FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey1;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey2;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey3;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey4;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey5;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey6;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey7;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey8;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey9;
FOUNDATION_EXPORT UMAPMCustomStringDataKey const UMAPMCustomStringDataKey10;

SDK接口

SDK初始化完成后即可调用,作用于稳定性日志(崩溃、卡顿、FOOM)和部分性能日志(启动)。

/**
 * 添加自定义维度,SDK初始化前调用无效
 * @param data 需要更新的自定义维度
 */
+ (void)updateCustomData:(UMAPMCustomData *_Nonnull)data;

/**
 * 获取当前自定标维度信息,若未设置,返回空
 * @return 已设置的自定义维度
 */
+ (nullable UMAPMCustomData *)currentCustomData;

/**
 * 性能日志回调 目前仅支持启动(UMAPMPerfTypeLaunch)
 */
+ (void)setPerfCallBackBlock:(void(^_Nullable)(UMAPMPerfTypeName _Nonnull type))cbBlock;

/**
  * 获取设置的自定义维度数据
  * @param key 如果KEY不在预设的中,返回nil
  * @return 如果有设置,则返回当前值,如果没有设置,返回nil
  */
- (nullable NSString *)getStringParam:(UMAPMCustomStringDataKey)key;

/**
 * 设置自定义维度数据
 * @param key 如果KEY不在预设的中,则设置失败
 * @param param 长度不能超过 UMAPM_CUSTOM_DATA_MAX_STRING_VALUE_LENGTH
 *     value = null, 则会设置空串
 *     value = 长度超标字符串,则会截取前UMAPM_CUSTOM_DATA_MAX_STRING_VALUE_LENGTH个字符设置
 */
- (BOOL)putStringParam:(nullable NSString *)param forKey:(UMAPMCustomStringDataKey)key;

示例:

    UMAPMCustomData *data = [[UMAPMCustomData alloc] init];
    [data putStringParam:@"str1" forKey:UMAPMCustomStringDataKey1];
    [UMCrashConfigure updateCustomData:data];

性能日志

除全局设置外,支持在性能日志(启动)上传前设置,SDK提供了上传前的回调接口。

[UMCrashConfigure setPerfCallBackBlock:^(UMAPMPerfTypeName  _Nonnull type) {
        if ([type isEqualToString:UMAPMPerfTypeLaunch]) {
            UMAPMCustomData *customData = [UMCrashConfigure currentCustomData];
            [customData putStringParam:@"launch" forKey:UMAPMCustomStringDataKey2];
            [UMCrashConfigure updateCustomData:customData];
        }
    }];

设置上报后,您可以在「设置管理」里对自定义维度进行展示名称命名。自定义维度会在如下地方体现:

①个例下会展示错误在自定义维度下的value值。

image

②在菜单的筛选项里,可以根据自定义维度指定Key-Value筛选出符合条件的错误,查看错误个例和分布。

③在菜单的错误分布中,选择查看某自定义维度下各Value的占比分布

符号表

具体符号表说明,请见 点我了解

自定义异常接口

重要

自定义异常的崩溃回调(自定义字段)、自定义信息更新、自定义日志对应的接口,均在上面崩溃分析中提供接口描述,如需使用请参考上文。

1.说明和用途

设置用户的自定义异常上传功能。

重要

UMReportExceptionNameForCSharp(“csharp”)字段是为了unity3d的umeng的桥接SDK自动捕获使用的,请开发者避免使用此字段"csharp",用户一旦在name字段设置"csharp",会在崩溃的页面显示,传入其他字符会进入自定义异常产品界面中的“C#(仅限Unity)”的类型中

2.接口函数

/**
 *  上报自定义错误
 *  @name  名称   长度限制256字节以内,超过截断。
 *  @reason  错误原因 长度限制256字节以内,超过截断。
 *  @stackTrace  堆栈 长度限制100*1024字节以内,超过截断。
 *
 *  @example:
 *  // 日志类型唯一标识
 NSString* name = @"myUnity";
 NSString* reason = @"csharp exception";

 NSArray* stackTrace = [NSArray arrayWithObjects:
                        @"msg: Exception: Exception, Attempted to divide by zero.",
                        @"UnityDemo+ExceptionProbe.NormalException () (at <unknown>:0)",
                        @"UnityDemo.TrigException (System.Int32 selGridInt) (at <unknown>:0)",
                        @"UnityDemo.OnGUI () (at <unknown>:0)",
                        nil];
 *
 *[UMCrashConfigure reportExceptionWithName:name reason:reason stackTrace:stackTrace];
 *
 *
 */
+(void)reportExceptionWithName:(NSString* _Nonnull)name
                        reason:(NSString* _Nonnull)reason
                    stackTrace:(NSArray* _Nonnull)stackTrace;

网络分析

警告

网络分析功已开放至全部应用可用(免费版采样率1%),如您需要可升级SDK至1.8.5及以上并集成网络分析;请务必在此操作前,完成U-APM相关功能组件的集成。

适用范围

  1. 目前网络模块支持iOS系统的URL Loading System,支持iOS8及以上操作系统。

  2. 目前支持NSURLSession大部分通用API网络捕获(http或https)。

  3. 目前并不支持iOS低版本的NSURLConnection相关API。目前不支持Socket捕获。

  4. 增加网络分析模块在iOS13及以下系统的单独开关,以避免在同时集成NSURLProtocol和U-APM的网络模块的本身冲突引起崩溃(从1.5.4版本增加函数enableNetworkForProtocol),对应FAQ 。

功能开通

重要

目前U-APM 网络分析模块在免费、专业、尊享版均提供,但不同采样率,可根据实际情况选择。

网络分析采集开关 "config.networkEnable" 设置为YES (默认即为YES,详情可以查看本文档采集开关部分)

SDK捕获内容

网络模块目前捕获了网络各个阶段的开始结束时间,上行和下行流量及对应的URL

注意事项

  1. 如果要开启网络,需要app发起网络前开启网络配置项,方能捕获到全量数据,否则网络捕获功能可能会缺失数据或者失效

  2. 和其他三方网络库一起的时候,可能会产生冲突,导致网络模块失效

  3. 请查看enableNetworkForProtocol函数的说明,根据需求调用。

示例

配置类默认都开启,如果用户需要关闭部分功能,请在初始化appkey之前配置好

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        //在初始化appkey前调用,防止iOS13及以下同时使用NSURLProtocol和U-APM网络模块冲突。(未使用NSURLProtocol或者先初始化NSURLProtocol,可不调用此函数)
        //[UMCrashConfigure enableNetworkForProtocol:NO];
        UMAPMConfig* config = [UMAPMConfig defaultConfig];
        config.crashAndBlockMonitorEnable = YES;
        config.launchMonitorEnable = YES;
        config.memMonitorEnable = NO;
        config.oomMonitorEnable = NO;
        config.networkEnable = YES;
        [UMCrashConfigure setAPMConfig:config];//必须配置,请注意
        [UMConfigure initWithAppkey:@"5fd9c8e6498d9e0d4d916130" channel:@"App Store"];

}

更多网络信息采集

重要

从1.9.10版本开始,网络分析功能具备了网络请求Header和Body采集能力。Body采集需满足以下条件:

  • RequestBody

    • Content-Type为application/json、application/x-www-form-urlencoded其中之一

    • ResponseBody的长度需小于 10K

  • ResponseBody

    • Content-Type为application/json、application/x-www-form-urlencoded、text/plain 其中之一

    • ResponseBody的长度需小于 10K

若创建task时使用了completionHandler用于处理Response,由于iOS系统的特殊设定,会导致sdk无法采集到ResponseBody,需要在获取到Response后通过如下方法传递ResponseBody给sdk用于记录。

/**
 *  设置网络分析Response,用于补齐网络分析中的Response
 * */
+ (void)setResponse:(NSString *_Nonnull)responseStr forTaskDesc:(NSString *_Nonnull)taskDesc;

示例:

NSMutableDictionary* resultDic = [[NSMutableDictionary alloc] init];

[resultDic setValue:@"test" forKey:@"test"];

NSError *error;
NSData *jsonData;
@try {
    jsonData = [NSJSONSerialization dataWithJSONObject:resultDic options:0 error:&error];
} @catch (NSException *exception) {
    
} @finally {
    
}

NSData* data = jsonData;
NSString* url = @"https://xxxxx/callDemoRequest";
NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]];
request.HTTPMethod = @"POST";
request.HTTPBody = data;
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

 __block NSURLSessionUploadTask* uploadTask = [[NSURLSession sharedSession]  uploadTaskWithRequest:request fromData:data completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    if (data) {
        NSString* str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"str:%@",str);
        [UMCrashConfigure setResponse:str forTaskDesc: uploadTask.description];
    }
    else if (error){
        NSLog(@"error:%@",error);
    }
}];

[uploadTask resume];

日志检查是否生效

一旦网络模块生效后,会在xcode中打印如下日志就代表成功:UMAPM_NetworkSampling打印出YES后,就表示网络模块开启并采样生效

2021-09-13 14:24:24.962273+0800 UMAPMDemo[386:36277] UMAPM_NetworkEnable(1:1):1
2021-09-13 14:24:24.977290+0800 UMAPMDemo[386:36277] UMAPM_NetworkSampling(1,1):YES

一旦看到开启成功的日志,就可以发送一条网络请求来测试是否后端能否收到,网络示例代码如下: 发送成功够,即可在后端界面上看到对应的url的网络请求

//因Get请求有缓存,响应的内容会直接在本地获取直接返回
    #define NetworkURL         @"https://www.baidu.com/"
    NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:NetworkURL]];
    request.HTTPMethod = @"GET";
    [request addValue:@"application/html" forHTTPHeaderField:@"Content-Type"];
    
    NSURLSessionDataTask* dataTask = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        if (data) {
            NSString* str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"str:%@",str);
        }
        else if (error){
            NSLog(@"error:%@",error);
        }
    }];
    [dataTask resume];

集成NSURLProtocol和U-APM的网络模块注意事项

增加网络分析模块在iOS13及以下系统的单独开关,以避免在同时集成NSURLProtocol和U-APM的网络模块的本身冲突引起崩溃,特增加enableNetworkForProtocol函数。

/**
 *  @brief 设置APM的网络模块针对iOS13及以下系统的单独开关,以避免在同时集成NSURLProtocol和APM的网络模块的本身冲突引起崩溃。
 *  如果需要调用,在初始化UAPM网络模块前调用。
 *
 *  @param enable 指定开关。YES:(捕获iOS13及以下特定网络请求,默认开启)。NO:不捕获iOS13及以下特定网络请求。
 *
 *  @note 问题原因:同时集成NSURLProtocol和APM的网络模块的场景,先初始化APM的网络模块,再初始化NSURLProtocol的registerClass,会导致崩溃在iOS13及以下版本会崩溃,目前可以确定为iOS系统API引起的问题,iOS14无此问题。(先初始化NSURLProtocol的registerClass,再初始化APM的网络模块,是不会出现问题的)
 *  兼容iOS13及以下的初始化代码如下:
 *  @example:
 *  //确保NSURLProtocol的初始化在UMAPM的上面
 *  [NSURLProtocol registerClass:[UMURLProtocol class]];
 *  UMAPMConfig* config = [UMAPMConfig defaultConfig];
 *  config.networkEnable = YES;
 *  [UMCrashConfigure setAPMConfig:config];
 *  [UMConfigure initWithAppkey:UMAPPKEY channel:@"App Store"];
 *
 *  @note
 *  此开关默认打开,在同时集成NSURLProtocol和APM的网络模块的场景时候,根据需要调用,如果按照上述初始化顺序,不需要调用。
 *  
 *  @note 此函数关闭生效后,不会完全关闭网络模块,只是针对特定网络请求不再捕获,如果开发者能知道同时集成NSURLProtocol和APM的网络模块的场景的时候,最好通过调整初始化顺利来兼容所有场景,并在iOS13及以下版本测试兼容性。
 *  @note:其他场景下,不需要调用此函数。
 */
+(void)enableNetworkForProtocol:(BOOL)enable;

日志回捞

功能介绍和使用详见文档:日志回捞

模块开关

通过如下接口设置回捞标识:

UMAPMConfig* config = [UMAPMConfig defaultConfig];
...
config.logCollectEnable = YES; // 是否开启日志回捞功能
config.logCollectUserId = @"user_id"; // 设置识别ID
[UMCrashConfigure setAPMConfig:config];
重要
  1. 该设置必须在初始化SDK之前完成,运行时不可再次设置

  2. 回捞标识不能为空,且长度不能超过128

日志打点接口

日志打点接口一共提供了5个不同类型的日志等级,代表日志严重程度的五个等级,可以在平台查看日志时进行筛选。

@interface UAPMLog : NSObject

+ (void)verbose:(NSString *)tag msg:(NSString *)msg;

+ (void)debug:(NSString *)tag msg:(NSString *)msg;

+ (void)info:(NSString *)tag msg:(NSString *)msg;

+ (void)warn:(NSString *)tag msg:(NSString *)msg;

+ (void)error:(NSString *)tag msg:(NSString *)msg;

@end
说明
  1. 共提供五种日志等级,包括:v/d/i/w/e

  2. 参数tag不能为空或长度超过64,参数msg不能为空或长度超过1024

用户细查

如您使用用户细查功能,需要接入U-App并完成账号统计接口的接入,即可在稳定性中按照账号id方式查询发生崩溃的账号错误详情。接入文档

自定义版本号

警告

使用该功能,请务必U-APM SDK 在1.4.2及以上,且务必搭配Common SDK 版本7.3.5及以上

自UMAPM.framework(含1.3.1)开始支持子版本功能,方便用户自定义子版本号功能。

API

说明

需要在初始化appkey之前调用

/**
 *  设置自定义版本号和build版本号即子版本号 (需要在初始化appkey方法之前调用)
 */
+ (void)setAppVersion:( NSString * __nonnull )appVersion buildVersion:(NSString* __nullable)buildVersion;

参数

类型

备注

appVersion

NSString

主版本号,不能大于128个字符

buildVersion

NSString

子版本号,不能大于128个字符

示例

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 [UMCrashConfigure setAppVersion:@"2.0" buildVersion:@"3"];
 [UMConfigure initWithAppkey:@"5fb6009173749c24fd9cb357" channel:@"App Store"];
}

集成测试

具体测试操作请点击查看

注意事项

  • 统计SDK 7.2.0及以上版本(含7.2.0)已经关闭了老版本的错误统计(OC层异常捕获)功能,如果您想继续使用错误统计(OC)功能,请集成并使用UMAPM.framework稳定性组件,该组件提供更全面、更强大的异常捕获功能。

  • 原错误统计的开关接口【+ (void)setCrashReportEnabled:(BOOL)value;】方法去除

  • 原错误回调接口【+ (void)setCrashCBBlock:(CallbackBlock _Nullable )cbBlock;】 方法移至UMAPM.framework中的UMCrashConfigure中

  • 如果想测试稳定性是否集成成功,可以下载demo验证,具体可以看文档:https://developer.umeng.com/docs/119267/detail/176778

  • 错误统计功能用于收集app使用过程中产生的Crash信息,目前稳定性收集到的错误会向下传递,不会影响其他SDK收集或自己收集崩溃信息。Crash Log查看

  • U-APM iOS SDK版本 1.2.1及以上支持开启bitcode

历史文档

从SDK版本7.2.0以上已经关闭了老版本的错误统计(OC层异常捕获),新版错误统计(稳定性)支持采集OC层、Swift层和Cpp层的异常捕获,提供用户崩溃时的行为分析功能。

崩溃采集

如果您使用的是7.2.0-7.2.4版本SDK,同时集成使用了UMCrash.framework插件,则默认开启新版本的稳定性功能如果您使用的是7.2.5版本及以上SDK,应删除UMCrash.framework插件,改用UMAPM.framework插件,则默认开启新版本的稳定性功能

说明

请务必在工程中引入 UMAPM.framework 增加系统库 libc++.tbd Targets->BuildSettings 中 , Other Linker Flags增加-ObjC,⼀定要添加此项,注意是⼤写C,不是⼩写c

CoreTelephony.framework  获取运营商标识
libz.tbd  数据压缩
libsqlite.tbd  数据缓存
libc++.tbd  异常捕获
SystemConfiguration.framework  判断网络状态

常见问题

如何设置符号

[为什么会出现捕获不到/其他三方SDK捕获比UAPM多/接入UAPM后其他三方捕获变少?]

加入开发者钉钉交流群

如您正在接入U-APM SDK 恰好有问题需要我们支持,或想和其他开发者交流 崩溃问题的优化与解决 都可以加入到该钉钉群.

点击获取入群二维码