友盟统计+渠道包_学习笔记

友盟统计+渠道包_学习笔记

资料:

  • 官网:https://developer.umeng.com/docs/66632/detail/66889#h3-u5E38u89C1u95EEu9898
  • 视频资料:善知堂高级不外传技术之友盟统计+渠道包

一、友盟统计

1、集成

  1. 获取APPKey:在编辑应用中看到:5ac59318b27b0a3b6c00030f

  2. 自动集成:

    dependencies {
       compile 'com.umeng.sdk:common:latest.integration'
       compile 'com.umeng.sdk:analytics:latest.integration'
    }

    如果无法正常集成请添加如下配置:

    allprojects {
       repositories {
               mavenCentral()     
       }
    }
  3. 权限授予:

    <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 ……>
  4. 初始化及通用接口:

    1. 初始化方法由基础组件包提供,要使用统计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);
    注意:
    参数1:上下文,必须的参数,不能为空。
    
    参数2:友盟 AppKey,非必须参数,如果Manifest文件中已配置AppKey,该参数可以传空,则使用Manifest中配置的AppKey,否则该参数必须传入。
    
    参数3:友盟 Channel,非必须参数,如果Manifest文件中已配置Channel,该参数可以传空,则使用Manifest中配置的Channel,否则该参数必须传入,Channel命名请详见Channel渠道命名规范。
    
    参数4:设备类型,必须参数,传参数为UMConfigure.DEVICE_TYPE_PHONE则表示手机;传参数为UMConfigure.DEVICE_TYPE_BOX则表示盒子;默认为手机。
    
    参数5:Push推送业务的secret,需要集成Push功能时必须传入Push的secret,否则传空。

    或者:

    <manifest>
       <application ……>
           ……
           <meta-data android:value="YOUR_APP_KEY" android:name="UMENG_APPKEY"/> 
           <meta-data android:value="Channel ID" android:name="UMENG_CHANNEL"/> 
       application>    
    manifest>
    /*
    注意:如果您已经在AndroidManifest.xml中配置过appkey和channel值,可以调用此版本初始化函数。
    */
    UMConfigure.init(Context context, int deviceType, String pushSecret);

    2.场景类型设置接口:

    public static void setScenarioType(Context context, EScenarioType etype);
参数 含义
context 当前宿主进程的ApplicationContext上下文。
etype EScenarioType.E_UM_NORMAL 普通统计场景,如果您在埋点过程中没有使用到U-Game统计接口,请使用普通统计场景。 EScenarioType.E_UM_GAME 游戏场景 ,如果您在埋点过程中需要使用到U-Game统计接口,则必须设置游戏场景,否则所有的U-Game统计接口不会生效。

示例:

java
MobclickAgent.setScenarioType(mContext, EScenarioType.E_UM_NORMAL);

3.设置secretkey

secretkey设置接口,防止AppKey被盗用,secretkey需要网站申请。申请方法见AppKey保护策略(Secret)介绍。

