友盟统计+渠道包_学习笔记_徒破壁的博客-程序员宅基地

技术标签: 友盟统计  android开发_笔记_基础  android  学习笔记  多渠道打包  

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

资料:

一、友盟统计

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<String,String> map = new HashMap<String,String>();
    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<String, String> map_value = new HashMap<String, String>();
    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 <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 *;
    }
  • 映射文件mapping

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

    -printmapping mapping.txt

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

二、渠道包

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、友盟多渠道打包工具:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_32127759/article/details/79828376

智能推荐

计算机网络实验——认识PacketTracer软件_shy-2的博客-程序员宅基地

PacketTracer介绍PacketTracer介绍安装PackerTracer认识PackerTracer简单的使用IP地址的配置保存一个做好的项目文件PacketTracer介绍Packet Tracer是Cisco公司针对CCNA认证开发的一个用来设计、配置和故障排除网络的模拟软件。Packer Tracer模拟器软件比Boson功能强大,比Dynamips操作简单,非常适合网络设备初学者使用。安装PackerTracer下载PackerTracer一步一步安装即可安装完成后进入登

WordPress 著名的5分钟快速安装法_programerwei的博客-程序员宅基地

将 WordPress 压缩包解压至一个空文件夹。 使用任一文本编辑器打开 wp-config-sample.php,填写有关数据库的内容。 保存并重命名 wp-config-sample.php 为 wp-config.php。 上传整个 WordPress 文件夹至服务器。 在浏览器中访问/wp-admin/install.php,WordPress 会自动建立数据库表。如果出现错误,请仔细检

2021-08-20 【港股】_shashai2012的博客-程序员宅基地

开盘就有下跌趋势,200没有出,一直下跌到深处183.2开局的快速下跌时,脑子里模糊有快速卖出再买入的动机,但没有形成执行力,这是当前最大的问题,形成决策机制如果是担心执行后,快速上涨,可以制定个对应策略思考力是竞争力,执行力是生存力,执行要坚决杠杆的问题,何时彻底去掉杠杆?回头来看,8-12买入1w股,238.2,是不妥当的,至少买入时要做好止损点设置的处理...

Windows7部署Android开发环境傻瓜式教程(Eclipse+ADT)_supergame111的博客-程序员宅基地

以后工作中要用到android开发,所以想搭建好开发环境,笔记本装的是win7,在网上找了找相关资料,发现博客园有一片介绍搭建Android开发环境的文章,所以转载过来方便以后查看。转载地址:http://www.cnblogs.com/vengen/archive/2010/04/01/AndroidSetup.html我把该教程做成了一个PDF,网速慢的朋友可以在这里下载 http:/

ubuntu 14.04 上配置vlc组播源_helloxielan的博客-程序员宅基地

VLC: Video LAN多媒体播放器,是一个跨平台开源的软件,支持主流的编码格式MPEG-2、H.264等。(1)ubuntu上安装vlc:sudo apt-get install vlc(2)配置VLC组播源 打开vlc播放器,在终端运行命令 vlc即可,可以看到如下界面 选择 “媒体”-&gt;“流”-&gt;“文件”-&...

系统架构--设计模式之“全局变量”_yanlaizhishi的博客-程序员宅基地_全局变量 设计模式

这里的全局变量分为两种: 一、 程序中运用的全局变量           一般用define(AAAA , 12213); 定义 二、模板中运用的全局变量        好的框架要做到能够把类似于 site_url 这样的全局变量灵活的运用到模板中,来提高程序的灵活性        这样就需要设置一些初始化模板赋值变量

随便推点

CSP测试第二题合集_吗吗哈哈的博客-程序员宅基地_csp第二题

稀疏向量题目描述输入格式输出格式样例输入样例输出-20样例解释子任务代码描述#include&lt;iostream&gt;#include&lt;vector&gt;using namespace std;int main(){ int n,a,b; cin&gt;&gt;n&gt;&gt;a&gt;&gt;b; vector&lt; pair&lt;int,int&gt; &gt; u,v; //使用vector容器来存储数据 in

darwin之RTPSession_sunxiaopengsun的博客-程序员宅基地_rtpsession

1.RTPSession何时创建?RTPSession与RTSPSession类似,只要有一个客户端,则对应一个RTSPSession和RTPSession.CreateNewRTPSession在rtsp客户端发送describe(拉流)或者Announce(推流)的时候创建.一个客户端只对应一个RTSPSession和RTPSession.

Rsync同步错误处理_Kallen的博客-程序员宅基地

1.用户密码错误@ERROR: auth failed on module testrsync error: error starting client-server protocol (code 5) at main.c(1503) [receiver=3.0.6]检查服务器A存储密码文件和服务器B密码文件。 服务器A密码文件: /etc/rsyncd/rsyncd.secrets 格式为

hadoop的概念及集群搭建_chenc梧高的博客-程序员宅基地

文章目录1、hadoop介绍2、Hadoop的集群优点:3、关于hadoop的相关概念:1)分布式存储:2)Block3)容灾4、分布式计算5、分布式计算角色6、hadoop集群搭建1)环境2)创建普通用户3) 设置namenode4)安装jdk5)在另外两个节点安装java/jdk6)安装namenode创建dfs和tmp解压修改文件datanode配置文件生成namenode格式化数据:查看是...

linq 去掉集合中第一个||order by排序_偶尔会发笑的博客-程序员宅基地

1. 集合MyZDALL去掉第一个MyZDALL.Skip(1)2. 集合MyZDALL按KJSJ排序MyZDALL.OrderBy(s =&gt; s.KJSJ)3.按金额排降序 取前5query.OrderByDescending(x =&gt; x.FZCJE).Take(5).ToList();...

对于Memcache和Java hashMap比较_zhao0829wang的博客-程序员宅基地

因队友陷落,还是自问自答吧…二者相同点二者都是key-value且都是通过hash来存储都是内存存储二者不同Advantages of Java memory over memcache:Java memory is faster (no network).Java memory won’t require serialization, you have Java objects availab

推荐文章

热门文章

相关标签