填坑记(一)怎么判断唯一设备

作者: 小言言爱学习 | 来源:发表于2015-11-27 13:33 被阅读541次

    小言毕业后就在某通讯企业的新兴互联部门做产品。我司是卖手机等移动设备的,国内销量不忍直视,国外出货量还是很大的,算是国际化颇为成功的手机厂商了。
    我们的工作是为公司生产的应用提供数据统计和分析的,用有Big的话说是做大数据平台的。
    数据统计里有一个重要的指标。

    活跃用户: 在所选时间段内,启动过至少一次的用户。

    乍一看是没啥问题,很简单一个概念嘛。日活月活什么的,算是数据分析最基础的部分了。
    但这里就有一个很关键的问题

    用什么来判断这是一个用户呢?

    在web网站上,我们有UV(****unique visitor****)的概念。UV是指访问网站的独立用户,可以理解为多少人访问了咱的网站。其判断用户的标准是IP,每个IP代表了一个独立用户。

    但在移动端,手机的IP地址是随着区域不断变化的,我们并不能用一个变化频繁的东西来判断用户。

    我们的数据平台1.0版本,使用的是手机网卡的MAC地址。这是网卡的身份证号,是一个固有的属性。
    从其定义上讲,我们完全可以用MAC来标记用户,事实上我们就是这么干的。

    但在1.1版本的迭代中,通过对比同一个应用在友盟上的数据,发现我们统计的活跃用户数,总是少于友盟的。
    友盟是市面上颇为成熟的统计产品了,出现这种数据差异,很大原因是我们的问题。

    调查后发现,友盟使用了自己友盟ID方案,来标识用户,这个友盟ID是基于IMEI号的。

    IMEI: 移动设备国际身份码,是手机的唯一识别号码。

    又经过调查发现,单纯使用IMEI号可能产生如下问题:

    1. 很多山寨机使用相同的IMEI号。
    2. 双卡双待手机会有两个IMEI号。(不过这个可以通过只读取主卡的号来解决)

    而使用MAC地址会更惨:

    1. 很多山寨机的MAC地址也是相同的。
    2. 不少机型在重启后,会随机生成一个新的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里,具体效果如何,日后再说咯。

    相关文章

      网友评论

      • 923c2e9f6fba:看似最后个办法貌似完美了,但我有个疑问,后端存储的时候,是三个ID取其中一个放一个字段,还是每个用户都有三个字段来存对应值?还有,会不会出现这种情况,用户a第一次取到了IMEI,重启有了Mac,OK新用户。第三次重启,有了Android id,ok新用户。但实际对应的是同一个用户,数据失真。
        923c2e9f6fba:@小言言爱学习 感谢回复。
        不知道你们的应用场景哈,仅仅说下我的看法。如果只是一个字段存,那反过来说极端情况下其实需要遍历判断三次,如果在高频访问情况下,这样可能还是有耗时的风险。
        小言言爱学习:@zzcv 我们现在后台只用一个字段来标识。现在所有的方案,都不敢说没有失真,没有完美的解决方案,只能说尽量缩小差异。

      本文标题:填坑记(一)怎么判断唯一设备

      本文链接:https://www.haomeiwen.com/subject/fxrdhttx.html