前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Apple IDFA的开源项目——SimulateIDFA

基于Apple IDFA的开源项目——SimulateIDFA

作者头像
CSDN技术头条
发布2018-02-12 15:49:35
1.7K0
发布2018-02-12 15:49:35
举报
文章被收录于专栏:CSDN技术头条CSDN技术头条

什么是设备ID

设备ID是一个统称,只要符合设备ID这几个特点的设备参数都可以当做设备ID用,它的特点有三个:

  • 唯一,只标记一部设备;
  • 稳定,今天拿到设备ID是这个值,明天拿到也是这个值;
  • 同一设备上的所有App获取的值相同,这两个设备ID不匹配就不可能把两个数据整合在一起。

设备ID可用于统计用户新增、留存、活跃等。比如一个App在有米上投了一个广告,我们会通过匹配设备ID来得知这个App是从哪个渠道吸引过来的。设备ID对于基理数据来提供个性化服务的企业来说比较有价值,你要进行后面的数据化,根据用户的兴趣爱好推送一些他喜欢的广告,你必须能够标记到那个用户,如果没有用户系统就必须要用到设备ID,把一个设备ID是当成一个人的ID这样来匹配。

接下来看一下IOS系统上设备ID的登记,苹果有提供一个设备的ID叫UDID,它的意义就是唯一设备标识,像设备序列号,它的存储方法是把设备序列号、IMEI、WIFIMAC、Bluetoothmac做唯一标识,这个对于IOS系统来说是非常重要的ID,苹果用这个ID来进行服务,比如说你在App Store上下载一个App,会影响拉高这个App的排名。

有一些团队破解了App Store的下载流程,苹果在购买的时候要呈现一个设备ID,会把UDID记录在自己的数据库里,刷榜的人如果要模仿UDID必须要有这四个参数,苹果把这个跟后台数据匹配,如果不存在,这部分下载量就不会对榜单产生影响,在IOS5,苹果没有说哪个接口可以代替UDID,UDID是基于剪切法来共享的原理,后来发现UDID是存放在剪切版里的,也有人在找有什么比较好的方案,设定好每个Mac是唯一的,所以Mac也是设备ID,因为它唯一,而且很稳定,所以在IOS上面大家公认的方案就是用Mac。

IOS系统更新带来的设备ID变革

然后就到了IOS6系统,IOS6发布的时候,苹果官方出了一个IDFA的设备ID,叫广告标记ID,就是给广告服务商提供的设备ID,它有一个缺点:用户可以在手机的设置—通用—隐私功能里去还原这个设备,如果还原了,下次拿到的IDFA就是不一样的,没有那么稳定。苹果还推出了一个IDFV的标记,IDFV的意思就是给同一个开发者帐号用,同一个开发者帐号拿到的IDFA是一样的,不同的的开发者拿到的不同的数据库是不可以匹配的。

同一个App里拿到ID,前两个字段一样的话,就会认为是同一个开发者,同时还推出了一个限制广告追踪的协议,大家可以在手机的设置-隐私可以看到是否限制广告追踪,如果点击了限制广告追踪,你在使用IDFV的同时,必须要拿这个标记,看用户是否限制广告追踪,你不能拿IDFV来计算他的兴趣爱好,不能通过IDFV计算他可能对哪些广告感兴趣,这只是一个口头协议,并没有什么约束力,但是在IOS6上面还可以用,也没有被苹果禁止,采用方案跟IOS5方案一样。

当IOS7发布的时候,苹果做了两个限制,一个是IOS Mac地址获取不了,Open udid被限制,它限制了剪切板不能被各个App共享,但是IDFA的缺点比较致命,如果我想统计的一个用户把IDFA还原了,我们会以为是一个新增用户。为了弥补这个缺点,我们在IOS7以上采用的方案是把IDAF存放在keychain,keychain是每个APP都可以访问的,App卸载了,但是数据并不会清空,这个能弥补IDFA在稳定性上的缺点,因为如果你的keychain被卸载了,你再重新安装发现数据还在,可以判断这并不是新增用户,可以根据这两个结合来模拟一个比较理想的设备ID。IDFA的获取后面也做了一些限制,我们在2014年年初收到了很多开发者的反馈,他们拿了IDFA苹果拒绝他们上架,大家拿到了IDFA就会被展示一个差评,但是在审核的时候,把广告给展现出来,就会给你通过,通过以后再把这个差评给去掉。

我记得在4月初,苹果升级了IDFA后台,提交App的时候,会问你是否拿了IDFA?是否拿IDFA在App里放广告?是否用来投放广告?这样在审核的时候,苹果就不会拒绝你的App上架,以后我们都要用IDFA做设备的标记来弥补它的稳定性,在IOS7发布的时候,苹果又开启限制广告追踪,如果用户开了限制广告追踪,你就拿不到IDFA,拿不到设备ID的,每个ID拿到的IDFA是一样的,投放广告的时候可以知道是来自于哪个渠道,如果拿不到就不知道是哪个渠道投放,而且开启这个功能的用户可能是20%,20%已经是比较大量的用户了,出了这个之后,我们就研究有没有替换IDFA的方案,就有了SimulatIDFA。

SimulateIDFA如何实现唯一性

SimulateIDFA会生成一个ID,让每一个拿到的ID是同一个值,实现这个分好几步:首先让系统共有ID尽可能的满足这个用户,然后看一下是不是每个App拿的设备参数都相同,设备参数是不是可以标记一定范围的设备,然后再区分这些设备ID,如果有一个系统变量改变了,可能就会把收集的这些参数用来组合,稳定了之后,用来计算后16位。

SimulateIDFA前16位计算的参数有:系统版本、硬件型号、运营商信息、硬盘容量、核心文件创建、修改时间,后16位计算的参数有:系统开机时间、国家代码、系统语言、设备名称。

每一个参数所有的可能情况,举一个最坏的情况下看一下它的唯一性。某一天苹果发布一个新系统,假设某一个国家有1000万台相同型号的设备升级到这个系统,这样会产生碰撞值的可能性如上图。比方说你想精确定位某一个设备A,假设设备A的值为K,那在这1000万台设备里和A一样值的概率就是最后那个,这就是SimulateIDFA的唯一性。

任何一个参数改变,SimulateIDFA都会改变,通过这些参数组合一个值,那里面刚才参数的任何一个改变都会导致它的改变,弥补这个缺点可以跟弥补IDFA的方案一样,把IDFA放在Keychain里面看它的稳定性。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CSDN技术头条 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档