友盟+搜索

{{errorMsg}}

Unity3D游戏统计分析插件使用指南

在项目中集成SDK

  • 下载最新版SDK的 导入 UmengGameAnalytics.unitypackage

  • 先在友盟的管理后台中创建App,获得AppKey

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

  • 编写统计代码

using UnityEngine;
using Umeng;


public class Example : MonoBehaviour {


    void Start () {

        //请到 http://www.umeng.com/analytics 获取app key 
        GA.StartWithAppKeyAndChannelId("your app key", "App Store");

        //触发统计事件 开始关卡
        GA.StartLevel("your level ID");


    }
}


Android开发者请注意:

友盟游戏统计分析 Unity3D v1.3 不在提供对Android 2.2的支持

Android平台用到的permission,service和activity

Asset/Plugins/Android/AndroidManifest.xml 已经默认添加如下permission,service和activity
用户无需再手动添加 这些permission,service和activity在Unity Build过程中会被自动加入到应用程序中

统计组件使用的permission

 检测联网方式,区分用户设备使用的是2G、3G或是WiFi
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
 访问互联网
 <uses-permission android:name="android.permission.INTERNET"/>
 获取用户手机的IMEI,用来唯一的标识用户
 <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
 如果您的应用会运行在无法读取IMEI的平板上,我们会将mac地址作为用户的唯一标识
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>  


iOS开发者请注意:

iOS9中ATS配置:

由于iOS9引入了App Transport Security (ATS)特性,要求App访问的网络使用HTTPS协议,如果不做特殊设置,http请求会失败,所以需要开发者在工程中增加设置以便可以发送http请求,如下:

在info plist中增加字段:


< key>NSAppTransportSecurity< /key>

< dict>
    < key>NSAllowsArbitraryLoads< /key>
    < ture />
< /dict>

配置完后如图所示:

Downloadex

使用Unity 5.3的开发者请注意:

需要添加依赖框架(Framework)和编译器选项
TARGETS-->Build Phases-->Link Binary With Libraries--> + -->libz.dylib(libz.tbd)

游戏统计介绍

充值

玩家支付货币兑换虚拟币,用于统计游戏的收入情况

public enum PaySource
{
     AppStore = 1,
     支付宝 = 2,
     网银 = 3,
     财付通 = 4,
     移动 = 5,
     联通 = 6,
     电信 = 7,
     Paypal = 8,
     Source9,// 目前1-20的来源已经被友盟预定义,如果使用自定义来源请使用21-99之间的id。
     Source10,
     ...
     Source20,

}


// 充值.
void Pay(double cash, PaySource source, double coin);
// 充值并购买道具.
void Pay(double cash, PaySource source, string item, int amount, double price);


字段 含义 取值
cash 真实币数量 >=0的数,最多只保存小数点后2位
source 支付渠道 枚举类型, 目前1-20的来源已经被预定义,如果使用自定义来源请使用21-99之间的id。
coin 虚拟币数量 大于0的整数, 最多只保存小数点后2位
item 道具ID 非空字符串
amount 道具数量 大于0的整数
price 道具单价 >=0

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

GA.Pay(10, GA.PaySource.AppStore, 1000);

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

GA.Pay(10, GA.PaySource.AppStore, "magic_bottle", 2, 50);

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

购买

玩家用虚拟币兑换一定数量、价值的道具

// 购买道具.
void Buy(string item, int amount, double price);

字段 含义 取值
item 道具ID 非空字符串
amount 道具数量 大于0的整数
price 道具单价 >=0

购买道具需要传递道具ID、数量(amount)、道具单价(price)。

Demo

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

GA.Buy("helmet", 1, 1000);

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

消耗

玩家使用道具的情况

// 使用道具.
void Use(string item, int amount, double price);

字段 含义 取值
item 道具ID 非空字符串
amount 道具数量 大于0的整数
price 道具单价 >=0

消耗道具需要传递道具ID、数量(amount)、道具单价(price)。

Demo

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

GA.Use("magic_bottle", 2, 50);

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

关卡

记录玩家在游戏中的进度

// 进入关卡.
void StartLevel(string level);
// 通过关卡.
void FinishLevel(string level);
// 未通过关卡.
void FailLevel(string level);

字段 含义 取值
level 关卡id 非空字符串(eg:level-01)

