一、自定义事件
自定义事件可以实现在应用程序中埋点来统计用户的点击行为,比如:统计用户的点击事件,统计用户都点击了什么;统计用户搜索的关键字,看用户都偏好什么产品等等。自定义事件目前包括:计数事件和计算事件。
计数事件:计数事件统计事件的发生次数、独立用户数、事件时长及事件各参数的发生次数、时长。
程序中的某些事件,如登录、分享、下载等,是定性变量(categorical variable),对应的统计项是字符串类型。开发者只需了解它们发生的次数及独立用户数,使用计数事件即可满足。
计算事件:还有一些事件,如支付金额、内容浏览数量等是连续变量,对应的统计项是数值类型。开发者需要查看这些事件的数值分布特征,这就需要使用计算事件。
计算事件可以解决的一些问题:
(1)对某个参数值求和
(2)计算某个参数值的单次均值及单用户均值
(3)近似得到某个参数值的概率分布函数[1]
(4)近似得到某个参数值的累计分布函数[2]
二、使用计数事件
1.了解计数事件的基本概念
事件ID是事件的标识,必须先在友盟后台进行创建,在代码中发送事件数据时,事件ID必须和后台一致。
事件ID不能使用特殊字符和ID、ts、du字段,并且长度在128字节内。
应用最多可以自定义500个事件(事件ID),每个事件最后又10个key,每个key最多1000g个取值。
2.创建事件ID
注意:
①事件ID是事件的标识,所以是唯一的,事件名称是事件ID的解释,方便理解。
②一些定性的操作,比如:登录次数、搜索次数、注册次数、进入购物车次数等,这些用计数事件;但是搜索关键词、账单金额等,这些信息是不确定的,有变化的取值,用计算事件。
3.集成计数事件
①统计事件的发生次数
调用下面的方法发送数据
MobclickAgent.onEvent(Context context, String eventId);
参数2:事件ID必须和后台设置的保持一致
例子:统计用户登录的次数:
MobclickAgent.onEvent(LoginActivity.this, "login");
②统计点击行为的各属性发生次数
MobclickAgent.onEvent(Context context, String eventId, HashMap<String,String> map);
例子:统计添加到购物车的产品
HashMap<String,String> map = new HashMap<String,String>();
map.put("category","Gadgets");
map.put("sku",""+1225);
map.put("price","$12.89");
MobclickAgent.onEvent(mContext, "add to cart", map);
三、使用计算事件
1.配置
友盟后台添加事件,配置为计算事件,方式和技术事件一样。
2.统计数值型变量的值的分布
统计一个数值类型的连续变量,该变量必须为整数,用户每次触发的数值的分布情况,如时间持续时间、每次付款金额等。
3.统计方法
MobclickAgent.onEventValue(Context context, String id, Map<String,String> m, int du)
参数2:事件ID
参数3:事件的属性和取值
参数4:事件的数值,取值范围:-2,147,483,648~+2,147,483,677之间的有符号整数,即int 32类型。如果超出了范围,会造成数据包丢失。
4.例子分析
友盟示例:统计一次音乐播放,包括音乐类型、作者、时长,可以在音乐播放结束后调用。
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);
四、在webview中统计事件
1.概念
所谓在webview中统计事件,指的是如果项目中的某个页面使用了webview,并嵌入了html/js代码,并且希望统计html中的点击事件。
2.使用步骤
①实现MobclickAgentJSInterface接口。
这个接口是友盟提供的,有两种形式:
如果实例化了WebChromeClient接口
public MobclickAgentJSInterface(Context context, WebView webview, WebChromeClient client)
如果没有实例化该接口
public MobclickAgentJSInterface(Context context, WebView webview)
②初始化接口实现类的对象
WebView webview = (WebView) findViewById(R.id.webview);
new MobclickAgentJSInterface(Context, webview);
做完上面2步,其实Android端页面的代码已经集成好了,现在需要做的是在HTML/JS页面中添加点击事件,当用户点击连接的时候,相应JS中的方法,发送数据到友盟。
③在js页面中添加2个方法
<script type="text/javascript">
function onEvent(tag, label, duration) {
prompt("event", JSON.stringify({tag:tag,label:label, duration:duration}));
}
function onKVEvent(tag, map, duration) {
map.id = tag;
map.duration = duration;
prompt("ekv", JSON.stringify( map ));
}
</script>
④在html页面中设置点击事件
这里相应的事件是自己添加的事件。
<a onClick="onEvent(‘click‘)"> SimpleEvent</a>
<a onClick="onEvent(‘click‘,‘button‘)"> EventWithLabel </a>
<a onClick="onEvent(‘play‘,‘music‘,123)"> EventWithLabelAndDuration </a>
<a onClick="onEvent(‘play‘,‘‘,123)"> EventWithDuration </a>
<a onClick="onKVEvent(‘buy‘,{‘item‘:‘gun‘})"> KVEvent </a>
<a onClick="onKVEvent(‘play‘,{‘music‘:‘blue‘}, 123)"> KVEventWithDuration </a>
这里的点击事件和JAVA接口有如下对应关系
//tag 传入字符串
onEvent(tag) -> MobclickAgent.onEvent(Context context, String tag);
// tag ,label 传入字符串onEvent(tag, label)-> MobclickAgent.onEvent(Context context, String tag, String label);
// tag 传入字符串, 第二个变量 传入空字符串, du 传入 数值类型
onEvent(tag, ‘‘, du) -> MobclickAgent.onEvent(Context context, long duration); // tag, label 传入字符串, du 传入数值类型 onEvent(tag, label, du) -> MobclickAgent.onEvent(Context context, String tag, String label, long du); // id 传入字符串, 第二个参数传入 js 对象eg:{‘item‘:‘gun‘,‘type‘:‘weapon‘} onKVEvent(id, {} ) -> MobclickAgent.onEvent(Context context, HashMap map); // id 传入字符串, 第二个参数传入 js 对象eg:{‘item‘:‘gun‘,‘type‘:‘weapon‘}, du 传入 数值类型 onKVEvent(id, {} , du) -> MobclickAgent.onEvent(Context context, HashMap map, long du);
3.原理分析
在java代码中,通过实例化接口对象,开启了WebView事件统计功能,具体发送数据由html/js来完成。
html/js通过为点击事件响应友盟提供的方法,进行数据的发送工作。在js提供的方法中,最后都会调用prompt()方法进行数据的发送,友盟拦截到数据后,进行统计处理。
五、在线参数
略
六、错误统计
友盟sdk在V4.6版本之后开始内部集成了错误统计,自动发送错误信息到友盟服务器,不需要开发者去集成。
sdk通过Thread.UncaughtExceptionHandler捕获程序崩溃日志,并在程序瑕疵启动的时候发送到友盟服务器。友盟的数据统计都是在下一次启动的时候,发送上一次整个过程中的各种统计数据到友盟服务器。
如果开发者想要自己捕获错误信息,手动发送到友盟服务器,可以调用下的方法:
public static void reportError(Context context, String error)
//或
public static void reportError(Context context, Throwable e)
七、社交统计
1.概念
社交统计:所谓社交统计就是针对社交行为的垂直统计,可以非常详尽的统计应用中发生的各种社交行为。只需要调用一行代码,就可以获得数据丰富的社交用户分析报表。
2.使用方法
比如:分享产品到新浪微博,调用下面的代码
UMPlatformData platform = new UMPlatformData(UMedia.SINA_WEIBO, "user_id");
platform.setGender(GENDER.MALE); //optional
platform.setWeiboId("weiboId"); //optional
MobclickAgent.onSocialEvent(this, platform);
参数说明:
UMeida meida
平台枚举类型(必填)
String usid
用户的id(必填)
String weiboId
微博id
String name
用户姓名
GENDER gender
用户性别
八、其它数据统计API
1.MobclickAgent.setAutoLocation(boolean enable)
设置是否允许收集地理位置信息 (默认true)
2.MobclickAgent.setOpenGLContext(GL10 gl)
设置openGL
信息,辅助统计GPU 信息
3.MobclickAgent.onKillProcess(Context
如果开发者调用
context)Process.kill
或者System.exit
之类的方法杀死进程,请务必在此之前调用此方法,用来保存统计数据。