集成友盟分析和推送的一些坑
最近公司的项目用到了友盟的统计和推送,在集成的过程中遇到了一点小坑,这里记录一下方便以后查阅。
集成统计
获得 Appkey
在集成友盟的统计 SDK 之前肯定要先注册帐号,添加新应用并获取 Appkey。
导入 SDK
官网提供了两种导入方式:
- 下载集成
- 使用 Gradle 集成
在这里建议使用 Android Studio 并且使用 Gradle 集成,非常简单方便,只需要添加如下依赖即可:
1 | dependencies { |
latest.integration
代表友盟统计的最新版本,笔者使用时最新版本为6.0.0
配置项目
接下来修改AndroidManifest.xml
文件添加权限,填写 Appkey 以及填写渠道 id :
1 | <manifest……> |
以上需要把
UMENG_APPKEY
替换成自己的应用的 Appkey,UMENG_CHANNEL
替换成对应渠道的渠道号。多渠道打包可以参考美团的多渠道打包方案。
统计页面访问
我司的应用界面全部由 Fragment 呈现,Activity 只用作管理 Fragment。
按照文档首先在 Application 类中调用MobclickAgent.openActivityDurationTrack(false)
禁止默认的页面统计方式,这样将不会再自动统计Activity。
然后封装一下 BaseActivity 以统计时长:
1 | class BaseActivity extends AppCompatActivity { |
封装 BaseFragment 以统计具体页面:
1 | class BaseFragment extends Fragment { |
帐号统计
暂时还未使用,之后补充。
混淆配置
按官方文档配置混淆,以免混淆之后的错误
1 | -keepclassmembers class * { |
使用集成测试
首先在 Application 中打开测试模式:
1 | MobclickAgent.setDebugMode(BuildConfig.DEBUG); |
然后添加测试设备
这样所有测试数据不会进入应用正式的统计后台,只能在 管理–集成测试–实时日志 里查看,测试数据的数据就不会污染生产环境数据了。
推送服务
创建应用
首先需要创建应用,获取应用对应的 AppKey 和 Umeng Message Secret。
因为之前使用了友盟统计,我们需要从已有应用中添加以保证 AppKey 的唯一。
导入 PushSDK
把下载的 zip 文件解压缩(解压后的文件路径不能有中文)
把解压缩后得到的目录下的 PushSDK 当做 Module 导入到自己的工程
在之前的
AndroidManifest.xml
的基础上添加1
2
3<meta-data
android:name="UMENG_MESSAGE_SECRET"
android:value="xxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>编辑
build.gradle
添加模块1
2
3
4dependencies {
// ...
compile project(':PushSDK')
}
权限配置
若主工程的targetSdkVersion
为 23 及以上,需要运行时申请存储权限(WRITE_EXTERNAL_STORAGE
),否则在 Android 6.0 及以上机型可能出现无法选举宿主的情况。
注册服务
在工程的 Application 类的onCreate()
方法中注册推送服务,无论推送是否开启都需要调用此方法:
1 | PushAgent mPushAgent = PushAgent.getInstance(this); |
在 BaseActivity 的onCreate
方法中添加如下代码启动推送统计:
1 | PushAgent.getInstance(context).onAppStart(); |
混淆配置
按照文档配置混淆
1 | -dontwarn com.taobao.** |
集成推送中的一些坑
UnsatisfiedLinkError
按照如上设置之后运行项目发现会如下报错
1 | java.lang.UnsatisfiedLinkError: dlopen failed: "/data/data/应用包名/files/libtnet-3.1.7bk1.so" is 32-bit instead of 64-bit |
需要在项目根目录的build.gradle
中如下设置解决:
1 | defaultConfig { |
使用 BuildTypes 修改包名的错误
因为友盟使用 ApplicationId 作为包名利用反射获取资源文件,而当 BuildTypes 中的 ApplicationId 改变了导致应用包名和 Java 包名不一致的时候就会导致错误。此时需要在注册推送服务之前重新设置包名:
1 | PushAgent mPushAgent = PushAgent.getInstance(this); |
总结
以上就是实际项目中集成友盟统计和推送的方法了,查阅资料解决了一些官方文档没有提及的东西,希望可以给后来者一个参考。