开发者需要在关卡状态变动时调用startLevel方法重新设置当前关卡。 多次调用startLevel,以最后设置的为准

在游戏开启新的关卡的时候调用 startLevel 方法,在关卡失败的时候调用 failLevel 方法,在成功过关的时候调用 finishLevel 方法。

调用 failLevel 或 finishLevel 的时候会计算从 startLevel 开始的时长,作为这一关卡的耗时。level 字段最好为非空可排序的字符串。

SDK 默认减去程序切入后台的时间。

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

玩家信息统计

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

账号统计

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

void ProfileSignIn(string userId)
void ProfileSignIn(string userId,string provider)

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

provider : 不能以下划线"_"开头,使用大写字母和数字标识; 如果是上市公司,建议使用股票代码。

使用sign-In函数后,如果结束该userId的统计,需要调用ProfileSignOfff函数

void ProfileSignOff()

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

GA.ProfileSignIn("playerID")

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

GA.ProfileSignIn("playerID","WB")

玩家等级统计

当玩家建立角色或者升级时,需调用此接口

void SetUserLevel(int level);

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

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

GA.SetUserLevel(2);

额外奖励

游戏中发生的金币、道具赠送行为

 public enum BonusSource
 {

     系统奖励 = 1,
     Source2,// 如果使用其他的来源 请使用Source2 到Source 10  并在友盟后台网站设置 对应的定义
     Source3,
     ...
     Source10,

 }


// 赠送金币.
void Bonus(double coin, BonusSource source);
// 赠送道具.
void Bonus(string item, int amount, double price, BonusSource source);

字段 含义 取值
coin 虚拟币数量 大于0的整数, 最多只保存小数点后2位
source 奖励渠道 枚举类型, 其中Source1预定义为“系统奖励”,Source2~Source10的定义需要在友盟后台设置
item 道具ID 非空字符串
amount 道具数量 大于0的整数
price 道具单价 >=0

消耗道具需要传递道具ID、数量(amount)、道具单价(price)。

Demo

连续5天登陆游戏奖励1000金币,可以这样统计:

GA.Bonus(1000,GA.BonusSource.系统奖励);

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

GA.Bonus(10000,BonusSource.Source2);
然后在后台“设置”——“虚拟币来源管理”中将“2”这个事件设为节日奖励。即可看到相应的数据了。

高级功能集成指南

使用自定义事件

使用自定义事件功能请先在网站应用管理后台(设置->编辑自定义事件)中添加相应的自定义事件后,服务器才会对相应的自定义事件请求进行处理。这里我们将提供几个简单而通用的接口:

事件数量统计

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

void Event(string eventId)
void Event(string eventId, string label)


eventId为当前统计的事件ID。

label为当前事件的属性和取值(键值对)。

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

GA.Event("Forward");

示例: 统计游戏中“死亡”事件发生的关卡数,那么可以在死亡的函数里调用

GA.Event("player_dead", "level1");

考虑事件附带属性,可以调用如下方法:

void Event(string eventId, Dictionary<string, string> attributes)

attributes为当前事件的属性 , 属性中的Key-Vaule Pair不能超过10个。

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

var dict = new Dictionary<string,string>();
dict["book"]="3";
GA.Event("purchase", dict);

事件时长统计

有的事件是持续发生的,需要记录其持续的时间,这里提供了两种解决方法。
在事件开始和结束时调用EventBegin(string eventId)EventEnd(string eventId)两个函数

示例: 跟踪播放音乐事件发生的总时间,那么在音乐播放开始时调用:

GA.EventBegin("music_play");

在音乐播放结束时调用:

GA.EventEnd("music_play");

跟踪时长的事件包含多个属性

void EventBeginWithPrimarykeyAndAttributes(string eventId, string primaryKey, Dictionary<string, string> attributes)

void EventEndWithPrimarykey(string eventId, string primaryKey)

primarykey这个参数用于和eventId一起标示一个唯一事件,并不会被统计;

对于同一个事件在EventBeginWithPrimarykeyAndAttributesEventEndWithPrimarykey 中要传递相同的eventIdprimaryKey

示例: 跟踪每种类型的音乐播放了多久,那么在音乐播放开始时调用

var dict = new Dictionary<string,string>();
dict["type"] = "popular";
dict["artist"] = "JJLin";

EventBeginWithPrimarykeyAndAttributes("music", "song1", dict);