3、使用

  • Session启动、App使用时长等基础数据统计接口API:

    示例:

    在App中每个Activity的onResume方法中调用 MobclickAgent.onResume(context),onPause方法中调用 MobclickAgent.onPause(context)。

    @Override
    public void onResume() {
      super.onResume();
      MobclickAgent.onResume(this);
    }
    @Override
    public void onPause() {
      super.onPause();
      MobclickAgent.onPause(this);
    }
    • 注意:如果您的Activity之间有继承或者控制关系,请不要同时在父和子Activity中重复添加nPause和nResume方法,否则会造成重复统计,导致启动次数异常增高。(例如:使用TabHost、TabActivity、ActivityGroup时)。

    • 当应用在后台运行超过30秒(默认)再回到前台,将被认为是两次独立的session(启动),例如:用户回到home,或进入其他程序,经过一段时间后再返回之前的应用。即被认为是两个独立的session。

    • session间隔时长设置接口(一般情况下不用修改此值 )

    // interval: 单位是毫秒,默认Session间隔时间是30秒
    public static void setSessionContinueMillis(long interval);
    参数 含义
    interval 单位为毫秒,默认值为30000。

    示例:

    // 将默认Session间隔时长改为40秒。
    MobclickAgent.setSessionContinueMillis(1000*40);

    非常重要: 必须确保在所有页面对应Activity中调用 MobclickAgent.onResume() 和MobclickAgent.onPause()方法,才能够保证获取正确的新增用户、活跃用户、启动次数、使用时长等基本数据。

  • 下载量–用户总数:

    后台查看即可

  • 每日用户活跃数–日活数:

    后台查看即可

  • 事件统计–APP业务活动分析:

    • 统计SDK为用户提供了自定义事件的功能,用于追踪用户行为,记录行为发生的具体细节。 自定义事件目前包括”计数事件”和”计算事件”,二者的区别以及详细说明请 点击这里。

    • 自定义事件字段说明

    event id:自定义事件id。

    key:自定义事件下的参数。

    value:自定义事件参数下的参数值。

    1. 计数事件

      1.使用计数事件需要在后台添加事件时选择”计数事件”。

      2.在您希望跟踪的代码部分,调用如下方法:

      public static void onEvent(Context context, String eventID);
      public static void onEvent(Context context, String eventID, String label);
    参数 含义
    context 当前宿主进程的ApplicationContext上下文。
    eventId 为当前统计的事件ID。
    label 事件的标签属性。

    示例:

    统计微博应用中”转发”事件发生的次数,那么在转发的函数里调用

    java
    MobclickAgent.onEvent(mContext,"Forward");
    MobclickAgent.onEvent(mContext, "Select", "Channel");

    1. 统计点击行为各属性被触发的次数

      考虑事件在不同属性上的取值,可以调用如下方法:

      public static void onEvent(Context context, String eventID, Map<String, String> map);
    参数 含义
    context 当前宿主进程的ApplicationContext上下文。
    eventId 为当前统计的事件ID。
    map 为当前事件的属性和取值(Key-Value键值对)。

    示例:

    统计电商应用中”购买”事件发生的次数,以及购买的商品类型及数量,那么在购买的函数里调用:

    java
    HashMap map = new HashMap();
    map.put("type","book");map.put("quantity","3");
    MobclickAgent.onEvent(mContext, "purchase", map);

    1. 计算事件

      1.使用计算事件需要在后台添加事件时选择”计算事件”。

      • 统计数值型变量的值的分布

      2.统计一个数值类型的连续变量(该变量必须为整数),用户每次触发的数值的分布情况,如事件持续时间、每次付款金额等,可以调用如下方法:

      public static void onEventValue(Context context, String eventID, Map<String, String> map, int du);
    参数 含义
    context 当前宿主进程的ApplicationContext上下文。
    eventID 为当前统计的事件ID。
    map 为当前事件的属性和取值(Key-Value键值对)。
    du 当前事件的数值,取值范围是-2,147,483,648 到 +2,147,483,647 之间的有符号整数,即int 32类型,如果数据超出了该范围,会造成数据丢包,影响数据统计的准确性。

    示例:

    统计一次音乐播放,包括音乐类型,作者和播放时长,可以在音乐播放结束后这么调用:

    java
    int duration = 12000; //开发者需要自己计算音乐播放时长
    Map map_value = new HashMap();
    map_value.put("type" , "popular" );map_value.put("artist" , "JJLin" );
    MobclickAgent.onEventValue(this, "music" , map_value, duration);

  • 卸载量–用户流失数:

    后台查看,留存分析

  • 查bug和修复:后台错误分析

    组件化统计SDK内建JVM层错误统计。SDK通过Thread.UncaughtExceptionHandler 捕获程序崩溃日志,并在程序下次启动时发送到服务器。

    如不需要错误统计功能,可通过此方法关闭:

    // isEnable: false-关闭错误统计功能;true-打开错误统计功能(默认打开)
    public static void setCatchUncaughtExceptions(boolean isEnable)
