小言毕业后就在某通讯企业的新兴互联部门做产品。我司是卖手机等移动设备的,国内销量不忍直视,国外出货量还是很大的,算是国际化颇为成功的手机厂商了。
我们的工作是为公司生产的应用提供数据统计和分析的,用有Big的话说是做大数据平台的。
数据统计里有一个重要的指标。
活跃用户: 在所选时间段内,启动过至少一次的用户。
乍一看是没啥问题,很简单一个概念嘛。日活月活什么的,算是数据分析最基础的部分了。
但这里就有一个很关键的问题
用什么来判断这是一个用户呢?
在web网站上,我们有UV(****unique visitor****)的概念。UV是指访问网站的独立用户,可以理解为多少人访问了咱的网站。其判断用户的标准是IP,每个IP代表了一个独立用户。
但在移动端,手机的IP地址是随着区域不断变化的,我们并不能用一个变化频繁的东西来判断用户。
我们的数据平台1.0版本,使用的是手机网卡的MAC地址。这是网卡的身份证号,是一个固有的属性。
从其定义上讲,我们完全可以用MAC来标记用户,事实上我们就是这么干的。
但在1.1版本的迭代中,通过对比同一个应用在友盟上的数据,发现我们统计的活跃用户数,总是少于友盟的。
友盟是市面上颇为成熟的统计产品了,出现这种数据差异,很大原因是我们的问题。
调查后发现,友盟使用了自己友盟ID方案,来标识用户,这个友盟ID是基于IMEI号的。
IMEI: 移动设备国际身份码,是手机的唯一识别号码。
又经过调查发现,单纯使用IMEI号可能产生如下问题:
- 很多山寨机使用相同的IMEI号。
- 双卡双待手机会有两个IMEI号。(不过这个可以通过只读取主卡的号来解决)
而使用MAC地址会更惨:
- 很多山寨机的MAC地址也是相同的。
- 不少机型在重启后,会随机生成一个新的MAC地址(http://blog.umeng.com/uncategorized/3991.html)
衡量一番后,使用IMEI号更靠谱。但这有个问题。
平板木有imei号呀
我们不仅要统计手机上的应用,还要统计平板上的应用,如果只使用IMEI号的话,无法两者兼顾。
但有一个东西是两者都有的——Android系统。
在第一次开机启动的时候,Android系统会自动生成一个Android ID。但在主流厂商生产的设备上,有一个很经常的bug,就是每个设备都会产生相同的ANDROID_ID:9774d56d682e549c。
幸运的是,有一个算法可以规避这个BUG。
取Android ID,取不到就取IMEI号,再取不到就取MAC地址,前三者都取不到的话,就用算法生成一个UUID.
我们现在使用了上面这个策略,来标示独立设备。不过新的SDK还没有集成到app里,具体效果如何,日后再说咯。