友盟+搜索

{{errorMsg}}

集成准备

相关视频教程,请前往友盟课堂

获得Appkey

集成友盟SDK之前,您首先需要到友盟官网注册并且添加新应用,获得Appkey

  • 特别提醒:我们建议开发者在注册账号时使用企业邮箱,避免使用个人邮箱注册,防止由于个人离职带来的问题,建议使用的账号形式 :umeng@企业域名、apps@企业域名、dev@企业域名。

image

FAQ

Q:应用的安卓版和IOS版能否共用一个appkey

A:不同平台的应用禁止使用相同的Appkey,需要分开注册。

Q:注册应用时,提示“应用名称已存在”

A:友盟后台的应用名与实际应用名和包名无关,建议命名为“应用名+平台(IOS/Android)”。

下载SDK

下载统计SDK 并解压缩。

导入SDK

导入SDK有以下两种方法,

新版SDK支持Android 6.0,编译时请指定编译版本为6.0及以上。

下载SDK并集成

将下载包中的libs 文件夹合并到本地工程libs子目录下;在Eclipse中右键工程根目录,选择Properties -> Java Build Path -> Libraries,然后点击Add External JARs... 选择指向jar的路径,点击OK,即导入成功。

使用Android Studio导入SDK

Android Studio是谷歌推出了新的Android开发环境,友盟支持AndroidStudio的Gradle配置,如果您使用Android Studio开发,请按照如下的方法操作:

在Gradle依赖中添加:

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

如果无法正常集成请添加如下代码 :

allprojects {
repositories {
mavenCentral()
}
}

基本功能集成

新增场景类型设置接口

场景类型设置接口。


MobclickAgent.setScenarioType(Context context, EScenarioType etype)

etype是官方场景,有如下场景:


EScenarioType. E_UM_NORMAL  普通统计场景类型
EScenarioType. E_UM_GAME   游戏场景类型
EScenarioType. E_UM_ANALYTICS_OEM 统计盒子场景类型
EScenarioType. E_UM_GAME_OEM   游戏盒子场景类型

UTDID相关

为防止冲突UTDID包单独提供,如果需要请导入UTDID包

配置Appkey

XML配置Appkey

manifest的配置主要包括添加权限,填写Appkey和填写渠道id三部分,代码示例如下:

<manifest……>
<uses-sdk android:minSdkVersion="4"></uses-sdk>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<application ……>
……
<activity ……/>
<meta-data android:value="YOUR_APP_KEY" android:name="UMENG_APPKEY"></meta-data>
<meta-data android:value="Channel ID" android:name="UMENG_CHANNEL"/>
</application>    
</manifest>

权限说明

权限 用途
ACCESS_NETWORK_STATE(必须) 检测联网方式,区分用户设备使用的是2G、3G或是WiFi
READ_PHONE_STATE(必须) 获取用户设备的IMEI,通过IMEI和mac来唯一的标识用户。
ACCESS_WIFI_STATE(必须) 获取用户设备的mac地址,在平板设备上,无法通过imei标示设备,我们会将mac地址作为用户的唯一标识
INTERNET(必须) 允许应用程序联网,以便向我们的服务器端发送数据。

填写appkey

中的替换为您在友盟后台申请的应用Appkey(Appkey可在统计后台的 页面查看),其他部分均不需改动。

channel填写

中的替换为您应用的推广渠道名称,

例如在豌豆荚渠道推广此包,代码示例:

渠道命名规范

1.可以由英文字母、阿拉伯数字、下划线、中划线、空格、括号组成,可以含汉字以及其他明文字符,但是

2.首尾字符不可以为空格

3.不要使用纯数字作为渠道ID

4.最多256个字符

5."unknown" 及其各种大小写形式,作为友盟保留的字段,不可以作为渠道名

在您查看数据时,渠道会作为一个数据细分的维度。

在代码中配置Appkey和Channel

如果希望在代码中配置Appkey、Channel、Token(Dplus)等信息,请在程序入口处调用如下方法:

MobclickAgent. startWithConfigure(UMAnalyticsConfig config)

UMAnalyticsConfig初始化参数类,提供多参数构造方式:


UMAnalyticsConfig(Context context, String appkey, String channelId)
UMAnalyticsConfig(Context context, String appkey, String channelId, EScenarioType eType)
UMAnalyticsConfig(Context context, String appkey, String channelId, EScenarioType eType,Boolean isCrashEnable)

构造意义:
String appkey:官方申请的Appkey
String channel: 渠道号
EScenarioType eType: 场景模式,包含统计、游戏、统计盒子、游戏盒子
Boolean isCrashEnable: 可选初始化. 是否开启crash模式

FAQ

Q:如何添加渠道?

A:一个包中只能添加一个渠道,多个渠道需要打多个包。开发者新增渠道需要在工程manifest中或者activity中调用接口添加我们的渠道信息,友盟后台没有添加渠道的地方。您可以使用Gradle实现多渠道打包。点击这里

Q:如何删除不需要的渠道

A:目前不支持删除渠道,但可以隐藏,请在 里隐藏渠道

 渠道统计使用中的问题请参见友盟开发者社区: 友盟渠道统计使用的那些事儿

version标识

以SDk打包时的VersionName作为应用程序的版本标识。

FAQ

Q:在版本分布中没有看到应用相应的版本

A:请查看,是否隐藏了该版本。

session的统计

•在游戏所在的Activity的onCreate方法调用 UMGameAgent.init(Context) 方法。在onResume方法中调用UMGameAgent.onResume(Context), onPause方法中调用UMGameAgent.onPause(Context)


public void onCreate(Bundle savedInstanceState){
    super.onCreat(savedInstanceState);

    UMGameAgent.setDebugMode(true);//设置输出运行时日志
    UMGameAgent.init( this );
}

public void onResume() {
super.onResume();
UMGameAgent.onResume(this);
}
public void onPause() {
super.onPause();
UMGameAgent.onPause(this);
}

  • 确保在所有的Activity中都调用 UMGameAgent.onResume();和UMGameAgent.onPause(); 方法,这两个调用将不会阻塞应用程序的主线程,也不会影响应用程序的性能。
  • 如果您的Activity之间有继承或者控制关系请不要同时在父和子Activity中重复添加onPause和onResume方法,否则会造成重复统计,导致启动次数异常增高。(eg.使用TabHost、TabActivity、ActivityGroup时)。
  • 当应用在后台运行超过30秒(默认)再回到前端,将被认为是两个独立的session(启动),例如用户回到home,或进入其他程序,经过一段时间后再返回之前的应用。可通过接口: 来自定义这个间隔(参数单位为毫秒)。
  • 如果开发者调用Process.kill或者System.exit之类的方法杀死进程,请务必在此之前调用MobclickAgent.onKillProcess(Context context)方法,用来保存统计数据。

 session统计的相关问题请参见友盟开发者社区: 启动次数的统计原理单次使用时长的统计原理

发送策略

发送策略设定了用户产生的数据发送回友盟服务器的频率。

Android平台的数据发送策略有

1. :新增、活跃、启动次数等数据在APP本次打开时即刻发送,使用时长、自定义事件、错误统计等在使用过程中产生的所有消息数据都在下次启动应用时发送。如果应用程序启动时处在不联网状态,那么消息将会缓存在本地,下次再尝试发送。

2. :按特定间隔发送数据,间隔时长。新增、活跃、启动次数等数据在APP本次打开时即刻发送,使用时长、自定义事件、错误统计等在使用过程中产生的所有数据都按间隔发送,如果应用程序启动时处在不联网状态,那么消息将会缓存在本地,下次再尝试发送。

发送策略设置方法

您可以在后台 页面自定义发送间隔。具体如下图:

image

点击发送策略之后,可以看到设置页面

image

(1)在没有获取到在线配置时,默认使用启动时发送的策略。