参数 含义
isEnable 错误统计开关,false-关闭错误统计功能;true-打开错误统计功能(默认打开)。

如果开发者自己捕获了错误,需要手动上传到【友盟+】服务器可以调用下面方法:

java
public static void reportError(Context context, String error);
//或 public static void reportError(Context context, Throwable e);

参数 含义
context 当前宿主进程的ApplicationContext上下文。
error 错误内容字符串。
e 错误发生时抛出的异常对象。

示例:

java
MobclickAgent.reportError(mContext, "Parameter Error");
try {
// 抛出异常的代码
}
catch (Exception e) {
MobclickAgent.reportError(mContext, e);
}

使用自定义错误,查看时请在错误列表页面选择【自定义错误】。

特别注意:这点参考视频资料

如果使用了混淆,那么代码混淆后变量和方法名无法人为识别,很难知道是哪个方法出现了异常,所以在混淆的时候加上:

properties
-printmapping mapping.txt

3、混淆

  • 如果您的应用使用了代码混淆,请添加如下配置,以避免【友盟+】SDK被错误混淆导致SDK不可用。

    -keep class com.umeng.** {*;}
    -keepclassmembers class * {
     public  (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 *;
    }
  • 映射文件mapping

    方便异常上报的处理,如果不提交该文件,那么提交混淆后的代码异常,鬼知道源码的哪个方法出错了,该文件可以从后台上传,在混淆中加入:

    -printmapping mapping.txt

    注意:如果一时半会儿没有在output中出现mapping.txt文件,则clean项目再make

二、渠道包

  • 参考资料:

    gradle多渠道和友盟打包渠道统计:http://bbs.umeng.com/thread-9119-1-1.html

    gradle出错:https://blog.csdn.net/small_technical/article/details/72782671

  • 使用Android studio Gradle 实现友盟多渠道打包及统计

1、友盟多渠道配置:

以友盟的渠道统计为例,渠道信息一般在 AndroidManifest.xml中修改以下值:

<meta-data android:name="UMENG_CHANNEL" android:value="wandoujia" />

首先你必须在AndroidManifest.xml中的meta-data修改以下的样子:

<meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" />

其中${UMENG_CHANNEL_VALUE}中的值就是你在gradle中自定义配置的值。

build.gradle文件就利用productFlavors这样写:

flavorDimensions "default"
productFlavors {
    wandoujia {dimension "default"}
    baidu {dimension "default"}
    c360 {dimension "default"}
    uc {dimension "default"}
    myChannel{dimension "default"}
    //这里注意:渠道名称最好不要大写
    productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }
}

注意:遇到错误:Error:All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/r

​ 添加:flavorDimensions “default”,可以查看上文所推荐的资料

2、AS多渠道打包

  • 使用android studio 和 gradle 多渠道打包:(善知堂视频讲解和第一行代码,后者更清楚)

    应用生成签名:反手键module -> open module settings -> signing -> 点击加号 -> 填入相应字段。其中alias字段默认是key0

    1. 使用gradle多渠道打包:

      右侧Gradle -> module name -> Tasks -> build -> 执行assemble(channel name)

    2. 使用Android Studio多渠道打包:

      菜单 -> Build -> generate signed apk -> 选择key 和 productFlavors

    3. 建议使用第二种方式可视化,而且是已经签名过的APK,第一种虽然手动签名了,但是apk文件名却显示unsigned

  • PS:

    多渠道打包的实际意义在于渠道差异性,对于不同平台App可以展现出不同的特性,如果各个平台特性相同,那么渠道差异性基本不存在,没必要使用多渠道打包,直接一个渠道发布所有平台即可。

    渠道差异性使用和配置见第一行代码,有最基本的使用(通过覆写manifest文件等)

3、友盟多渠道打包工具:

  • 酷传下载地址:http://www.kuchuan.com/client-umeng/
  • 一站发布首页:http://www.kuchuan.com/

你可能感兴趣的:(android开发_笔记_基础)