全⾯解读iOS14ATT和SKAdNetwork
仙剑奇侠传三片头曲
编辑导语:在今年的苹果开发者⼤会上,苹果发布了iOS 14等软件的更新,并且特别强调iOS14将⽀持AppTrackingTransparency(简称ATT)和SKAdNetwork。本⽂作者从这⼀消息出发,对 iOS 14 ATT和SKAdNetwork展开了全⾯解读,与⼤家分享。
在2020年的WWDC20上,Apple发布了iOS14,并且特别强调iOS14将⽀持AppTrackingTransparency(简称ATT)和SKAdNetwork,看似微⼩的更新,对互联⽹⼴告⾏业的影响则是7.0地震级的。
ATT的更新使开发者获取⽤户的IDFA需要弹窗并经过⽤户的同意,提⾼了⽤户隐私透明度。⽽根据历史经验,⾄少40%的⽤户不会同意,更不⽤说权限申请弹窗上还要提⽰为了向⽤户提供更精准的⼴告推荐。当然,某些APP会让⽤户必须同意授权IDFA,否则不提供服务,这种容易被Apple以⽤户歧视的理
由下架,更不可取。⽬前,iOS上的⼴告⽣态中从定向到归因都是基于IDFA之上,影响⾯可想⽽知。
SKAdNetwork2.0是由1.0升级⽽来,以解决上⽂中提出的IDFA带来的安装转化归因问题。简单来说,⼴告平台需要注册成为Apple的⼀个⼴告⽹络并提供⼀个回调地址,当⽤户通过此⼴告⽹络的⼴告下载并打开了⼴告主的APP之后,Apple会把安装等信息传到回调地址。整个流程中有很多细节问题,具体看下⽂。
ATT和SKAdNetwork2.0的更新,不仅代表着Apple更注重⽤户隐私透明度,也代表着Apple开始插⼿⼴告归因,想作为应⽤商店在⼴告归因中分⼀杯羹,并为未来更⼤的⼴告业务做准备。
先说影响⾯:
此次更新,主要影响的是通过设备号跟外部进⾏交互的事物上,包括以下:
1.安装和转化归因,在获取不到IDFA时要有新的⽅案,例如SKAdNetwork
2.0;
2.⼴告主要更注意归因延迟深度链接,⼴告主基于IDFA⼴告点击的延迟深度链接⽅案不可⾏,要有其他⽅案
3.APP拉新时,已安装⽤户的判断在获取不到IDFA时要有新的⽅案,⽤Apple提供的⽅法去查询是否安装某个APP
4.APP拉活、⽼客唤醒时,基于IDFA的⽤户定位⽅案也不再是主流,在获取不到IDFA时要有新的⽅案
再说ATT和SKAdNetwork2.0结论:
1.通过读取签名中的⼴告展⽰ID,⼴告平台仍然可将安装和转化归到某⼀次⼴告展⽰中
门女主角
2.安装和转化回传的实时性⼤⼤降低,会延迟1天到64天之间,且最多传64种转化,转化价值⽆法回传
3.Apple未说明具体归因逻辑、时长和周期,且给⼴告主的信息⼏乎为零,未说明如何杜绝⼴告平台作弊
4.未提供除了IDFA以外其他定向⽅案
5.依赖于点击监测和IDFA的延迟深度链接不可实现
6.⽤户禁⽌APP访问IDFA的概率较⾼最后提出⼏种解决⽅案:
通⽤id⽅案Id Mapping ⽅案IDFA+IDFV加密⽅案
01 ATT
孟美岐ATT全名是AppTrackingTransparency,是Apple为提⾼⽤户隐私透明度提供的解决⽅案,获取IDFA也要符合ATT的要求。⽬前IDFA需要申请的场景,包括但不限于精准⼴告推荐、与数据第三⽅共享设备位置、与⼴告⽹络共享ID来定位或者lookalike、应⽤中放置⼀个第三⽅SDK⽤于第三⽅⼴告⽹络定向。很明显,Apple不希望IDFA未经⽤户允许就⽤于任何的⼴告定向。
此外,Apple还说有两种情况下,可以跟踪⽤户且不需要获取⽤户许可:
当您的应⽤程序中的员⼯或设备数据仅连接到⽤户设备上的第三⽅数据,并且不会以可识别⽤户或设备的⽅式从设备发送出去与您共享数据的数据代理仅将数据⽤于欺诈检测,预防欺诈或安全⽬的,并且仅代表您使⽤。例如,仅使⽤数据代理来防⽌信⽤卡欺诈。这两种情况Apple单独说出来蛮奇怪的,Apple如何能够保证开发者是按照所述要求进⾏的,⽽⾮serve to serve来实现Apple不允许的。如果单从这两种特殊情况来说,对Apple的ATT执⾏⼒度是存疑的。
02 SKAdNetwork2.0
SKAdNetwork2.0的整体流程⽐ATT复杂⼀些,涉及到的⾓⾊也较多,它其实是Apple针对⾮IDFA的安
装和转化归因的整体⽅案,是要⼴告平台、⼴告主、媒体共同参与才能够实现的。此外,SKAdNetwork2.0是由1.0迭代⽽来的,1.0⽤的⼈很少,2.0增加了⼀些参数和接⼝。
SKAdNetwork2.0的主要流程
上图毕竟只是个流程,看不出来⼀些细节问题,例如能否把安装归因到某⼀次曝光?具体各个⾓⾊都要做什么⼯作?⼴告⽹络能否知道转化的产⽣时间?接下来我们对流程中的每个节点⽤到的⽅法、参数等进⾏详细梳理,才能解决上述问题。
SKAdNetwork2.0的交互流程
1. ⼴告平台去Apple中注册成为⼀个⼴告⽹络,拥有⼀个⼴告⽹络id。除了id以外,有公钥和私钥⼀对,⽤以解密Apple在⽤户安装后回传的信息,公钥要发送给Apple,私钥⾃⾏保存。还要提供⼀个URL,⽤以接收SKAdNetwork安装验签回发请求。
2. ⼴告平台向媒体提供带签名的⼴告。签名是整个SKAdNetwork2.0关键点。
如何⽣成签名?
⾸先,⼴告平台要根据所使⽤的SKAdNetwork版本来选择参数,若是2.0,则拥有以下参数可供选择,版本是指⽀持的版本:
SKStoreProductParameterAdNetworkVersion版本2.0。使⽤API版本值“ 2.0”。SKStoreProductParameterAdNetworkIdentifier版本1.0和2.0。在Apple上注册的⼴告⽹络id。SKStoreProductParameterAdNetworkCampaignIdentifier版本1.0和2.0。⼴告系列编号。SKStoreProductParameterITunesItemIdentifier版本1.0和2.0。⼴告主APP的App Store ID,即itunes-item-id。SKStoreProductParameterAdNetworkNonce版本1.0和2.0。是种UUID,是代表每次⼴告展⽰的唯⼀值。签名中使⽤的该随机数的字符串表⽰形式必须为⼩写。SKStoreProductParameterAdNetworkSourceAppStoreIdentifier版本2.0。媒体APP的应⽤商店ID。如图source-app-id中的清单3。SKStoreProductParameterAdNetworkTimestamp版本1.0和2.0。代表⼴
告展⽰时间其次,⼴告平台对参数和值按照Apple要求进⾏合并,合并成⼀条字符串。
然后,⼴告平台⽤密钥和Apple提供的算法对合并的字符串加密签名。
最后,将拥有应⽤调⽤和启动验签所需的所有必需的“ ⼴告⽹络安装验签签名”值。把签名放⼊⼴告中,并把⼴告推给媒体,因此⼴告⽹络提供给媒体的API或者SDK都要改动。
3. 媒体在应⽤中配置⼴告⽹络id。媒体要在⼀个⽂件中把需要⽀持的⼴告⽹络id填⼊,此⽂件⽀持多个⼴告⽹络id,若某⼴告⽹络id不在此⽂件中,则不会对此⼴告⽹络id启动安装验签。
4. 媒体APP显⽰⼴告平台提供的带签名的⼴告。当⽤户在媒体APP上点击⼴告时,媒体APP调⽤App Store视图并代⼊⼴告⽹络提供的签名和验签信息,这样Apple才能知道调起App Store的签名,并把签名带到下⼀个流程中去。
5. ⽤户下载安装⼴告主APP。
6. ⽤户打开⼴告主APP时,⼴告主APP要调⽤应⽤安装验签信息⽅法。⽅法是registerAppForAdNetworkAttribution,调⽤或者⾸次启动时使⽤,⽆需填⼊其他任何参数,相当于⼴告主告诉Apple说这⼈打开了我的APP了。Apple会等待⼴告主APP24⼩时,若24⼩时内⼴告主APP未进⼊到下个流程,Apple会在之后的24⼩时之中的随机时间点向⼴告平台发起回调,随机时间点也是
为了⽤户隐私吧。PS:其实不需要⼴告主调⽤,Apple应该也知道这⼀次的打开,可能有技术上的难题。
7. ⽤户在⼴告主APP上产⽣转化,⼴告主APP要调⽤更新转化值⽅法。⽅法是updateConversionValue(_:),在产⽣转化时使⽤,需要传⼀个int值,6-bit,相当于0-63中的某个值,调⽤此⽅法后Apple回调的时间会推迟24⼩时。此⽅法可多次调⽤,但是距离上⼀次调⽤安装(registerAppForAdNetworkAttribution)或转化(updateConversionValue(_:))不能超过24⼩时,因为超过24⼩时的话Apple就会发起回调了。多次调⽤时,后⼀次的Value要⽐前⼀次的⼤,否则相当于不⽣效。因此最多会导致64次调⽤后才会回传给⼴告平台信息。
我认为ConversionValue更像是转化id⽽⾮转化价值,⼴告主可以基于⾃⾝漏⽃设计最多64个转化,⽬前在SKAdNetwork2.0中并不存在转化价值这个参数。
8. Apple把安装和转化信息发送给⼴告平台注册时填写的URL上。此时就涉及到如何归因,可惜这⽅⾯Apple在⽂档中没有说得很清楚,例如⽤户看了两个⼴告⽹络⼴告后,在点击后⼀个⼴告去安装⼴告主APP,此时安装信息的发送逻辑,类似问题还有很多。
王新军个人资料图片9. ⼴告平台验签收到的安装和转化信息。此时⼴告平台要⽀持两种版本的安装和转化信息验签,且只能通过收到的信息中的参数与解密后的签名相验签。⽣成签名时,⽤私钥去加密;收到签名后,⽤公
钥去验签和解密。具体参数如下:
version版本2.0。与匹配的⼴告⽹络验签API的版本。SKStoreProductParameterAdNetworkVersionad-network-id版本1.0和2.0。⼴告⽹络idSKStoreProductParameterAdNetworkIdentifiertransaction-id版本1.0和2.0。此验签的唯⼀值;⽤于对安装验签消息进⾏重复数据删除。campaign-id版本1.0和2.0。展⽰⼴告时提供的与匹配的⼴告系列ID 。SKStoreProductParameterAdNetworkCampaignIdentifierapp-id版本1.0和2.0。⼴告主的APPidattribution-signature版本1.0和2.0。要验签的Apple的署名签名。redownload版本2.0。⼀个布尔值,指⽰值为1时⽤户重新下载并重新安装了该应⽤程序。source-
app-id版本2.0。媒体的APPid。注意:仅当提供的参数满⾜Apple的隐私阈值时,才会显⽰。SKStoreProductParameterAdNetworkSourceAppStoreIdentifiersource-appidconversion-value版本2.0。转化id,已安装的应⽤程序通过调⽤提供的⽆符号6位值。注意:仅当已安装的应⽤程序提供该参数并且提供的参数满⾜Apple的隐私规则时,才会显⽰。updateConversionValue(_:)conversio上述参数中,核⼼是attribution-signature签名,若签名被篡改或者⾮此⼴告平台的,就会验签失败。通过公钥对签名进⾏验签和解密后,就可以得到⼴告平台带⼊的签名加密前的字符串,⽽字符串中包含了⼴告展⽰ID,即可将安装转化与⼴告展⽰ID关联起来。(此处很关键,建议实际验证或者Apple确认)此外,还可⽤⾮签名的参数跟签名内的字符串的参数核对,若有冲突即可舍弃此次回传。
03 疑问点
1. 归因相关
Apple是否涉及到归因?归因运算逻辑?归因时间周期?点击⼴告后没有下载,在中途没有点击其他任何⼴告,⽤户⾃⾏去APP STORE 下载,归因怎么算?先看A⼴告点击跳转到AppStore,再看B⼴告并点击跳转到AppStore,传的是A还是B?
2. 参数相关
redownload 1和0的具体判断逻辑是什么?⼴告主APP版本跟redownload有啥关系?conversion-value 转化价值的建议⽤法是什么?说要满⾜的隐私规则是什么?
3. 签名相关
在正常情况下,⼴告⽹络在⽣成签名时候的签名,跟安装回传中的签名是否⼀致?若是,则⼴告⽹络是否要根据解密后的签名和其他参数作对⽐?若是,则可以通过⼴告展⽰的uuid把安装和曝光关联起来?若是,则有了⼴告展⽰的UUID,campaignid还有什么⽤?
兵马俑的介绍资料
4. 反作弊相关
通过什么渠道向⼴告主提供了哪些信息?整套机制是否能有效防⽌媒体或者⼴告平台作弊?若是,则整套机制为什么能防⽌?
04 解决⽅案
1. 通⽤id⽅案
这种⽅案本质上是寻IDFA的替代品,要根据媒体、⼴告平台、⼴告主都能拿到的设备或⽤户数据,根据这些数据和制定规则去⽣成⼀个IDFA的替代品”某某ID”。难点有两个,唯⼀性和多⽅认可。要有普遍的唯⼀性,是作为⼀个ID的必备能⼒。⽽且此⽅案要受到多⽅认可,才能够真正对外使⽤,否则只是另⼀个IDFV。
康熙来了高以翔林志玲
2. Id Mapping⽅案
这种⽅案本质上类似PC WEB的cookie mapping,通过⼴告平台的ID和⼴告主的ID Mapping,来解决IDFA的问题。难点也有两个,如何mapping和如何提⾼mapping浓度。我有个⽅案是在A APP调起/唤醒B APP时进⾏mapping,但是mapping是要涵盖拉新、拉活等多种场景的,我这种⽅案只能解决拉活,⽽且mapping浓度也⽆法保证。
3. IDFA+IDFV加密⽅案
这种⽅案是adjust提出来的,本质上就是看Apple能不能睁⼀眼闭⼀眼。⾸先,在⼴告主端的对⼴告主的IDFA和IDFV组成⼀个hash。然后,把这个hash和⼴告主的IDFV传到媒体APP客户端上。其次,在媒体本地上⽤媒体的IDFA和⼴告主的IDFV组成⼀个hash。最后,在媒体本地⽐较这两个hash是否⼀致。此⽅案就是⽤到了上⽂ATT标蓝的内容,认为这种⽅案不会以可识别的⽅式把IDFA发出去。Apple是否认为这种⽅案就是符合隐私要求的,这是要打个问号的。
总之,Apple的⼩改动对于整个iOS不算什么,但是在互联⽹⼴告中掀起了狂风骇浪,到⽬前也没有业内达成共识的解决⽅案。ATT和SKAdNetwork2.0的推出,确实对⽤户隐私是利好,但是也会助长以头部综合⼴告平台为代表的围墙花园态势。经此⼀役,⼤家⼜回到同⼀个起跑线上,有风险就有机遇,希望同⾏同业能够⼀起⾯对。