问答集锦第二期|U-APM FAQ 合集【1】
官方小二*更新于2021-12-3*
🙋大家好,最近频现了很多关于U-APM的相关提问,这里特别为大家集合成FAQ合集,供开发者们参考。
未来我们会一如既往地推出友盟+产品相关的FAQ,希望可以帮助到大家解决实操问题。
第一期问答内容请戳👉:【问答集锦第一期|U-Share分享到微信平台的20个常见问答】
集成中遇到问题
问:无数据如何排查?
答:
一. Android无数据
1、确认崩溃是否在U-APM的识别范围内
目前Android的稳定性功能可以识别Java崩溃、Native崩溃、ANR、自定义错误、卡顿(U-APM SDK1.2.0及以上)。您需要判断自己的崩溃是否属于异常,具体含义如下:
崩溃:用户在使用App过程中发生一次闪退,计为一次崩溃。
ANR:用户在使用App过程中出现弹框,提示应用无响应,计为一次ANR,ANR仅用于Android平台应用。
卡顿:主线程2秒无响应定为一次卡顿,Android 有5%抽样率。
2、稳定性测试Demo
为了让您更好的测试这部分SDK集成是否成功,友盟为您提供了测试demo,您可以根据demo中的样例进行测试,该demo提供了崩溃、ANR和自定义异常的三种错误类型的触发。该demo如果测试成功,可以证明您的集成是没有问题的,只要是属于稳定性功能可识别的崩溃都会监测到。
3、是否使用其他捕获crash SDK
我们强烈建议您仅使用一款错误及性能捕获SDK(U-APM),多款错误捕获SDK可能存在彼此拦截干扰及对您终端用户性能影响。
如果您因为特殊需要集成多个SDK,iOS:请最后初始化友盟+的 iOS U-APM SDK。Android:请最后初始化友盟+的 Android U-APM SDK。
如果您使用我们的SDK捕获native崩溃后,其他捕获工具无法捕获到native 崩溃,可以使用如下方法在初始化SDK后进行设置,则其他SDK可以捕获到native 崩溃。
final Bundle customInfo = newBundle();
customInfo.putBoolean("mCallNativeDefaultHandler",true);
CrashApi.getInstance().updateCustomInfo(customInfo);4、卡顿、启动分析、网络分析无数据
卡顿分析无数据: 需要接入U-APM SDK 版本号在1.2.0级以上 且 Android卡顿是有5%采样率的,可能您的设备没有触发被采样,所以没有上报数据,后续将上线集成测试功能,避免测试环节问题。
启动分析无数据: APM 1.3.0 及以上版本号且需要按照集成文档配置。
内存分析无数据: 需要接入APM 1.4.0 及以上版本号 接入后需要额外集成操作。
网路分析无数据: APM 1.5.0 及以上版本号且需要按照集成文档配置, 且 Android网络分析是有5%采样率的,可能您的设备没有触发被采样,所以没有上报数据,后续将上线集成测试功能,避免测试环节问题。
二. iOS无数据
1、确认崩溃是否在U-APM的识别范围内
目前U-App iOS SDK的稳定性分析功能可以监测到的崩溃有Objective-C的崩溃、Swift层崩溃和Cpp层崩溃、卡顿(U-APM SDK1.2.0及以上)您需要判断自己的崩溃是否属于这些异常,具体含义如下:
崩溃:用户在使用App过程中发生一次闪退,计为一次崩溃。
卡顿:连续3次主线程2秒无响应记为一次卡顿,无抽样率。
2、稳定性测试DEMO
为了让您更好的测试这部分SDK集成是否成功,友盟为您提供了测试demo,您可以按照以下步骤进行测试。该demo如果测试成功,可以证明您的集成是没有问题的,只要是属于稳定性功能可识别的崩溃都会监测到的。
iOS集成测试方式
请下载demo,查看Crash Log时,需要断开Xcode调试。然后打开控制台,看iPhone日志,当App产生crash后再启动会发送。在Log中会有Crash Log Start 和Crash Log End中间就是上次产生的crash。

注意:测试时,如未断开Xcode调试模式,crash数据无法上报,请务必断开Xcode链接。
3、是否使用其他捕获crash SDK
是否有集成其他第三方错误统计SDK,或自己获取错误信息的方法并向下传递crash信息。如没有向下传递,则无法统计到错误信息。
4、卡顿、启动分析、网络分析、内存分析无数据
卡顿分析无数据: 需要接入U-APM SDK 版本号在1.2.0级以上,接入后无需额外集成操作。
启动分析无数据: 需要接入APM 1.3.0 及以上版本号且需要按照集成文档配置。
内存分析无数据: 需要接入APM 1.4.0 及以上版本号 接入后需要额外集成操作。
网路分析无数据: 需要接入APM 1.5.0 及以上版本号且需要按照集成文档配置,且 iOS网络分析是有5%采样率的,可能您的设备没有触发被采样,所以没有上报数据,后续将上线集成测试功能,避免测试环节问题。
问:如遇到符号表已上传成功,但在错误详情-错误日志中并没有完全解析,是为什么?
答:遇到此类问题,请先自行进行如下排查:
检查上传的符号表的uuid和该错误的uuid是否一致。操作方式:找到该错误的错误详情,找到该条日志的UUID,并与符号表管理-该版本的UUID进行对比当前应用-设置-符号表管理,选择该错误对应的版本号,查看UUID详情 查看日志中的UUID是否包含在该版本UUID中,如果不包含,则不会解析,需要重新上传包含该UUID的符号表。
a.文本格式