var dict2 = new Dictionary<string,string>();
dict2["type"] = "popular";
dict2["artist"] = "Jobs";


EventBeginWithPrimarykeyAndAttributes("music", "song2", dict2);

在音乐播放结束时调用

EventEndWithPrimarykey("music", "song1");
EventEndWithPrimarykey("music", "song2");

时长是友盟统计的一个新功能,使用过程中可能会出现一些常见的错误,开发者应该尽量的避免。

注意:
1. eventId 和 tag 不能使用特殊字符,且长度不能超过128个字节;attributes中的key和value 都不能使用特殊字符,key 不能超过128个字节,value 不能超过256个字节
2. id, ts, du是保留字段,不能作为eventId及key的名称。
3. 每个应用至多添加500个自定义事件,每个event 的 key不能超过10个,每个key的取值不能超过1000个(不允许通过key-value结构来统计类似搜索关键词,网页链接等随机生成的字符串信息)。 

计算事件

程序中的某些事件,如登录、分享、下载等,是定性变量(categorical variable),对应的统计项是字符串类型。开发者只需了解它们发生的次数及独立用户数,使用计数事件即可满足。

还有一些事件,如上面提到的支付金额、内容浏览数量等是连续变量,对应的统计项是数值类型。开发者需要查看这些事件的数值分布特征,这就需要使用计算事件。

详见 http://dev.umeng.com/analytics/reference/functions/numekv

void Event(string eventId, Dictionary<string, string> attributes, int value)


eventId为当前统计的事件ID。

attributes为当前事件的属性和取值(键值对)。

value为定性变量(categorical variable)。


渠道分析

有时需要统计应用程序的分发渠道,例如有多少用户来从应用汇 下载了您的应用,又有多少用户通过GooglePlay下载到您的应用程序。你调用StartWithAppKeyAndChannelId时传入的channelId可以完成这个功能

注意:
每台设备仅记录首次安装激活的渠道,在其他渠道再次安装不会重复计量。 所以在测试不同的渠道的时候,请使用不同的设备来分别测试。channelId注意不能是纯数字。


使用在线配置功能

这个功能目前可以帮您在网站上动态配置两种类型的参数:

  • 自定义key-value型的键值对
  • 数据发送策略(发送策略在网站动态配置)

您需要在StartWithAppKeyAndChannelId后调用

GA.UpdateOnlineConfig();

它将从服务器获取在线参数,并缓存本地。

然后可使用

string GetConfigParamForKey(string key);

获得key对应的vaule值

key为友盟后台上预设的key值。


使用页面访问统计

您可以统计每个UI视图的停留时长及路径 为UI设计提供参考

需要配对使用,如

GA.PageBegin("UIPanel1");
...
GA.PageEnd("UIPanel1");

注意: 
* 我们针对页面访问进行的是抽样统计,所以只有数据量达到一定规模之后才可以看到。

* 由于这组方法的调用,需要保证线性不交叉,每个 PageBegin 都有一个 PageEnd 配对,如下:
    PageBegin ->PageEnd-> PageBegin -> PageEnd -> PageBegin ->PageEnd
    这样才能保证每个页面统计的正确


集成测试

//集成测试请使用此函数获得 设备的识别信息
public static string GetDeviceInfo()

集成测试服务详细说明请参见这里


技术支持

点击访问:友盟开发者社区

联系客服:联系客服
Email:support@umeng.com请发邮件至support@umeng.com,我们会尽快回复您。

为了能够尽快响应您的反馈,请提供您的appkey及log中的详细出错日志,您所提供的内容越详细越有助于我们帮您解决问题。

注意事项

  • SetCrashReportEnabled(bool value) 开启CrashReport收集, 默认是开启状态。此方法只有iOS平台有效。Android平台无此函数 Android平台CrashReport收集始终保持开启状态,无法关闭。
  • 注意:请在StartWithAppkey之前调用,之后调用无效!

  • SetLogEnabled(bool value) 设置为true,umeng SDK 会输出log信息,记得release产品时要设置回false。

  • SetLogEncryptEnabled(bool value)设置是否对日志信息进行加密, 默认false(不加密)。value 设置为true, SDK会将日志信息做加密处理

  • 对于需要在unity 4.6 中使用 il2cpp 编译 ios 程序的开发者,请在Build前删除 Assets/Pluggins/Android/UMGameAnalyticsLibForAndroid.dll