使用 友盟的U-App(移动统计)
产品
如下图示:
看官网的 SDK 文档集成说明可知有自动集成
和手动集成
两种方式,这里就以自动集成
为例,也是官方推荐的方式
我们采用官方的推荐的自动集成方式,我接下来会在自己的应用中添加这部分的内容,然后通过实际应用来介绍必要的配置使用。
通过在Android Studio工程build.gradle配置脚本中添加maven线上依赖,导入最新版本组件化统计SDK。
在工程build.gradle配置脚本中buildscript和allprojects段中添加【友盟+】sdk 新maven仓库地址。如下:
maven { url 'https://dl.bintray.com/umsdk/release' }
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
// 友盟统计
implementation 'com.umeng.umsdk:analytics:8.0.0'
implementation 'com.umeng.umsdk:common:2.0.0'
}
注意:在Android Studio 3.1及以上版本开发环境下,指定引用最新版本依赖写法”latest.integration”可能导致下载库超时,此时需要指定具体版本号。
统计SDK需要宿主APP授予如下权限:
权限 | 用途 |
---|---|
ACCESS_NETWORK_STATE | 检测联网方式,在网络异常状态下避免数据发送,节省流量和电量。 |
READ_PHONE_STATE | 获取用户设备的IMEI,通过IMEI对用户进行唯一标识,以便提供统计分析服务。 |
ACCESS_WIFI_STATE | 获取WIFI mac地址,在平板设备或电视盒子上,无法通过IMEI标识设备,我们会将WIFI mac地址作为用户的唯一标识,以便正常提供统计分析服务。 |
INTERNET | 允许应用程序联网和发送统计数据的权限,以便提供统计分析服务。 |
ACCESS_FINE_LOCATION(可选) | 通过获取位置信息,为开发者提供反作弊功能,剔除作弊设备;同时校正用户的地域分布数据,使报表数据更加准确。 |
ACCESS_COARSE_LOCATION(可选) | 通过获取位置信息,为开发者提供反作弊功能,剔除作弊设备;同时校正用户的地域分布数据,使报表数据更加准确。 |
下面给出AndroidManifest.xml清单文件示例:
<manifest ……>
<uses-sdk android:minSdkVersion="8"></uses-sdk>
<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"/>
<application ……>
如果您的应用使用了代码混淆,请添加如下配置,以避免【友盟+】SDK被错误混淆导致SDK不可用。
-keep class com.umeng.** {*;}
-keepclassmembers class * {
public <init> (org.json.JSONObject);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
SDK需要引用导入工程的资源文件,通过了反射机制得到资源引用文件R.java,但是在开发者通过proguard等混淆/优化工具处理apk时,proguard可能会将R.java删除,如果遇到这个问题,请添加如下配置:
-keep public class [您的应用包名].R$*{
public static final int *;
}
实际,我的 App 混淆文件中添加如下:
初始化方法由基础组件包提供,要使用统计SDK,必须在宿主应用application.onCreate函数中调用基础组件包提供的初始化函数:
/**
* 注意: 即使您已经在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);
或
/**
* 注意:如果您已经在AndroidManifest.xml中配置过appkey和channel值,可以调用此版本初始化函数。
*/
UMConfigure.init(Context context, int deviceType, String pushSecret);
Channel渠道的使用规范
每台设备仅记录首次安装激活的渠道,在其他渠道再次安装不会重复计量。 所以在测试不同的渠道的时候,请使用不同的设备来分别测试不要改变’UMENG_CHANNEL’。
Channel渠道的命名规范
1.可以由英文字母、阿拉伯数字、下划线、中划线、空格、括号组成,可以含汉字以及其他明文字符,但是不建议使用中文命名,会出现乱码。
2.首尾字符不可以为空格。
3.不要使用纯数字作为渠道ID。
4.最多256个字符。
5.”unknown” 及其各种大小写形式,作为【友盟+】保留的字段,不可以作为渠道名。
在您查看数据时,渠道会作为一个数据细分的维度。
查看日志,添加代码如下:
官方有4种模式供选择,这里我选择了 AUTO 模式,如下:
Android 4.0及以上版本支持Activity生命周期的自动监控(通过注册自定义callback函数)。在Android 4.0以上设备中,推荐使用系统自动监控机制进行页面及基础指标自动埋点(AUTO模式下SDK会自动调用MobclickAgent.onResume/MobclickAgent.onPause接口,用户无须手动调用这两个接口)。
首次使用【友盟+】统计SDK的用户选用AUTO模式采集页面数据,仅需执行SDK初始化函数后调用 MobclickAgent.setPageCollectionMode(PageMode mode) 函数即可。
在AUTO或MANUAL模式下,如果需要对非Activity页面,如Fragment、自定义View等非标准页面进行统计。需要通过MobclickAgent.onPageStart/MobclickAgent.onPageEnd接口在合适的时机进行页面统计。
一次成对的 onPageStart -> onPageEnd 调用,对应一次非Activity页面(如:Fragment)生命周期统计。
// viewName 表示自定义的页面名
public static void onPageStart(String viewName);
public static void onPageEnd(String viewName);
手动统计Fragemnt页面的例子代码:
// Fragment页面onResume函数重载
public void onResume() {
super.onResume();
MobclickAgent.onPageStart("MainScreen"); //统计页面("MainScreen"为页面名称,可自定义)
}
// Fragment页面onPause函数重载
public void onPause() {
super.onPause();
MobclickAgent.onPageEnd("MainScreen");
}
至此,完成了基本的集成功能。
不过对于 activity + fragment 架构的项目,需要考虑到几种特殊的情况,才能正确的统计 fragment 页面。
解决方案请参考:当友盟统计遇上Fragment
这部分内容就不再讨论了,请参考Android 开发–多渠道打包实现
经过一段时间的使用后,友盟平台的统计数据就可以看到了,如下:
页面访问数据当天创建的应用看不到,得第二日了,这里就不给出了。
至此,我们就成功的集成了友盟的基础统计功能。
本文只是教大家简单的集成使用,后面同学们可以完善添加更多的高级统计功能。
技术永不眠,我们下期见!