b.原始格式:iOS在binary images后的第一行里
符号表管理中的UUID比日志中UUID结尾多0是正常情况,前面的都可匹配就可以。

如果是iOS应用,在Appstore上架时如勾选了bitcode,则需要U-APM SDK版本V1.2.1及以上低版本SDK不支持
安卓自定义异常不进行还原
如您遇到问题,请先检查上述原因,如上述检查后仍有问题,可与在线客服联系,与我们反馈。
后台功能使用
问:如何定义卡顿/网络分析?采样率规则是怎么样的?
答:
卡顿分析模块对卡顿的定义为:SDK监控到主线程消息执行超时的次数,Android:2秒无响应定义为卡顿,iOS:连续3个2秒无响应定义为卡顿。
采样率:卡顿模块的采样率如下,请您在查看数据的时候考虑采样率带来的影响:Android:5%(如何理解5% 往下看 采样率规则说明),iOS:100%。
网络分析:Android:目前网络监控仅支持监控OkHttp网络请求;iOS:目前网络模块支持iOS系统的URL Loading System,支持iOS8及以上操作系统目前支持NSURLSession大部分通用API网络捕获(http或https)
目前并不支持iOS低版本的NSURLConnection相关API。目前不支持Socket捕获
采样率:请您在查看数据的时候考虑采样率带来的影响:Android:5% (如何理解5% 往下看 采样率规则说明);iOS:5%
采样率规则说明:我们说的采样率5% 是指,在启动SDK时会从服务端下发一个随机整数, 随机数范围在1-100期间;
如果随机数命中1-5 ,则在Android卡顿采集中, 如果上报上的信息中有卡顿,则会展示在卡顿分析中;
如果随机数命中1-5,则在Android & iOS 网络分析采集中,会上报相关的网络信息;此设备本次如果启动命中了采样率,则所有采集到的卡顿、网络日志会全部上报。
关于集成测试功能
问:集成测试无法扫码设备怎么办?
答:目前集成测试无法支持无摄像头设备,正在努力适配中,您可以通过以下方式使用集成测试。使用手机扫码后,获取手机端浏览器页面的url,将该url输入无摄像头设备的浏览器中,点击“开始测试”唤起app,进行后续集成测试。
问:如何集成测试扫码?
答:新版集成测试需要您集成U-APM SDK Android/iOS V1.5.2及以上版本;集成SDK后,需要您配置URL Schemes,将“um.您的appkey”设为您app唤起码;如果以上条件都已经具备,还是无法唤起,检查及是否是浏览器的问题,请使用原生相机或者原生“扫一扫”功能扫码。或者将该页面的url复制到Google浏览器App内,点击查看是否可以唤起打开。
您扫描的二维码中,包含了“app唤起码和测试日志标记”,在唤起您的app时,将测试日志的标记置入您的app中,之后的友盟+日志就会带有该测试标记。集成测试的实时日志显示就是根据该测试标记进行查询的,所以请您务必集成最新版SDK,以及正确的配置唤起码。
问:集成SDK后需要测试数据上报是否正常,具体该如何操作?
答:具体有以下几个步骤:SDK集成、发送数据、Demo使用方式、SDK上报策略。详情请参考友盟+官网-U-APM-常见问题文档。
问:集成测试如何配置URL Scheme?
答:
1. Android应用
新版集成测试需要在manifest.xml文件中配置,您需要在其中找到响应android.intent.action.MAIN的activity(也就是应用可以被外部唤起的第一个Activity),加上如下代码,让应用能被指定连接scheme唤起。
//1.唤起码默认为“um.该app对应的appkey”,不可改变
//2.请使用单独intent-filter,和其他intent-filter并列,不要将上述代码填入其他intent-filter里;
<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="um.该app对应的appkey" />
</intent-filter>
</activity> 2. 相机、系统自带“扫一扫”、系统自带浏览器扫码唤起App,日志即可进入测试环境实时显示。
2. iOS应用
新版集成测试需要配置App的URL Scheme,URL Scheme 位于项目设置 target -> 选项卡 Info - > URL Types,填入的URL Schemes:um.该app的appkey。
在AppDelegate中调用函数[UMAPMConfig handleUrl:] 来接收 URL
/iOS9以上使用以下方法
- (BOOL)application:(UIApplication *)application openURL:(nonnull NSURL *)url options:(nonnull NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
if ([UMAPMConfig handleUrl:url] ) {
return YES;
}
//其它第三方处理
return YES;
}
//iOS9及以下使用以下方法
- (BOOL)application:(UIApplication *)application openURL:(nonnull NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(nonnull id)annotation
{
if ([UMAPMConfig handleUrl:url] ) {
return YES;
}
//其它第三方处理
return YES;
} 3. 相机、系统自带“扫一扫”、系统自带浏览器或Chome浏览器扫码唤起App,日志即可进入测试环境实时显示。
⭐️敬请期待下一期U-APM的FAQ问答干货续集,我们会继续为大家整理及发布解决开发者们实际问题的问答内容~