分享丨陈建峰(有米科技研发经理)
整理丨白及
即刻扫码,畅享又拍云年终充值大优惠!
12月17日,又拍云Open Talk再次入驻广州。此次活动Open Talk邀请了有米科技(834156.SZ)技术团队的4位大咖探讨技术领导力、大数据和用户画像、在线业务扩容的技术选型等话题。
关于有米科技
有米科技成立于2010年4月,是全球卓越的综合性移动互联网企业。经过6年的发展,有米科技已完成“一横多纵”的业务布局。
目前有米科技广告板块业务包括国内广告平台“有米广告”、海外广告平台“Adxmi”以及社会化媒体营销平台“米汇”。通过海量的媒体数据积累和创新的广告投放技术,致力于为广告主提供精准的产品推广和品牌营销服务,为合作伙伴创造收益。
今天小拍给大家整理了有米科技研发经理陈建锋分享的《基于Apple IDFA的开源项目——有米SimulateIDFA》,内容请见下文~
大家好,今天给大家带来的是IDFA替代方案的分享,IDFA是什么东西?这是一个设备ID,我先从设备ID开始介绍。
什么是设备ID?
设备ID是一个统称,只要符合设备ID这几个特点的设备参数都可以当做设备ID用,它的特点有三个:
唯一,只标记一部设备;
稳定,今天拿到设备ID是这个值,明天拿到也是这个值;
同一设备上的所有App获取的值相同,这两个设备ID不匹配就不可能把两个数据整合在一起。
设备ID可用于统计用户新增、留存、活跃等。比如一个App在有米上投了一个广告,我们会通过匹配设备ID来得知这个App是从哪个渠道吸引过来的。设备ID对于基理数据来提供个性化服务的企业来说比较有价值,你要进行后面的数据化,根据用户的兴趣爱好推送一些他喜欢的广告,你必须能够标记到那个用户,如果没有用户系统就必须要用到设备ID,把一个设备ID是当成一个人的ID这样来匹配。
UDID(Unique Device Identifier)唯一设备标志
UDID=SHA1(serial + IMEI + wifiMAC + bluetoothMAC)
接下来看一下iOS系统上设备ID的登记,苹果有提供一个设备的ID叫UDID,它的意义就是唯一设备标识,像设备序列号,它的存储方法是把设备序列号、IMEI、WIFIMAC、Bluetoothmac做唯一标识,这个对于iOS系统来说是非常重要的ID,苹果用这个ID来进行服务,比如说你在App Store上下载一个App,会影响拉高这个App的排名。
有一些团队破解了AppStore的下载流程,苹果在购买的时候要呈现一个设备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位计算的参数有:系统开机时间、国家代码、系统语言、设备名称。
SimulateIDFA的唯一性:
在最坏的情况下SimulateIDFA生成方案的唯一性表现:
假设一个情况,一天内某个国家有10000000(1千万)台相同型号的设备升级到同一个系统。
核心文件创建/修改时间:24*3600
设备开机时间:1(时间精确到天,没精确到秒)
系统版本:1
硬件型号:1
运营商信息:10
文件系统大小(NSFileSystemSize):10000000
国家代码:1
系统语言:1
设备名称:9000000(设备名称范围,这里假设的是每10台就有2个重复,名称范围就是10000000*0.9)
这些组合的所有可能值为:
24*3600*10*10000000*9000000=77760000000000000000
假设设备a的SIDFA为K,设备b的SIDFA为K的可能性为1/ 77760000000000000000。
这10000000台设备中,可能有另外的设备值为K的可能性为:
77760000000000000000*10000000 = 1/7776000000000。
每一个参数所有的可能情况,举一个最坏的情况下看一下它的唯一性。某一天苹果发布一个新系统,假设某一个国家有1000万台相同型号的设备升级到这个系统,这样会产生碰撞值的可能性如上图。比方说你想精确定位某一个设备A,假设设备A的值为K,那在这1000万台设备里和A一样值的概率就是最后那个,这就是SimulateIDFA的唯一性。
任何一个参数改变,SimulateIDFA都会改变,通过这些参数组合一个值,那里面刚才参数的任何一个改变都会导致它的改变,弥补这个缺点可以跟弥补IDFA的方案一样,把IDFA放在Keychain里面看它的稳定性。
这就是我要分享的内容,谢谢大家!
关于Open Talk
又拍云Open Talk是又拍云在2014年启动的开放式主题分享沙龙,每月一期。
Open Talk秉承了又拍云帮助企业提升发展速度的初衷,组织资深、一线的工程师,用全干货分享的形态,为互联网从业人员呈现先进的IT技术、理念、解决方案,帮助与会者不断提升自身的专业技能,推动企业更快发展。
嗯哼,恭喜你看到了文末,小拍有福利要送上!
又拍云联合付钱拉、个推、兑吧、Worktile等在企业服务厂商,推出“申猴酉机大礼包”!其中又拍云 送出价值3000元的代金券(仅限新用户)哦~
赶紧扫码申请“申猴酉机大礼包”!