API 说明

最近更新时间:2025-09-02 11:50:02

我的收藏
本文详细介绍终端性能监控 Pro SDK 的各功能接口,帮助您更加灵活、深度地使用 SDK。

初始化接口

SDK 在初始化时,BuglyConfig 除了设置 appId 和 appKey 以外,还可以设置一系列用户参数。
/// 设置自定义版本号
@property (nonatomic, copy) NSString *appVersion;
/// 设置自定义设备唯一标识
@property (nonatomic, copy) NSString *deviceIdentifier;
/// 自定义用户id
@property (nonatomic, copy) NSString *userIdentifier;
/// build config,用于拉取不同的配置
@property (nonatomic, assign) BuglyBuildConfig buildConfig;

/// Bugly Delegate
@property (nonatomic, assign) id<BuglyDelegate> delegate;


回调接口

设置 Crash 附件信息回调

SDK 处理 Crash 异常时可以回调业务,业务可以在回调中加入自定义的逻辑,或提供额外信息跟随异常一起上报。
/// 允许业务带附件到个例上报中
/// @param eventType 个例事件类型
/// @param customData 业务自定义字段
/// @param eventInfo 个例信息,暂为空
- (NSDictionary<NSString *, NSString *> *)attachmentForEvent:(NSString *)eventType
customData:(BuglyCustomData *)customData
eventInfo:(NSDictionary *)eventInfo;

#### 2. 回调 Crash 信息供设置信息

Bugly上报Crash异常时可以回调业务,业务可以在回调中加入自定义的逻辑。