(2)在打开debug调试模式或者使用集成测试时,不受发送策略控制。

游戏接口集成

关卡统计集成

我们提供了一组方法来统计关卡相关的事件。

UMGameAgent.startLevel(String level); //level 为关卡ID(eg:level-01)
UMGameAgent.failLevel(String level);
UMGameAgent.finishLevel(String level);

在游戏开启新的关卡的时候调用 UMGameAgent.startLevel(level) 方法,在关卡失败的时候调用 UMGameAgent.failLevel(level) 方法,在成功过关的时候调用 UMGameAgent.finishLevel(level) 方法。调用 failLevelfinishLevel 的时候会计算从 startLevel 开始的时长,作为这一关卡的耗时。level 字段最好为非空可排序的字符串。

SDK 会默认减去程序切入后台的时间,可以设置 UMGameAgent.setTraceSleepTime(false); 来关闭默认设置,这样统计到的关卡时长是从 startLevel 到 failLvel(finishLevel) 之间的真实时长。

测试方法及报表对应关系请见产品使用文档

注意

  1. 目前每个游戏最多支持500个关卡。

真实消费统计

这部分API用来统计用户(或者玩家) 在游戏内付费的统计,包括购买虚拟币,道具等。

API 说明: public static void pay(double money, double coin, int source)
money 本次消费金额(非负数)
coin 本次消费的等值虚拟币(非负数)
source 支付渠道, 1 ~ 99 之间的整数, 1-20 已经被预先定义, 21~99 之间需要在网站设置。

如下表:

数值 含义
1 Google Play
2 支付宝
3 网银
4 财付通
5 移动通信
6 联通通信
7 电信通信
8 paypal

在游戏中充值或者购买虚拟币的时候调用此方法,比如通过支付宝用 10元钱 购买了 1000 个金币,可以这样调用:

UMGameAgent.pay(10,1000,2);

有些时候在游戏中会直接购买某个道具,比如10元购买 2个魔法药水,每个药水50个金币,可以调用下面的方法在付费的同时购买道具。

UMGameAgent.pay(10,"magic_bottle",2,50,2);

public static void pay(double money,String item , int number, double price,int source)
money 本次消费的金额(非负数)
item 购买物品的ID(不能为空)
number 购买物品数量(非负数)
price 每个物品等值虚拟币的价格(非负数)
source 支付渠道 (见上表)

测试方法及报表对应关系请见产品使用文档

虚拟消费统计

游戏中所有虚拟消费,比如用金币购买某个道具都使用 buy 方法, 声明如下:

public static void buy(String item, int number,double price)
item 购买物品的ID
number 购买物品数量
price 购买物品的单价(虚拟币)

比如在游戏中使用金币购买了1个头盔,一个头盔价值 1000 金币,可以这样统计:

UMGameAgent.buy("helmet", 1, 1000);

测试方法及报表对应关系请见产品使用文档

物品消耗统计

游戏中的物品损耗,比如使用了2瓶魔法药水,每个需要50个虚拟币,可以这样统计:

UMGameAgent.use("magic_bottle", 2 , 50);

public static void use(String item, int number,double price)
item 消耗的物品ID
number 消耗物品数量
price 物品单价(虚拟币)

测试方法及报表对应关系请见产品使用文档

注意

  1. 目前每个游戏最多支持1000个道具的统计。

额外奖励

针对游戏中额外获得的虚拟币进行统计,比如系统赠送,节日奖励,打怪掉落。

比如连续5天登陆游戏奖励1000金币。

UMGameAgent.bonus(1000, 1);

public static void bonus(double coin, int trigger)
coin 赠送的虚拟币数额
trigger 触发奖励的事件, 取值在 1~10 之间,“1”已经被预先定义为“系统奖励”, 2~10 需要在网站设置含义。

如果是掉落道具,比如掉落一把价值100金币的宝剑可以这样调用:

UMGameAgent.bonus("sword", 1, 100, 1);

