前言:
最近公司做了一款新的APP,要求能够看到用户每天的新增量和活跃量,还有一些页面的点击量、停留时间等的监测,还有更重要的一点就是能够监测到app的异常情况。于是开始对第三方工具开始一番研究,对比之后我选择使用了友盟。废话不多说,开始介绍下我的集成过程。
这里有一个整体的流程图
正文:
第一步:集成准备
友盟的应用性能监控平台 U-APM的传送门:https://at.umtrack.com/HHDSrm
如果没有账号可以先注册一下,注册完登录后,直接点击进入后台
进入后台后,点击立即创建,填写上应用的相关信息,点击注册应用即可
这里的AppKey很重要哦,集成的时候要用到的,然后点击继续集成,下面就可以愉快的集成了。
第二步:开始集成,集成分自动集成和手动集成两种模式
还是先来看下整个集成的流程图
自动集成(推荐)
通过在Android Studio工程build.gradle配置脚本中添加maven线上依赖,导入最新版本组件化统计SDK。
maven依赖配置
在工程build.gradle配置脚本中buildscript和allprojects段中添加【友盟+】SDK新maven仓库地址。
maven { url 'https://repo1.maven.org/maven2/' }
在工程App 对应build.gradle配置脚本dependencies段中添加统计SDK库和其它库依赖:
dependencies {
implementation fileTree(include:['*.jar'], dir:'libs')
// 下面各SDK根据宿主App是否使用相关业务按需引入。
// 友盟统计SDK
implementation 'com.umeng.umsdk:common:9.4.2'// 必选
implementation 'com.umeng.umsdk:asms:1.4.1'// 必选
implementation 'com.umeng.umsdk:apm:1.4.2' // 错误分析升级为独立SDK,看crash数据请一定集成,必选
implementation 'com.umeng.umsdk:abtest:1.0.0'//使用U-App中ABTest能力,可选
}
注意:在Android Studio 3.1及以上版本开发环境下,指定引用最新版本依赖写法”latest.integration”可能导致下载库超时,此时需要指定具体版本号。
清单文件中的权限配置
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
如果应用使用了代码混淆,请添加如下配置,以避免【友盟+】SDK被错误混淆导致SDK不可用
-keep class com.umeng.** {*;}
-keepclassmembers class * {
public <init> (org.json.JSONObject);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
方法调用
在Applicaiton.onCreate函数中调用预初始化函数UMConfigure.preInit(),正式初始化函数UMConfigure.init可以按需调用(可以在预初始化函数之后紧接着调用,也可以放到后台线程中延迟调用,但还是必须调用,不能遗漏),但确保App首次冷启动时,在用户阅读《隐私政策》并取得用户授权之后,才调用正式初始化函数UMConfigure.init(),如果用户不同意《隐私政策》授权,则不能调用UMConfigure.init()初始化函数。
// SDK预初始化函数不会采集设备信息,也不会向友盟后台上报数据。
// preInit预初始化函数耗时极少,不会影响App首次冷启动用户体验
public static void preInit(Context context, String appkey, String channel)
/**
* 注意: 即使您已经在AndroidManifest.xml中配置过appkey和channel值,也需要在App代码中调
* 用初始化接口(如需要使用AndroidManifest.xml中配置好的appkey和channel值,
* UMConfigure.init调用中appkey和channel参数请置为null)。
*/
UMConfigure.init(Context context, String appkey, String channel, int deviceType, String pushSecret);
代码示例
手动集成(不推荐)
手动集成没有使用,我这里就不做介绍了,有需要的小伙伴可以点开 https://developer.umeng.com/docs/119267/detail/118584#h1-u6743u9650u6388u4E883 进行学习使用。
到这里已完成了对数据统计和异常情况监测的sdk集成。
但是呢,平时生产反馈的异常问题,我们哼哧哼哧调试好半天才搞定,浪费了本该逍遥快活的大好时间。所以我们就想对app异常情况做更进一步的分析反馈。不要着急,友盟也给我们想好了,友盟给我们预留了崩溃回调方法,当崩溃发生时,可以在该回调方法中返回string类型的业务自定义数据,该数据会写入到崩溃文件中并上传到服务器展示。注意:崩溃回调中返回string类型数据的长度限制为256个字符。
接口示例
UMCrash.registerUMCrashCallback(newUMCrashCallback(){
@Override
publicString onCallback(){
return"崩溃时register的自定义内容字符串";
}
});
上传后即可在错误详情-自定义字段中查看到回调信息
我们还可以自定义异常接口,如果捕获了错误,需要手动上传到【友盟+】服务器可以调用下面两种方法:
方法一:
public static void UMCrash.generateCustomLog(Throwable e,String type)
方法一示例:
try{
// 抛出异常的代码
}catch(Exception e){
UMCrash.generateCustomLog(e,"UmengException");
}
方法二:
public static void UMCrash.generateCustomLog(String e,String type)
方法二示例:
String e ="自定义异常代码";
UMCrash.generateCustomLog(e,"UmengException");
使用自定义错误,查看时请在错误列表页面选择【自定义异常】。
好了,开始运行项目,看下友盟后台是不是有数据了,如果有用户数据那说明集成成功,可以庆祝了。
由于异常情况的数据还没有,只能给大家截个样式图了,但效果都是一样的。
整个集成过程还是比较简单的,目前友盟的功能还是比较强大的,包括应用的各种数据统计、异常日志的反馈、推送、分享等,以后会慢慢学习研究,加入到项目里,使应用的监控和功能更加丰富。
总结:
U-APM 是友盟+推出的App稳定性监控、性能监控和云真机测试平台。通过轻量级的集成接入即可拥有实时、可靠、全面的应用崩溃、ANR、自定义异常等捕获能力,及卡顿、启动分析等性能能力,支持多场景、多通道智能告警监控,帮助开发者高效还原异常、卡顿用户的访问路径和业务现场,缩短故障排查时间。这一块的功能是我比较喜欢的,建议大家不管是统计的集成,还是推送、分享的集成,都可以试试运用上U-APM的功能,你会发现不一样的使用和便捷。
对产品的建议是:产品本身还是比较成熟的,暂时没有发现什么需要改进的地方。
作者:王太达