MobClick详解
1.使用自定义事件
使用自定义事件功能请先在网站应用管理后台(设置->编辑自定义事件)中添加相应的自定义事件后,服务器才会对相应的自定义事件请求进行处理。这里我们将提供几个简单而通用的接口:
1.1. 事件数量统计
在您希望跟踪的代码部分,调用如下方法:
[MobClick event:(NSString *)eventId];
eventId
为当前统计的事件ID。示例:统计微博应用中"转发"事件发生的次数,那么在转发的函数里调用
[MobClick event:@"Forward"];
- 考虑事件在一个属性上的取值,可以调用如下方法:
[MobClick event:(NSString *)eventId attributes:(NSDictionary *)attributes];
attributes为当前事件的属性和取值(键值对)。
示例:统计电商应用中“购买”事件发生的次数,以及购买的商品类型及数量,那么在购买的函数里调用:
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"book", @"type", @"3", @"quantity", nil];
[MobClick event:@"purchase" attributes:dict];
有时,只需考虑事件在一个属性上的取值,可以调用如下方法:
[MobClick event:(NSString *)eventId label:(NSString *)label];
label
为当前事件的取值。示例: 统计游戏中“死亡”事件发生的关卡数,那么可以在死亡的函数里调用
[MobClick event:@"player_dead" label:@"level"];
1.2. 事件时长统计
有的事件是持续发生的,需要记录其持续的时间,这里提供了两种解决方法。
在事件开始和结束时调用[MobClick beginEvent:]
和[MobClick endEvent:]
两个函数
示例: 跟踪播放音乐事件发生的总时间,那么在音乐播放开始时调用:
[MobClick beginEvent:@"music_play"];
在音乐播放结束时调用:
[MobClick endEvent:@"music_play"];
- 跟踪时长的事件包含多个属性
[MobClick beginEvent:(NSString *)eventId primarykey:(NSString *)keyName attributes:(NSDictionary *)attributes];
[MobClick endEvent:(NSString *)eventId primarykey:(NSString *)keyName];
primarykey
这个参数用于和eventId
一起标示一个唯一事件,并不会被统计;
对于同一个事件在beginEvent
和endEvent
中要传递相同的eventId
和 primarykey
(为什么要增加primarykey
,请看时长统计常见错误案例)
示例: 跟踪每种类型的音乐播放了多久,那么在音乐播放开始时调用
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"popular", @"type", @"JJLin", @"artist",@"registered",@"User_status", nil];
[MobClick beginEvent:@"music" primarykey:@"m7" attributes:dict];
在音乐播放结束时调用:
[MobClick endEvent:@"music" primarykey:@"m7"];
- 自己计算并上传event时长,在您想跟踪时长的代码部分,调用如下方法
在您想跟踪时长的代码部分,调用如下方法(单位为毫秒)
[MobClick event:(NSString *)eventId durations:(int)millisecond];
[MobClick event:(NSString *)eventId label:(NSString *)label durations:(int)millisecond];
[MobClick event:(NSString *)eventId attributes:(NSDictionary *)attributes durations:(int)millisecond];
时长是友盟统计的一个新功能,使用过程中可能会出现一些常见的错误,开发者应该尽量的避免。
注意
event_id
和tag
不能使用特殊字符,且长度不能超过128个字节;map
中的key
和value
都不能使用特殊字符,key
不能超过128个字节,value
不能超过256个字节id
,ts
,du
是保留字段,不能作为eventId
及key
的名称。- 每个应用至多添加500个自定义事件,每个
event
的key
不能超过10个,每个key
的取值不能超过1000个(不允许通过key-value结构来统计类似搜索关键词,网页链接等随机生成的字符串信息)。 如有任何问题,请联系客服qq: 800083942。
2.使用分发渠道分析
您选择多个分发渠道时,例如某Cydia源,或某网站,可以为不同渠道进行分发渠道的设定,分别打包成不同的渠道包,以便统计终端用户的程序安装渠道。
注意:
每台设备仅记录首次安装激活的渠道,在其他渠道再次安装不会重复计量。 所以在测试不同的渠道的时候,请使用不同的设备来分别测试。
示例: 在91和tongbu发布:
- [MobClick startWithAppkey:@"xxxxxxxxxxxxxxx" reportPolicy:REALTIME channelId:@"91store"];
- [MobClick startWithAppkey:@"xxxxxxxxxxxxxxx" reportPolicy:REALTIME channelId:@"tongbu"];
3.使用在线配置功能
这个功能目前可以帮您在网站上动态配置两种类型的参数:
自定义key-value型的键值对
数据发送策略
示例: 动态修改应用的欢迎语,修改应用中开关选项的"on"或"off",以及类似游戏中虚拟物品的价格。
您需要在
[MobClick startWithAppkey:@"xxxxxxxxxxxxxxx"];
之后添加
[MobClick updateOnlineConfig];
这句代码从服务器获取在线参数,并缓存本地。 当在项目里需要获取某个具体参数时调用
[MobClick getConfigParams:@"xxxx"];
xxxx
为友盟服务器上事先设置好的key
。 如果你想获取所有的在线参数,请使用.
[MobClick getConfigParams];
这两个方法都是从[NSUserDefaults standardUserDefaults]
获取缓存的值, 所以上面的[MobClick updateOnlineConfig]
方法要先在app启动时被调用。
注意:
updateOnlineConfig
在app启动时application:didFinishLaunchingWithOptions:
执行,前后台切换是不会执行的,如果需要在切换时更新在线参数,可以在相关回调里执行updateOnlineConfig
。
如果您需要知道在线参数何时获取完毕,可以监听 UMOnlineConfigDidFinishedNotification
,当这个通知发生时,最新的在线参数会传递给notification.userInfo
。
如果此时未联网或在线参数获取失败,这个通知是不会被发出的。
您可以用类似下面的代码来完成这个过程:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onlineConfigCallBack:) name:UMOnlineConfigDidFinishedNotification object:nil];
- (void)onlineConfigCallBack:(NSNotification *)notification {
NSLog(@"online config has fininshed and params = %@", notification.userInfo);
}
最后别忘记调用removeObserver:name:object:
删除这个监听。
4.页面访问路径统计
您可以统计每个View停留时长及路径。
需要配对使用
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[MobClick beginLogPageView:@"PageOne"];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[MobClick endLogPageView:@"PageOne"];
}
注意: 我们针对页面访问进行的是抽样统计,所以只有数据量达到一定规模之后才可以看到
如果您想自己传递时长(单位为秒),我们也提供了方法。
+ (void)logPageView:(NSString *)pageName seconds:(int)seconds;
5.按渠道自动更新检测
在网站上分渠道提交app的版本号,更新日志及openURL后,您只需添加一行代码来完成自动更新检查。
请将下面代码添加到[MobClick startWithAppkey:@"xxxxxxxxxxxxxxx"];
之后
[MobClick checkUpdate];
如果想对UIAlertView
的标题和按钮文字做多国语言支持,则需要对下面三个词组做翻译。
umUpdateTitle
:标题
umUpdateCancel
: 放弃按钮
umUpdateOK
: 确定按钮
当然您可以更简单的自定义标题和按钮的文字
[MobClick checkUpdate:@"New version" cancelButtonTitle:@"Skip" otherButtonTitles:@"Goto Store"];
如果默认的行为不满足你的需求,您可以完全自定义自动更新检查行为。只需实现
- (void)appUpdate:(NSDictionary *)appInfo;
这个delegate
方法。appInfo
是服务器传回来的app相关信息。
Xcode4有两个版本号,一个是Version
,另一个是Build
,对应于Info.plist的字段名分别为CFBundleShortVersionString
,CFBundleVersion
。 友盟SDK为了兼容Xcode3的工程,默认取的是Build
号,如果需要取Xcode4的Version
,可以使用下面 的方法。
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
[MobClick setAppVersion:version];
6.自定义事件案例
自定义事件用于追踪用户的行为,包括记录行为发生的次数、持续的时长以及该行为的具体细节。不同的需求可以采用不同的方式来跟踪。以音乐类应用为例,如果想监控music play(播放音乐)事件,那么
6.1.1. 跟踪播放音乐事件发生的总次数和平均每次启动该事件发生的次数,只需要下面一行代码:
[MobClick event:@"music_play"];
6.1.2 跟踪播放音乐事件发生的总时间:
在音乐播放开始的时调用:
[MobClick beginEvent:@"music_play"];
在音乐播放结束时调用:
[MobClick endEvent:@"music_play"];
6.1.3 播放音乐事件还有很多其它特征:比如所播放音乐的风格、表演者,用户播放音乐时的状态(登录或匿名)。了解这些细节需要下面的代码:
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
6.1.4 更进一步,您可以捕捉到每种状态的持续时间,比如每种风格的音乐播放了多久。您需要采用如下方法:
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
在音乐播放开始时调用:
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
[MobClick beginEvent:@"music" primarykey :(NSString *)keyName];
在音乐播放结束时调用:
[MobClick endEvent:@"music" primarykey :(NSString *)keyName];
媒体类应用都可以依照上面的方法去追踪事件,比如阅读文章、观看视频、播放音乐等。这样可以清楚地了解哪些作品有更高点击率、更长展示时间,以及更受用户喜欢,从而在内容选择和推荐上更有针对性。
再来看一个游戏案例:这是一个即时策略的塔防游戏,采用的是内置付费模式。
6.2.1. 首先,我们想观察玩家在每次过关时的状态,那么可以监控”user_status”这个事件。
NSDictionary *status = [NSDictionary dictionaryWithObjectsAndKeys:
这样,我们就会知道每次过关时,等级怎样,剩余多少金币,是否购买玩了多少次,玩了多少时间。从而了解玩家在哪一关的流失率较高,接下来应该重点去改善。
6.2.2. 进一步,我们可以验证关卡难度,即监控”player_dead”这个事件。
[MobClick event:@"player_dead" label:@"level"];
可以观察玩家在哪一关的死亡率最高,是否与上面流失率最高的关卡吻合,这样能判断关卡难度是否是造成流失的主要原因。如果是,我们可以通过降低关卡难度来让更多的玩家留在游戏中;如果不是,那么需要从其他方面入手,比如丰富游戏内容增加对玩家吸引力、加强对新手的引导环节等。
6.2.3. 购买监控道具购买是该游戏主要的收入模式,我们非常关心用户购买行为的发生次数,那么我们可以监控”purchase”这个事件:
[MobClick event:@"purchase"];
购买这个事件还有很多细节特征可以记录。比如,玩家是在哪些关购买的道具、购买道具的类型是什么、是否购买成功、购买道具时人物处于什么样的角色等等。您可以这么做:
NSDictionary *purchase = [NSDictionary dictionaryWithObjectsAndKeys:
知道了玩家更喜欢在哪几关购买道具,那么我们可以设法尽量让更多玩家到达那一关;知道了玩家喜欢什么样的道具,大概是什么样的功能和定价,那么我们可以考虑优化道具设计、适当促销,从而优化收益。
原文:http://blog.sina.com.cn/s/blog_a19a961b0101i823.html
MobClick详解的更多相关文章
- Linq之旅:Linq入门详解(Linq to Objects)
示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解
前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...
- Java 字符串格式化详解
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
- Android Notification 详解(一)——基本操作
Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...
- Android Notification 详解——基本操作
Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...
- Git初探--笔记整理和Git命令详解
几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
- Node.js npm 详解
一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...
随机推荐
- 【poj3264】 Balanced Lineup
http://poj.org/problem?id=3264 (题目链接) 题意 给出序列,求区间最大值-最小值 Solution 无修改,询问较多,ST表水一发. ST算法(Sparse Table ...
- Android成长日记-五大布局
1. 五布局之线性布局LinearLayout 特点:它包含的子控件将以横向或竖向的方式排列 ps:android:gravity=”center|bottom”(gravity允许多级联用) Tip ...
- phpize报cannot find autoconf
突然想往php种增加个模块,可是又不想重新编译php,因为真的比较费时间. phpize就可以解决这个问题. 遇到的问题: Configuring for: PHP Api Version: Zend ...
- Nginx research, nginx module development
catalog . 初探nginx架构 . handler模块 . Nginx编译.安装.配置 . Hello World模块开发 1. 初探nginx架构 nginx在启动后,在unix系统中会以d ...
- Cannot convert value of type [java.lang.String] to required type [java.util.Date] for property 'xxx': no matching editors or conversion strategy found
今天在完成项目的时候遇到了下面的异常信息: 04-Aug-2014 15:49:27.894 SEVERE [http-apr-8080-exec-5] org.apache.catalina.cor ...
- Oracle 应用于.NET平台
1. 回顾ADO.NET ADO.NET是一组用于和数据源进行交互的面向对象类库集,它存在于.Net Framework中.通常情况下,数据源可以是各种类型的数据库,利用ADO.NET可以访问目前几乎 ...
- JSTL的if-else表式
JSTL用法,这里不细讲了,主要是if-else的写法: 代码片段: <c:choose> <c:when test="${user.role eq 1 }"&g ...
- 【Beta】第三次任务发布
后端(补做) #86 了解社区新建文章.添加评论(回复)的机制.整理成API文档,包括如何请求新建文章.新建评论(回复).如何获取文章内容和评论内容. 验收条件:文档PM要能看懂. 前端(补做) #8 ...
- KEGG and Gene Ontology Mapping in Bioinformatic Method
使用KOBAS进行KEGG pathway和Gene Ontology分析 Article from Blog of Alfred-Feng http://blog.sina.com.cn/u/170 ...
- IIS------配置错误:不能在此路径中使用此配置节
转载: http://wenda.so.com/q/1414673956725716 因为 IIS 采用了更安全的 web.config 管理机制,默认情况下会锁住配置项不允许更改.运行命令行 %wi ...