``` objective-c
/**
* 发生异常时回调
* @param exception 异常信息
* @return 返回需上报记录,随异常上报一起上报
*/
- (NSString * __nullable)attachmentForException:(NSException * __nullable)exception;

设置日志回调接口

1. 实现一个函数回调方法。
/// 自定义 log 函数
static void logger_func(RMLoggerLevel level, const char *log) {
//handle sdk log.
}
2. 并注册该方法。
// 注册 Bugly 日志输出
[Bugly registerLogCallback:logger_func];

其他接口

其他接口的调用均需在 SDK 初始化之后,初始化之前调用无效,SDK 提供其他接口功能如下。

更新设备 ID

/**
* 更新设备 id
* @param deviceId 设备 id
*/
+ (void)updateDeviceIdentifier:(NSString *)deviceId;

更新用户 ID

/**
* 更新userId
* @param userId 用户id
*/
+ (void)updateUserIdentifier:(NSString *)userId;

获取 SDK 版本号

/**
* 获取 SDK 版本信息
* @return SDK版本号
*/
+ (NSString *)sdkVersion;

上报自定义异常

如业务需要上报除 OC/C++ 之外的错误,如 C#/js 等异常,可以通过自定义异常接口上报至终端性能监控 Pro,上报的数据将在 错误 页面中展示。
/**
* @brief 上报自定义错误
*
* @param category 类型(Cocoa=3,CSharp=4,JS=5,Lua=6)
* @param aName 名称
* @param aReason 错误原因
* @param aStackArray 堆栈
* @param info 附加数据
* @param terminate 上报后是否退出应用进程
*/
+ (void)reportExceptionWithCategory:(NSUInteger)category
name:(NSString *)aName
reason:(NSString *)aReason
callStack:(NSArray *)aStackArray
extraInfo:(NSDictionary *)info
terminateApp:(BOOL)terminate;

上报自定义错误

如业务希望把 NSError 信息上报到终端性能监控 Pro,可以使用上报错误的接口,上报的数据将在 错误 页面中展示。
/**
* 上报错误
*
* @param error 错误信息
*/
+ (void)reportError:(NSError *)error;

上报 OC 异常

如业务通过 try catch 方式捕获到异常,希望上报到终端性能监控 Pro,可以使用上报异常接口,上报的数据将在 错误 页面中展示。
/**
* 上报自定义Objective-C异常
*
* @param exception 异常信息
*/
+ (void)reportException:(NSException *)exception;

设置个例标签

/**
* 更新个例标签,需要在 bugly sdk 完成初始化(Bugly setup completeHandler 回调)后调用,否则可能导致数据丢失
* SDK版本: 2.7.53.3+
* @params tagArr 字符串数组,字符串限长 1024 字节,数组限长 30
*/
+ (void)updateCaseTags:(NSArray<NSString *> *)tagArr;

设置业务下钻

/**
* 更新业务下钻,需要在 bugly sdk 完成初始化(Bugly setup completeHandler 回调)后调用,否则可能导致数据丢失
* SDK版本: 2.7.53.3+
* @params tagArr 字符串数组,字符串限长 1024 字节,数组限长 30
*/
+ (void)updateTestTags:(NSArray<NSString *> *)tagArr;

自定义数据

添加自定义数据(Crash 监控)

终端性能监控 Pro 支持业务添加自定义数据,可以保存在 Crash 发生时,或发生前的一些自定义环境信息。自定义数据会随异常一起上报,并在异常个例详情界面的自定义字段中展示。自定义数据最多支持50对 key-value。
/**
* 设置关键数据,随崩溃信息上报
*
* @param value KEY
* @param key VALUE
*/
+ (void)setUserValue:(NSString *)value forKey:(NSString *)key;
获取已设置自定义数据,可通过如下接口进行操作。
/**
* 获取自定义数据
*
* @return 关键数据
*/
+ (NSDictionary * _Nullable)allUserValues;

设置/更新自定义文件上传路径(Crash 监控)

终端性能监控 Pro 支持业务上传自定义大文件,并关联至异常个例。自定义文件的上传采用独立于异常上报的通道,对异常处理流程无干扰,且支持配置多个文件。业务可以在发生异常之前的任意时间段,通过如下接口设置/更新文件路径的数组。进程发生异常重启后,会上报这些自定义文件,将上报至异常个例的附件中,展示为 custom_log.zip。
/**
* 设置自定义附件的绝对路径的集合。
* 文件压缩后的大小不大于10M,二次启动时上报。
*/
+ (void)setAdditionalAttachmentPaths:(NSArray<NSString *>*)pathArray;
注意:
该接口最多设置10个文件路径。
需上传文件压缩后的大小限制为10MB,若超过该大小,则不会被上传。
该接口可被多次调用,更新的文件路径会覆盖之前的值。
自定义文件的上传时机在进程二次启动时,与异常上报间存在一定延迟。
频繁发生崩溃异常会触发文件清理逻辑,可能会导致文件漏传。
可以通过配置设置自定义文件上传的采样率,配置方式可以参见 SDK 配置
在崩溃发生时调用此接口无法生效,因此需要业务提前设置路径。

进入/退出自定义场景(性能监控)

在性能监控中,业务可以自定义场景,并根据场景来执行特定的监控或回调操作。使用如下接口来进入、重置自定义场景。
设定自定义场景
/// 更新场景信息
/// @param key 场景 id,卡顿、内存、资源监控等功能会根据该值进行聚类
+ (void)setScene:(NSString *)key;
重置自定义场景
/// 结束自定义场景信息,继续使用 RMonitor 自动获取的场景信息
+ (void)resetScene;

添加/移除自定义数据采集器(性能监控)

终端性能监控 Pro 性能监控模块的自定义设置方式不同于 Crash 监控模块,性能监控模块的自定义数据支持两类:自定义维度和自定义字段。
自定义维度:指由 SDK 指定了三组 Key(详细见BuglyCustomData.h),每组10个。应用可以根据需要,选择合适的 Key 上报数据。在控制管理台,用户可以给这些 Key 设置别名,方便查看和分析。对于自定义维度,服务器存储时是每个字段分开存储的。后续可以提供丰富的查询和分析能力。当前支持全局设置,或者数据上报前的回调设置。
自定义字段:指 Key 和 Value 都由应用自由设置,SDK 不理解字段的类型,统一作为字符串存储。用户可以在控制管理台,在问题列表和问题详情,通过自定义字段查询包含指定内容的上报。
说明:
全局设置指应用可以随时调用全局设置接口,设置自定义维度,相同key的数据,重复设置表示更新。性能上报在需要上报时,会获取全局缓存的自定义维度数据。
可以通过如下接口来获取默认的全局自定义维度收集回调,并设置全局自定义维度。
/**
* 添加自定义上报的 tag, SDK 初始化前调用无效
* @param data 需要更新的自定义字段
*/
+ (void)updateCustomData:(BuglyCustomData *)data;

/**
* 获取当前自定标签的副本信息,若未设置,返回空
* @return 已设置的用户自定义字段
*/
+ (nullable BuglyCustomData *)currentCustomData;

/**
* 添加自定义数据为特定的事件上报
* @param data 需要更新的自定义字段
* @param eventType 对应的事件类型
*/
+ (void)updateCustomData:(BuglyCustomData *)data forEvent:(BuglyEventTypeName)eventType;

/**
* 获取特定事件的当前自定义数据
* @param eventType 需要获取的事件类型
* @return 对应已设置的自定义字段
*/
+ (nullable BuglyCustomData *)currentCustomDataForEvent:(BuglyEventTypeName)eventType;

/**
* 使用新的自定义字段更新此自定义数据
* @param dict 符合 BuglyCustomData 存储格式的字典信息
* @return 返回在次数据基础上更新后的新数据
*/
- (BuglyCustomData *)customDataByUpdateDict:(NSDictionary *)dict;

/**
* 获取设置的数字类型的自定义数据
* @param key 如果 KEY 不在 NumberParamKey 定义中,直接返回0.0
* @return 如果有设置,则返回当前值,如果没有设置,返回0.0
*/
- (nullable NSNumber *)getNumberParam:(BuglyCustomNumberDataKey)key;

/**
* 设置数字类型的自定义数据
* @param key 如果 KEY 不在 NumberParamKey 定义中,则添加失败
* @param param NUMBER VALUE
*/
- (BOOL)putNumberParam:(nullable NSNumber *)param forKey:(BuglyCustomNumberDataKey)key;

/**
* 获取设置的字符串类型的自定义数据
* @param key 如果 KEY 不在 StringParamKey 定义中,直接返回""
* @return 如果有设置,则返回当前值,如果没有设置,返回""
*/
- (nullable NSString *)getStringParam:(BuglyCustomStringDataKey)key;

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

/**
* 获取字符串数组类型的自定义数据
* @param key 如果 KEY 不在 StringArrayParamKey 定义中,则直接返回空列表
* @return 如果有设置,则返回相关设置数据,如果没有设置,则直接返回空列表, 返回的 List 不可以修改。
*/
- (nullable NSArray<NSString *> *)getStringArrayParam:(BuglyCustomArrayDataKey)key;

/**
* 添加顺序是:A1 -> A2 -> A2 -> A3 -> A4, 这个接口产生的结果类似:[A1, A2, A3, A4]
* 为字符串数组类型的自定义数据,增加VALUE
* @param key 如果 KEY 不在 StringArrayParamKey 定义中,则添加失败
* @param param 非空值,非空串,如果 value 不存在,则添加,如果存在,则直接返回,长度不能超过 BUGLY_CUSTOM_DATA_MAX_STRING_VALUE_LENGTH
*/
- (BOOL)addStringToStringArrayParam:(NSString *)param forKey:(BuglyCustomArrayDataKey)key;

/**
* 从字符串数组类型的自定义数据中,移除 VALUE
* @param key 如果 KEY 不在 StringArrayParamKey 定义中,则移除失败
* @param param 如果 value 存在,则移除,如果不存在,则直接返回
*/
- (BOOL)removeStringFromStringArrayParam:(NSString *)param forKey:(BuglyCustomArrayDataKey)key;

/**
* 添加顺序是:A1 -> A2 -> A2 -> A3 -> A4, 这个接口产生的结果类似:[A1, A2, A2, A3, A4]
* 为字符串数组类型的自定义数据,增加VALUE
* @param key 如果 KEY 不在 StringArrayParamKey 定义中,则添加失败
* @param param 长度不能超过 BUGLY_CUSTOM_DATA_MAX_STRING_VALUE_LENGTH, 无论是否存在,都会添加,即可以存在重复的 value
* @return value 是空值,空串,或者超长,或者已经达字符串数组最大值,返回失败,否则还回成功
*/
- (BOOL)addStringToSequence:(NSString *)param forKey:(BuglyCustomArrayDataKey)key;


启动监控

定义

冷启动耗时计算规则分为 iOS 15之前的版本和 iOS 15之后的版本两种。
iOS 15以前的版本:冷启动耗时 = 第一帧 UI 上屏时间 - App 进程创建时间
iOS 15及以上版本:
苹果在 iOS 15上增加了 Prewarming 的新特性,可以预启动进程,导致从“App 进程初始化结束时间”到“main 函数执行时间”这段时间变得非常不确定。因此冷启动耗时减去中间这段不确定的时间,调整为:冷启动耗时 = 第一帧 UI 上屏时间 - main 函数执行时间 + App 进程初始化结束时间 - App 进程创建时间

API 介绍

自定义场景区间耗时统计

调用 BuglyLaunchMonitorPlugin+ (void)startSpan:(NSString *)spanName parentSpanName:(nullable NSString *)parentSpanName,记录自定义场景开始时间戳。
[BuglyLaunchMonitorPlugin startSpan:@"testSpan" parentSpanName:nil];
调用 BuglyLaunchMonitorPlugin+ (void)endSpan:(NSString *)spanName,记录自定义场景区间结束,请务必跟开启打点的spanName相同,否则记为无效数据。
[BuglyLaunchMonitorPlugin endSpan:@"testSpan"];
调用BuglyLaunchMonitorPlugin+ (void)endSpanFromLaunch:(NSString *)spanName,记录从进程创建开始统计的 span 耗时。
[BuglyLaunchMonitorPlugin endSpanFromLaunch:@"testSpan"];

设置启动 tag

调用 BuglyLaunchMonitorPlugin- (void)addTag:(NSString *)tagName ,添加一个 tag。
调用 BuglyLaunchMonitorPlugin- (void)removeTag:(NSString *)tagName ,删除一个 tag。
[BuglyLaunchMonitorPlugin addTag:@"tagTest1"];
[BuglyLaunchMonitorPlugin removeTag:@"tagTest1"];

自定义启动结束时间

因为业务特性,业务定义启动结束时间点并不仅是到 CA::Transaction::commit 结束。所以增加 - (void)endColdLaunch 接口用于业务主动调用声明冷启动已经结束,调用该接口会触发启动数据上报,后续更新tag或者span信息将不会生效。
如果接口未被调用,退后台、闪退、或者超过一定时间后(默认3分钟)也会触发启动数据上报。
[BuglyLaunchMonitorPlugin endColdLaunch];