Android进阶之路 - Umeng App三方统计(埋点必备) - 转载记录(有些公司需要配置)

仅代表当前个人使用友盟统计成功后的笔记归纳,具体集成方式与解决方法,请根据Umeng文档逐步校验 !

注:此文起始写于2018年,但于2019春节后进行88个埋点之后,发现部分地方存在可改进之处,故此再次进行优化
目录
Umeng友情帮助链接
基础配置
多渠道区分 - 统计
埋点统计(后台设置、移动端代码注册)
集成测试(测试设备(查看 、添加)、实时日志、历史日志)
错误锦集
Umeng官方渠道 :

2018年
//Umeng Android Sdk
地址 :http://mobile.umeng.com/custom_sdk

//Umeng Android Sdk 7.4.1集成过程 外部配置
地址 :http://dev.umeng.com/sdk_integate/android_sdk/android_common_guide

//Umeng Android Sdk 7.4.1集成过程 APP统计内部配置
地址 :http://dev.umeng.com/sdk_integate/android_sdk/analytics_doc

2019年
//Umeng Sdk 下载
https://developer.umeng.com/sdk?spm=a311a.9588098.0.0

//Umeng U-App>基础分析>功能使用
https://developer.umeng.com/docs/67953/detail/68131#h1-u81EAu5B9Au4E49u4E8Bu4EF62

//FAQ Umeng官方提供的集成中可能遇到的错误问题(包含解答)
https://developer.umeng.com/docs/66632/cate/66650

//集成测试 - 测试设备
https://mobile.umeng.com/platform/integration/device

基础配置

1.build (app)

/**
*友盟统计 版本号根据友盟官网当时给出版本进行设置
*/
compile 'com.umeng.sdk:common:1.4.1'
compile 'com.umeng.sdk:analytics:7.4.1'

2.Android Manifest (加入配置)

加入权限









清单文件下的application内部添加配置参数
//这里可以在清单文件配置,也可以动态的在我们自己的application代码中进行初始化

//这个官方说是兼容老版本,同时渠道统计会用到这个,不要修改内部值

我自己项目中的配置(下面有多渠道区分 - 统计)

步骤1:Android Manifests

android:name=".base.GarageApp"
android:allowBackup="true"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:supportsRtl="true"
android:theme="@style/AppTheme">

//主要是这里的代码 - 用于渠道统计
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}"/>

步骤2:build.gradle (app)

android {
productFlavors {
baidu {}
huawei {}
xiaomi {}
vivo {}
oppo {}
sanxing {}
yingyongbao {}
}

//分别进行打包
productFlavors.all { flavor ->
    flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}

}

3.Application(OnCreate 生命周期内加入Umeng初始化方法)

/**这里要注意:如果在清单文件已经配置了初始化信息,
 *这里可以少去初始化的代码,如果俩边都配置了
 *那么会优先代码中的配置!!!所以这里大家务必注意!*/

    //初始化 
    UMConfigure.init(garageApp,"自己Umeng平台的appkey","Umeng",UMConfigure.DEVICE_TYPE_PHONE,"");
    //开启Log
    UMConfigure.setLogEnabled(true);
    //打开调试模式
    MobclickAgent.setDebugMode( true );
    
    /**
    *普通统计场景类型:EScenarioType.E_UM_NORMAL 
    *游戏场景类型:EScenarioType.E_UM_GAME 
    */设置统计场景类型  
    MobclickAgent.setScenarioType(garageApp, MobclickAgent.EScenarioType.E_UM_NORMAL);
    
    //true打开 ,false为关闭 
    //禁止默认的页面统计方式  (一般不用设置,因为默认是进行统计的)
    //MobclickAgent.openActivityDurationTrack(true);
    //错误收集(默认已经配置,而且已经打开)
    //MobclickAgent.setCatchUncaughtExceptions(true);

多渠道区分 - 统计(如用户下载的市场是华为、小米、oppo之类的(渠道包与渠道统计相对应))

AndroidMainfest(清单文件)中的application内添加
//这里是方便Umeng的渠道统计,进行配置 UMENG_CHANNEL 不可改变不然无法识别
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />

build(app)中,android内添加渠道名,这里要注意的是 如果是数字开头是不行的!需要添加下划线!这是俩种方式,可以使用uc的方式添加渠道,也可以使用现在的不直接声明的模式。个人介意第一种样式!
第一种方式:

productFlavors{
uc {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "uc"]
}
_360 {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "360"]
}
baidu{
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
}
}
二种方式:

productFlavors{
default_channel{}
wandoujia{}
yingyongbao{}
xiaomi{}
huawei{}
jifeng{}
}

productFlavors.all { flavor ->
flavor.manifestPlaceholders = [ UMENG_CHANNEL_VALUE:name ]
}
埋点统计
后台设置
已有的自定义事件查看

自定义事件添加流程

Step 1:

Step 2:

Step 3:

移动端代码注册
App内事件埋点 (对应的事件下进行设置)

//eventId为已在后台注册自定义事件id
MobclickAgent.onEvent(MainActivity.this,"eventId");
对应的Activity、Fragment内添加对应需求代码

时常统计(Session时长 - 集成埋点的同时会自动统计时长)

public void onResume() {
    super.onResume();
    MobclickAgent.onResume(this);
}

public void onPause() {
    super.onPause();
    MobclickAgent.onPause(this);
}

统计跳转页面