public static void bonus(String item, int num, double price,int trigger)
item 奖励物品ID
num 奖励物品数量
price 物品的虚拟币单价
trigger 触发奖励的事件, 取值在 1~10 之间,“1”已经被预先定义为“系统奖励”, 2~10 需要在网站设置含义。

如果在五一假期中举行登陆有奖活动,开发者想统计活动期间所赠送的金币数量,可以这样调用:

UMGameAgent.bonus(1000, 2);

在后台“设置”——“虚拟币来源管理”中将“2”这个事件设为节日奖励。即可看到相应的数据了。

注意:所有的浮点类型,只精确到百分位;所有的数值类型不能为负数,否则不予处理。tigger的取值在1~10之间,“1”已经被预先定义为“系统奖励”,超过这个范围将不予处理。

玩家信息统计

增加玩家账号统计维度,同时可以追踪玩家的等级情况。以便结合关卡和付费数据整理出更有价值的用户。开发者应该在程序开始的地方尽早调用。

账号统计

注意:使用老版SDK中账号统计的开发者,请尽早跟新SDK并使用新接口

public static void onProfileSignIn(String ID) ;
public static void onProfileSignIn(String Provider, String ID) ;

ID:玩家账号ID,长度小于64字节

Provider:账号来源。如果玩家通过第三方账号登陆,可以调用此接口进行统计。不能以下划线"_"开头,使用大写字母和数字标识,长度小于32字节; 如果是上市公司,建议使用股票代码。

public static void onProfileSignOff();

账号登出时需调用此接口,调用之后不再发送账号相关内容。

当玩家使用游戏自有账号登录时,可以这样统计:

UMGameAgent.onProfileSignIn("playerID");

当玩家使用第三方账号(如新浪微博)登录时,可以这样统计:

UMGameAgent.onProfileSignIn("WB","playerID");

等级统计接口

当玩家建立角色或者升级时,需调用此接口
public static void setPlayerLevel(int level);

level:大于1的整数,最多统计1000个等级

当玩家从1级升至2级时,可以这样统计:

UMGameAgent.setPlayerLevel(2);

高级功能集成指南

使用自定义事件

自定义事件可以实现在应用程序中埋点来统计用户的点击行为。自定义事件目前包括“计数事件”和“计算事件”,二者的区别以及详细说明请点击这里

自定义事件使用中的问题请参见友盟开发者社区:自定义事件常见问题

自定义事件字段说明

event id:自定义事件id
key:自定义事件下的参数
value:自定义事件参数下的参数值

使用自定义事件的依赖条件

  1. 使用自定义事件功能请先登陆友盟官网 , 在 “统计分析->设置->事件” (子账户由于权限限制可能无法看到“设置”选项,请联系主帐号开通权限。)页面中添加相应的事件id(事件id可用英文或数字,不建议使用中文),然后服务器才会对相应的事件请求进行处理。
  2. 自定义事件的代码需要放在Activity里的onResume方法后面,不支持放在onCreat()方法中。

计数事件

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

统计发生次数

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

MobclickAgent.onEvent(Context context, String eventId);

context指当前的Activity,eventId为当前统计的事件ID。

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

MobclickAgent.onEvent(mContext,"Forward");

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

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

MobclickAgent.onEvent(Context context, String eventId, HashMap<String,String> map);

map 为当前事件的属性和取值(Key-Value键值对)。

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

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

计算事件

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

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

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

MobclickAgent.onEventValue(Context context, String id, Map<String,String> m, int du)

id 为事件ID
map 为当前事件的属性和取值
du 为当前事件的数值为当前事件的数值,取值范围是-2,147,483,648 到 +2,147,483,647 之间的有符号整数,即int 32类型,如果数据超出了该范围,会造成数据丢包,影响数据统计的准确性。

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

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);

上面方法在Android统计分析V5.2.2之后(>=)才提供,之前的版本可以通过下面的方式封装计算事件:

public static void onEvent(Context context, String id, HashMap<String,String> m