1. 自定义事件
1.1. 功能介绍
自定义事件功能,是MTA为开发者提供的自助分析工具。通过代码埋点,对用户行为进行追踪,完成对用户行为细节的记录。我们提供了两种形式的自定义事件:普通事件、计算事件。
普通事件与计算事件的区别是什么?
普通事件可满足定性事件的统计需求,如登陆、注册、进入首页等行为。
计算事件可满足变量事件的统计需求,如充值金额、购买数量等。详情>>
1.1.1. 普通事件
在普通事件下,通过代码埋点,用户行为得到了量化:
统计次数:统计指定行为被触发的次数 如,点击“开始注册”等按钮的次数和点击“广告页”等页面的次数
统计时长:统计两个指定行为之间的消耗时间,单位为秒 如,用户从开始注册到注册成功的消耗时间
下面以音乐播放应用的播放事件为例说明普通事件如何完成统计。
事件ID及其参数形如:onPlay(Name=‘那些年’, singer=‘胡夏’)
1.统计每天的播放情况:
播放事件统计结果
日期 | 事件ID | 事件名 | 触发账户数 | 触发次数 | 平均时长 |
---|---|---|---|---|---|
20171130 | onPlay | 播放 | 27095 | 102586 | 185 |
20171129 | onPlay | 播放 | 26873 | 98792 | 179 |
20171128 | onPlay | 播放 | 26124 | 96875 | 160 |
2.统计每天“那些年”“老男孩”的播放量和播放时长:
播放事件 — Name参数统计结果
日期 | 参数名 | 参数值 | 触发账户数 | 触发次数 | 平均时长 |
---|---|---|---|---|---|
20171130 | Name | 那些年 | 3095 | 3985 | 158 |
20171130 | Name | 老男孩 | 3985 | 3125 | 130 |
20171129 | Name | 那些年 | 2995 | 3027 | 124 |
20171129 | Name | 老男孩 | 2885 | 3596 | 168 |
1.1.2. 计算事件
考虑以下情景:
一款手游,想统计游戏道具购买情况,包括:
1)每个道具的平均购买数量
2)不同等级下,不同角色的花费分布情况
来看看如何通过计算事件完成游戏道具购买情况统计。
在用户购买道具完成后,上报计算事件数据:
【例】onShop(playerId=98754515, playerLevel=3, playerRole=‘法师’, itemId=1027, itemNum=5, payment=175)
1)统计每个道具的平均购买数量
① 选择itemId参数作为统计维度
② 选择itemNum作为计算参数
③ 对itemNum选择求平均值计算方式
日期 | 事件ID | 事件名 | itemID | itemNum平均 |
---|---|---|---|---|
20171130 | onShop | 道具购买 | 1027 | 5.5 |
20171129 | onShop | 道具购买 | 1026 | 4.4 |
20171128 | onShop | 道具购买 | 1025 | 6.3 |
2)统计不同等级下,不同角色的花费分布情况
① 选择playerLevel、playerRole参数作为统计维度
② 选择payment作为计算参数
③ 对payment 选择累加计算方式
游戏等级 | 游戏角色 | payment累加 |
---|---|---|
2 | 法师 | 49600 |
2 | 武士 | 43800 |
3 | 法师 | 53000 |
3 | 武士 | 62300 |
4 | 法师 | 88655 |
4 | 武士 | 99550 |
... | ... | ... |
计算事件除了支持对事件参数做SUM(累加)、AVG(求平均值)计算外,还支持COUNT(DISTINCT)(去重)、MAX(求最大值)、MIN(求最小值),并且可以同时选择多个维度进行分析,满足深层次的分析需求。
1.1.3. 操作指南
通过MTA自定义事件功能获取业务特性统计结果只需要:
在MTA管理台新增自定义事件,填写事件id、事件名称,并按需选择事件类型;
在事件的参数配置页面新增参数,填写参数id,参数名称;
嵌入MTA SDK,把数据上报到MTA服务器;
普通事件可在管理台直接查看事件及参数统计数据;计算事件需在参数配置页面下设置参数组合,设置完成后,即可查看参数组合数据报表。
其中每类事件都有Key-Value参数类型和不定长字符串参数类型,由于Key-Value参数类型的接口能表达更丰富的内容,我们推荐优先使用Key-Value类参数接口。另外,如果代码同时使用了这2种参数类型,event_id最好不一样。
注意:event_id需要先在腾讯移动分析网站上面配置,才能参与正常的数据统计。event_id不能包含空格或转义字符。
新增事件的方法如图:
新增事件参数的方法如图:
1.2. Android自定义事件使用指南
1.2.1. 注册自定义事件
自定义事件的注册(配置)包括事件id的注册和事件id下参数信息的注册。
(1)登陆mta前台,选择左边选择“自定义事件”。
(2)选择“新增事件”,按照需求填写事件id、key、value等信息。
(3)可以在查看详情下的“参数”查看事件id下所有参数上报的明细。
1.2.2. 【次数统计】Key-Value参数的事件
void StatService.trackCustomKVEvent(Context ctx, String event_id,
Properties properties)
(1)参数:
Ctx 页面的设备上下文
event_id 事件标识
properties Key-Value参数对,key和value都是String类型
(2)调用位置: 代码任意处
public void onOKBtnClick(View v) {
// 统计按钮被点击次数,统计对象:OK按钮
Properties prop = new Properties();
prop.setProperty("name", " OK ");
StatService.trackCustomKVEvent(this, " button_click", prop);
}
public void onBackBtnClick(View v) {
// 统计按钮被点击次数,统计对象:back按钮
Properties prop = new Properties();
prop.setProperty("name", " back ");
StatService.trackCustomKVEvent(this, " button_click", prop);
}
1.2.3. 【时长统计】Key-Value参数事件
可以指定事件的开始和结束时间,来上报一个带有统计时长的事件。
void StatService.trackCustomBeginKVEvent(
Context ctx, String event_id, Properties properties)
void StatService.trackCustomEndKVEvent(
Context ctx, String event_id, Properties properties)
(1)参数:
Ctx 页面的设备上下文
event_id 事件标识
properties Key-Value参数对,key和value都是String类型
(2)调用位置:
代码任意处
public void onClick(View v) {
Properties prop = new Properties();
prop.setProperty("level", "5");
// 统计用户通关所花时长,关卡等级: 5
// 用户通关前
StatService.trackCustomBeginKVEvent(this, " playTime", prop);
// 用户正在游戏中….
// …….
// 用户通关完成时
StatService.trackCustomEndKVEvent(this, " playTime", prop);
}
1.2.4. 【时长统计】带有统计时长的自定义参数事件
可以指定事件的开始和结束时间,来上报一个带有统计时长的事件。
void StatService.trackCustomBeginEvent(
Context ctx, String event_id, String... args)
void StatService.trackCustomEndEvent(
Context ctx, String event_id, String... args)
(1)参数:
Ctx 页面的设备上下文
event_id 事件标识
args 事件参数
(2)调用位置:
代码任意处
public void onClick(View v) {
// 统计用户通关所花时长
// 用户通关前
StatService.trackCustomBeginEvent(this, " playTime", "level5");
// 用户正在游戏中….
// …….
// 用户通关完成时
StatService.trackCustomEndEvent(this, " playTime", " level5");
注意:trackCustomBeginEvent和trackCustomEndKvent必须成对出现,且参数列表完全相同,才能正常上报事件。
1.3. iOS自定义事件使用指南
1.3.1. NSDictionary为参数的自定义事件
/**
上报自定义事件
@param event_id 事件的ID,ID需要先在MTA前台配置好才能生效
@param kvs 事件的参数,参数需要先在MTA前台配置好才能生效
*/
+ (void)trackCustomKeyValueEvent:(NSString *)event_id props:(NSDictionary *)kvs;
/**
上报自定义事件
并且指定上报方式
@param event_id 事件的ID,ID需要先在MTA前台配置好才能生效
@param kvs 事件的参数,参数需要先在MTA前台配置好才能生效
@param appkey 需要上报的appKey,若传入nil,则上报到启动函数中的appkey
@param isRealTime 是否实时上报,若传入YES,则忽略全局上报策略实时上报。否则按照全局策略上报。
*/
+ (void)trackCustomKeyValueEvent:(NSString *)event_id
props:(NSDictionary *)kvs
appkey:(NSString *)appkey
isRealTime:(BOOL)isRealTime;
/**
开始统计自定义时长事件
此接口需要跟trackCustomKeyValueEventEnd配对使用
多次调用以第一次开始时间为准
@param event_id 事件的ID,ID需要先在MTA前台配置好才能生效
@param kvs 事件的参数,参数需要先在MTA前台配置好才能生效
*/
+ (void)trackCustomKeyValueEventBegin:(NSString *)event_id props:(NSDictionary *)kvs;
/**
开始统计自定义时长事件
并指定上报方式
此接口需要跟trackCustomKeyValueEventEnd配对使用
多次调用以第一次开始时间为准
@param event_id 事件的ID,ID需要先在MTA前台配置好才能生效
@param kvs 事件的参数,参数需要先在MTA前台配置好才能生效
@param appkey 需要上报的appKey,若传入nil,则上报到启动函数中的appkey
*/
+ (void)trackCustomKeyValueEventBegin:(NSString *)event_id
props:(NSDictionary *)kvs
appkey:(NSString *)appkey;
/**
结束统计自定义时长事件
此接口需要跟trackCustomKeyValueEventBegin配对使用
多次调用以第一次结束时间为准
@param event_id 事件的ID,ID需要先在MTA前台配置好才能生效
@param kvs 事件的参数,参数需要先在MTA前台配置好才能生效
参数中的key和value必须跟开始统计时传入的参数一样才能正常配对
*/
+ (void)trackCustomKeyValueEventEnd:(NSString *)event_id props:(NSDictionary *)kvs;
/**
结束上报自定义时长事件
并指定上报方式
此接口需要跟trackCustomKeyValueEventBegin配对使用
多次调用以第一次结束时间为准
@param event_id 事件的ID,ID需要先在MTA前台配置好才能生效
@param kvs 事件的参数,参数需要先在MTA前台配置好才能生效
参数中的key和value必须跟开始统计时传入的参数一样才能正常配对
@param appkey 需要上报的appKey,若传入nil,则上报到启动函数中的appkey
@param isRealTime 是否实时上报,若传入YES,则忽略全局上报策略实时上报。否则按照全局策略上报。
*/
+ (void)trackCustomKeyValueEventEnd:(NSString *)event_id
props:(NSDictionary *)kvs
appkey:(NSString *)appkey
isRealTime:(BOOL)isRealTime;
/**
直接统计自定义时长事件
这个方法用于上报统计好的时长事件
@param seconds 自定义事件的时长,单位秒
@param event_id 事件的ID,ID需要先在MTA前台配置好才能生效
@param kvs 事件的参数,参数需要先在MTA前台配置好才能生效
*/
+ (void)trackCustomKeyValueEventDuration:(uint32_t)seconds
withEventid:(NSString *)event_id
props:(NSDictionary *)kvs;
/**
直接上报自定义时长事件
并指定上报方式
这个方法用于上报统计好的时长事件
@param seconds 自定义事件的时长,单位秒
@param event_id 事件的ID,ID需要先在MTA前台配置好才能生效
@param kvs 事件的参数,参数需要先在MTA前台配置好才能生效
@param appkey 需要上报的appKey,若传入nil,则上报到启动函数中的appkey
@param isRealTime 是否实时上报,若传入YES,则忽略全局上报策略实时上报。否则按照全局策略上报。
*/
+ (void)trackCustomKeyValueEventDuration:(uint32_t)seconds
withEventid:(NSString *)event_id
props:(NSDictionary *)kvs
appKey:(NSString *)appkey
isRealTime:(BOOL)isRealTime;
示例
// 次数统计
- (IBAction)clickKVButton:(id)sender {
[MTA trackCustomKeyValueEvent:@"KVEvent"
props:[NSDictionary dictionaryWithObject:@"Value" forKey:@"Key"]];
}
// 时长统计
- (IBAction)clickStartKvButton:(id)sender {
[MTA trackCustomKeyValueEventBegin:@"KVEvent"
props:[NSDictionary dictionaryWithObject:@"Value" forKey:@"TimeKey"]];
}
- (IBAction)clickEndKvButton:(id)sender {
[MTA trackCustomKeyValueEventEnd:@"KVEvent"
props:[NSDictionary dictionaryWithObject:@"Value" forKey:@"TimeKey"]];
}
1.3.2. NSArray为参数的自定义事件
接口
/**
上报自定义事件
@param event_id 事件的ID,ID需要先在MTA前台配置好才能生效
@param array 事件的参数,参数需要先在MTA前台配置好才能生效
*/
+ (void)trackCustomEvent:(NSString *)event_id args:(NSArray *)array;
/**
上报自定义事件
并指定上报方式
@param event_id 事件的ID,ID需要先在MTA前台配置好才能生效
@param array 事件的参数,参数需要先在MTA前台配置好才能生效
@param appkey 需要上报的appKey,若传入nil,则上报到启动函数中的appkey
@param isRealTime 是否实时上报,若传入YES,则忽略全局上报策略实时上报。否则按照全局策略上报。
*/
+ (void)trackCustomEvent:(NSString *)event_id
args:(NSArray *)array
appkey:(NSString *)appkey
isRealTime:(BOOL)isRealTime;
/**
开始统计自定义时长事件
此接口需要跟trackCustomEventEnd配对使用
多次调用以第一次开始时间为准
@param event_id 事件的ID,ID需要先在MTA前台配置好才能生效
@param array 事件的参数,参数需要先在MTA前台配置好才能生效
*/
+ (void)trackCustomEventBegin:(NSString *)event_id args:(NSArray *)array;
/**
开始统计自定义时长事件
并指定上报方式
此接口需要跟trackCustomEventEnd配对使用
多次调用以第一次开始时间为准
@param event_id 事件的ID,ID需要先在MTA前台配置好才能生效
@param array 事件的参数,参数需要先在MTA前台配置好才能生效
@param appkey 需要上报的appKey,若传入nil,则上报到启动函数中的appkey
*/
+ (void)trackCustomEventBegin:(NSString *)event_id
args:(NSArray *)array
appkey:(NSString *)appkey;
/**
结束统计自定义时长事件
此接口需要跟trackCustomKeyValueEventBegin配对使用
多次调用以第一次结束时间为准
@param event_id 事件的ID,ID需要先在MTA前台配置好才能生效
@param array 事件的参数,参数需要先在MTA前台配置好才能生效
参数中的各项必须跟开始统计时传入的参数一样才能正常配对
*/
+ (void)trackCustomEventEnd:(NSString *)event_id args:(NSArray *)array;
/**
结束统计自定义时长事件
并指定上报方式
此接口需要跟trackCustomKeyValueEventBegin配对使用
多次调用以第一次结束时间为准
@param event_id 事件的ID,ID需要先在MTA前台配置好才能生效
@param array 事件的参数,参数需要先在MTA前台配置好才能生效
参数中的各项必须跟开始统计时传入的参数一样才能正常配对
@param appkey 需要上报的appKey,若传入nil,则上报到启动函数中的appkey
@param isRealTime 是否实时上报,若传入YES,则忽略全局上报策略实时上报。否则按照全局策略上报。
*/
+ (void)trackCustomEventEnd:(NSString *)event_id
args:(NSArray *)array
appkey:(NSString *)appkey
isRealTime:(BOOL)isRealTime;
示例
// 次数统计
- (IBAction)clickNormaltButton:(id)sender {
[MTA trackCustomEvent:@"NormalEvent" args:[NSArray arrayWithObject:@"arg0"]];
}
// 时长统计
- (IBAction)clickStartButton:(id)sender {
[MTA trackCustomEventBegin:@"TimeEvent" args:[NSArray arrayWithObject:@"arg0"]];
}
- (IBAction)clickEndButton:(id)sender {
[MTA trackCustomEventEnd:@"TimeEvent" args:[NSArray arrayWithObject:@"arg0"]];
}
1.3.3. 上报当前缓存的事件
接口
/**
上报当前缓存的数据
若当前有缓存的事件(比如上报策略不为实时上报,或者有事件上报失败)时
调用此方法可以上报缓存的事件
@param maxStatCount 最大上报事件的条数
*/
+ (void)commitCachedStats:(int32_t)maxStatCount;