public void onResume() {
    super.onResume();
    MobclickAgent.onPageStart("newOrderBtn");
}

public void onPause() {
    super.onPause();
    MobclickAgent.onPageEnd("newOrderBtn");
}

集成测试 (使用环境 - 自我测试,绑定自己手机查看埋点效果)
测试设备
测试设备 - 查看

测试设备 - 添加测试设备

设备识别信息获取的方法
老版本(sdk 7.4.1)

/**
* 测试
* */
public static String getDeviceInfo(Context context) {
try {
org.json.JSONObject json = new org.json.JSONObject();
android.telephony.TelephonyManager tm = (android.telephony.TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
String device_id = null;
if (checkPermission(context, Manifest.permission.READ_PHONE_STATE)) {
device_id = tm.getDeviceId();
}
String mac = null;
FileReader fstream = null;
try {
fstream = new FileReader("/sys/class/net/wlan0/address");
} catch (FileNotFoundException e) {
fstream = new FileReader("/sys/class/net/eth0/address");
}
BufferedReader in = null;
if (fstream != null) {
try {
in = new BufferedReader(fstream, 1024);
mac = in.readLine();
} catch (IOException e) {
} finally {
if (fstream != null) {
try {
fstream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
json.put("mac", mac);
if (TextUtils.isEmpty(device_id)) {
device_id = mac;
}
if (TextUtils.isEmpty(device_id)) {
device_id = android.provider.Settings.Secure.getString(context.getContentResolver(),
android.provider.Settings.Secure.ANDROID_ID);
}
json.put("device_id", device_id);
return json.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

新版本(2019年的组件化获取方式 统计sdk 7.0.0以上)

/**
*此方法我在2019/2/21使用时, 数据返回格式与数据错误;
*可通过断点获取deviceInfo[0]与deviceInfo[1] 的值进行拼接,组成设备识别信息

  • 样例 :{"device_id":"KVVVA17B24202090","mac":"1c:15:1f:74:0c:7c"}
    */

public static String[] getTestDeviceInfo(Context context){
String[] deviceInfo = new String[2];
try {
if(context != null){
deviceInfo[0] = DeviceConfig.getDeviceIdForGeneral(context);
deviceInfo[1] = DeviceConfig.getMac(context);
}
} catch (Exception e){
}
return deviceInfo;
}

实时日志、历史日志
必须非常注意!!!
只有测试设备绑定成功,才能收到日志信息
数据收集策略有俩种,一种是时间间隔控制 ;一种是app关闭重新启动; 这也意味着只有满足其中一种情况后Umeng才能收到我们统计的数据
测试设备的统计数据不算入自定义事件(防止污染数据)
当我们操作完app关闭之后,重启app,然后在Umeng后台查看实时数据内的自定义事件,如下图 (此刻Android是支持的,IOS还没有支持)

大功告成(老夫退了)

错误锦集
埋点未生效

检查后台是否注册此事件
检查代码中是否注册此事件
检查俩端自定义事件Id是否相同
Activity、Fragment是否重写onResume()、onPause()内的方法,如下 (友情建议下文代码封装到BaseActivity、BaseFragment)
activity 版本 - -~

@Override
public void onResume() {
    super.onResume();
        MobclickAgent.onResume(this);
}

@Override
public void onPause() {
    super.onPause();
        MobclickAgent.onPause(this);
}

fragment 版本 - -~

@Override
public void onResume() {
    super.onResume();
        MobclickAgent.onResume(getActivity());
}

@Override
public void onPause() {
    super.onPause();
        MobclickAgent.onPause(getActivity());
}

实时日志、历史日志(重复提出,烦请注意)

只有测试设备绑定成功,才能收到日志信息
数据收集策略有俩种,一种是时间间隔控制 ;一种是app关闭重新启动; 这也意味着只有满足其中一种情况后Umeng才能收到我们统计的数据
测试设备的统计数据不算入自定义事件(防止污染数据)
当我们操作完app关闭之后,重启app,然后在Umeng后台查看实时数据内的自定义事件,如下图 (此刻Android是支持的,IOS还没有支持)
埋点可能错误原因(由友盟客服和技术提出)

自定义事件默认退出动发送,请按照这个顺序测试 :启动应用-触发自定义事件-应用退到后台-打印log日志,观察log是否有event字段,如果自定义事件集成正确是可以看到这个字段的
发送策略问题,自定义事件数据默认退出发送
确认自定义事件参数传入合法。可参阅 事件参数FAQ
触发自定义事件后关闭应用超过30s后再重新启动应用,查看调试log中是否有ekv字段及相关事件ID。
是否在后台定义了事件ID。
自定义事件报表中“独立用户数”第二天展示前一天数据。
是否使用了集成测试,集成测试数据要在集成测试日志中查看。
网络延迟。
不要在service中使用自定义事件,这会造成活跃用户异常
打开debug模式则必须打包后才能有事件 亲 您可以按照这个顺序测试一下 :启动应用-触发自定义事件-关闭应用-40s后重新启动应用-打印log日志,观察log是否有ekv字段和相关事件ID,如果自定义事件集成无误是可以看到这个字段的。
借鉴文章 5分钟实现Android友盟统计的集成与使用
————————————————
版权声明:本文为CSDN博主「Modu_MrLiu」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_20451879/article/details/79215139

你可能感兴趣的:(Android进阶之路 - Umeng App三方统计(埋点必备) - 转载记录(有些公司需要配置))