全面解讀 iOS 14 ATT和SKAdNetwork
編輯導(dǎo)語(yǔ):在今年的蘋果開(kāi)發(fā)者大會(huì)上,蘋果發(fā)布了iOS 14等軟件的更新,并且特別強(qiáng)調(diào)iOS14將支持AppTrackingTransparency(簡(jiǎn)稱ATT)和SKAdNetwork。本文作者從這一消息出發(fā),對(duì)?iOS 14 ATT和SKAdNetwork展開(kāi)了全面解讀,與大家分享。
在2020年的WWDC20上,Apple發(fā)布了iOS14,并且特別強(qiáng)調(diào)iOS14將支持AppTrackingTransparency(簡(jiǎn)稱ATT)和SKAdNetwork,看似微小的更新,對(duì)互聯(lián)網(wǎng)廣告行業(yè)的影響則是7.0地震級(jí)的。
ATT的更新使開(kāi)發(fā)者獲取用戶的IDFA需要彈窗并經(jīng)過(guò)用戶的同意,提高了用戶隱私透明度。而根據(jù)歷史經(jīng)驗(yàn),至少40%的用戶不會(huì)同意,更不用說(shuō)權(quán)限申請(qǐng)彈窗上還要提示為了向用戶提供更精準(zhǔn)的廣告推薦。當(dāng)然,某些APP會(huì)讓用戶必須同意授權(quán)IDFA,否則不提供服務(wù),這種容易被Apple以用戶歧視的理由下架,更不可取。目前,iOS上的廣告生態(tài)中從定向到歸因都是基于IDFA之上,影響面可想而知。
SKAdNetwork2.0是由1.0升級(jí)而來(lái),以解決上文中提出的IDFA帶來(lái)的安裝和轉(zhuǎn)化歸因問(wèn)題。簡(jiǎn)單來(lái)說(shuō),廣告平臺(tái)需要注冊(cè)成為Apple的一個(gè)廣告網(wǎng)絡(luò)并提供一個(gè)回調(diào)地址,當(dāng)用戶通過(guò)此廣告網(wǎng)絡(luò)的廣告下載并打開(kāi)了廣告主的APP之后,Apple會(huì)把安裝等信息傳到回調(diào)地址。整個(gè)流程中有很多細(xì)節(jié)問(wèn)題,具體看下文。
ATT和SKAdNetwork2.0的更新,不僅代表著Apple更注重用戶隱私透明度,也代表著Apple開(kāi)始插手廣告歸因,想作為應(yīng)用商店在廣告歸因中分一杯羹,并為未來(lái)更大的廣告業(yè)務(wù)做準(zhǔn)備。
先說(shuō)影響面:
此次更新,主要影響的是通過(guò)設(shè)備號(hào)跟外部進(jìn)行交互的事物上,包括以下:
- 安裝和轉(zhuǎn)化歸因,在獲取不到IDFA時(shí)要有新的方案,例如SKAdNetwork2.0;廣告主要更注意歸因
- 延遲深度鏈接,廣告主基于IDFA廣告點(diǎn)擊的延遲深度鏈接方案不可行,要有其他方案
- APP拉新時(shí),已安裝用戶的判斷在獲取不到IDFA時(shí)要有新的方案,用Apple提供的方法去查詢是否安裝某個(gè)APP
- APP拉活、老客喚醒時(shí),基于IDFA的用戶定位方案也不再是主流,在獲取不到IDFA時(shí)要有新的方案
再說(shuō)ATT和SKAdNetwork2.0結(jié)論:
- 通過(guò)讀取簽名中的廣告展示ID,廣告平臺(tái)仍然可將安裝和轉(zhuǎn)化歸到某一次廣告展示中
- 安裝和轉(zhuǎn)化回傳的實(shí)時(shí)性大大降低,會(huì)延遲1天到64天之間,且最多傳64種轉(zhuǎn)化,轉(zhuǎn)化價(jià)值無(wú)法回傳
- Apple未說(shuō)明具體歸因邏輯、時(shí)長(zhǎng)和周期,且給廣告主的信息幾乎為零,未說(shuō)明如何杜絕廣告平臺(tái)作弊
- 未提供除了IDFA以外其他定向方案
- 依賴于點(diǎn)擊監(jiān)測(cè)和IDFA的延遲深度鏈接不可實(shí)現(xiàn)
- 用戶禁止APP訪問(wèn)IDFA的概率較高
最后提出幾種解決方案:
- 通用id方案
- Id Mapping 方案
- IDFA+IDFV加密方案
01 ATT
ATT全名是AppTrackingTransparency,是Apple為提高用戶隱私透明度提供的解決方案,獲取IDFA也要符合ATT的要求。目前IDFA需要申請(qǐng)的場(chǎng)景,包括但不限于精準(zhǔn)廣告推薦、與數(shù)據(jù)第三方共享設(shè)備位置、與廣告網(wǎng)絡(luò)共享ID來(lái)定位或者lookalike、應(yīng)用中放置一個(gè)第三方SDK用于第三方廣告網(wǎng)絡(luò)定向。很明顯,Apple不希望IDFA未經(jīng)用戶允許就用于任何的廣告定向。
此外,Apple還說(shuō)有兩種情況下,可以跟蹤用戶且不需要獲取用戶許可:
- 當(dāng)您的應(yīng)用程序中的員工或設(shè)備數(shù)據(jù)僅連接到用戶設(shè)備上的第三方數(shù)據(jù),并且不會(huì)以可識(shí)別用戶或設(shè)備的方式從設(shè)備發(fā)送出去
- 與您共享數(shù)據(jù)的數(shù)據(jù)代理僅將數(shù)據(jù)用于欺詐檢測(cè),預(yù)防欺詐或安全目的,并且僅代表您使用。例如,僅使用數(shù)據(jù)代理來(lái)防止信用卡欺詐。
這兩種情況Apple單獨(dú)說(shuō)出來(lái)蠻奇怪的,Apple如何能夠保證開(kāi)發(fā)者是按照所述要求進(jìn)行的,而非serve to serve來(lái)實(shí)現(xiàn)Apple不允許的。如果單從這兩種特殊情況來(lái)說(shuō),對(duì)Apple的ATT執(zhí)行力度是存疑的。
02 SKAdNetwork2.0
SKAdNetwork2.0的整體流程比ATT復(fù)雜一些,涉及到的角色也較多,它其實(shí)是Apple針對(duì)非IDFA的安裝和轉(zhuǎn)化歸因的整體方案,是要廣告平臺(tái)、廣告主、媒體共同參與才能夠?qū)崿F(xiàn)的。此外,SKAdNetwork2.0是由1.0迭代而來(lái)的,1.0用的人很少,2.0增加了一些參數(shù)和接口。
SKAdNetwork2.0的主要流程
上圖畢竟只是個(gè)流程,看不出來(lái)一些細(xì)節(jié)問(wèn)題,例如能否把安裝歸因到某一次曝光?具體各個(gè)角色都要做什么工作?廣告網(wǎng)絡(luò)能否知道轉(zhuǎn)化的產(chǎn)生時(shí)間?接下來(lái)我們對(duì)流程中的每個(gè)節(jié)點(diǎn)用到的方法、參數(shù)等進(jìn)行詳細(xì)梳理,才能解決上述問(wèn)題。
SKAdNetwork2.0的交互流程
1. 廣告平臺(tái)去Apple中注冊(cè)成為一個(gè)廣告網(wǎng)絡(luò),擁有一個(gè)廣告網(wǎng)絡(luò)id。除了id以外,有公鑰和私鑰一對(duì),用以解密Apple在用戶安裝后回傳的信息,公鑰要發(fā)送給Apple,私鑰自行保存。還要提供一個(gè)URL,用以接收SKAdNetwork安裝驗(yàn)簽回發(fā)請(qǐng)求。
具體請(qǐng)見(jiàn):https://developer.apple.com/documentation/storekit/skadnetwork/registering_an_ad_network
2. 廣告平臺(tái)向媒體提供帶簽名的廣告。簽名是整個(gè)SKAdNetwork2.0關(guān)鍵點(diǎn)。
如何生成簽名?
首先,廣告平臺(tái)要根據(jù)所使用的SKAdNetwork版本來(lái)選擇參數(shù),若是2.0,則擁有以下參數(shù)可供選擇,版本是指支持的版本:
- SKStoreProductParameterAdNetworkVersion版本2.0。使用API版本值“ 2.0”。
- SKStoreProductParameterAdNetworkIdentifier版本1.0和2.0。在Apple上注冊(cè)的廣告網(wǎng)絡(luò)id。
- SKStoreProductParameterAdNetworkCampaignIdentifier版本1.0和2.0。廣告系列編號(hào)。
- SKStoreProductParameterITunesItemIdentifier版本1.0和2.0。廣告主APP的App Store ID,即itunes-item-id。
- SKStoreProductParameterAdNetworkNonce版本1.0和2.0。是種UUID,是代表每次廣告展示的唯一值。簽名中使用的該隨機(jī)數(shù)的字符串表示形式必須為小寫。
- SKStoreProductParameterAdNetworkSourceAppStoreIdentifier版本2.0。媒體APP的應(yīng)用商店ID。如圖source-app-id中的清單3。
- SKStoreProductParameterAdNetworkTimestamp版本1.0和2.0。代表廣告展示時(shí)間
其次,廣告平臺(tái)對(duì)參數(shù)和值按照Apple要求進(jìn)行合并,合并成一條字符串。
然后,廣告平臺(tái)用密鑰和Apple提供的算法對(duì)合并的字符串加密簽名。
最后,將擁有應(yīng)用調(diào)用和啟動(dòng)驗(yàn)簽所需的所有必需的“ 廣告網(wǎng)絡(luò)安裝驗(yàn)簽簽名”值。把簽名放入廣告中,并把廣告推給媒體,因此廣告網(wǎng)絡(luò)提供給媒體的API或者SDK都要改動(dòng)。
具體請(qǐng)見(jiàn):https://developer.apple.com/documentation/storekit/skadnetwork/generating_the_signature_to_validate_an_installation
3. 媒體在應(yīng)用中配置廣告網(wǎng)絡(luò)id。媒體要在一個(gè)文件中把需要支持的廣告網(wǎng)絡(luò)id填入,此文件支持多個(gè)廣告網(wǎng)絡(luò)id,若某廣告網(wǎng)絡(luò)id不在此文件中,則不會(huì)對(duì)此廣告網(wǎng)絡(luò)id啟動(dòng)安裝驗(yàn)簽。
具體請(qǐng)見(jiàn):https://developer.apple.com/documentation/storekit/skadnetwork/configuring_the_participating_apps
4. 媒體APP顯示廣告平臺(tái)提供的帶簽名的廣告。當(dāng)用戶在媒體APP上點(diǎn)擊廣告時(shí),媒體APP調(diào)用App Store視圖并代入廣告網(wǎng)絡(luò)提供的簽名和驗(yàn)簽信息,這樣Apple才能知道調(diào)起App Store的簽名,并把簽名帶到下一個(gè)流程中去。
具體請(qǐng)見(jiàn):https://developer.apple.com/documentation/storekit/skadnetwork/ad_network_install_validation_keys
5. 用戶下載安裝廣告主APP。
6. 用戶打開(kāi)廣告主APP時(shí),廣告主APP要調(diào)用應(yīng)用安裝驗(yàn)簽信息方法。方法是registerAppForAdNetworkAttribution(),調(diào)用或者首次啟動(dòng)時(shí)使用,無(wú)需填入其他任何參數(shù),相當(dāng)于廣告主告訴Apple說(shuō)這人打開(kāi)了我的APP了。Apple會(huì)等待廣告主APP24小時(shí),若24小時(shí)內(nèi)廣告主APP未進(jìn)入到下個(gè)流程,Apple會(huì)在之后的24小時(shí)之中的隨機(jī)時(shí)間點(diǎn)向廣告平臺(tái)發(fā)起回調(diào),隨機(jī)時(shí)間點(diǎn)也是為了用戶隱私吧。PS:其實(shí)不需要廣告主調(diào)用,Apple應(yīng)該也知道這一次的打開(kāi),可能有技術(shù)上的難題。
7. 用戶在廣告主APP上產(chǎn)生轉(zhuǎn)化,廣告主APP要調(diào)用更新轉(zhuǎn)化值方法。方法是updateConversionValue(_:),在產(chǎn)生轉(zhuǎn)化時(shí)使用,需要傳一個(gè)int值,6-bit,相當(dāng)于0-63中的某個(gè)值,調(diào)用此方法后Apple回調(diào)的時(shí)間會(huì)推遲24小時(shí)。此方法可多次調(diào)用,但是距離上一次調(diào)用安裝(registerAppForAdNetworkAttribution)或轉(zhuǎn)化(updateConversionValue(_:))不能超過(guò)24小時(shí),因?yàn)槌^(guò)24小時(shí)的話Apple就會(huì)發(fā)起回調(diào)了。多次調(diào)用時(shí),后一次的Value要比前一次的大,否則相當(dāng)于不生效。因此最多會(huì)導(dǎo)致64次調(diào)用后才會(huì)回傳給廣告平臺(tái)信息。
我認(rèn)為ConversionValue更像是轉(zhuǎn)化id而非轉(zhuǎn)化價(jià)值,廣告主可以基于自身漏斗設(shè)計(jì)最多64個(gè)轉(zhuǎn)化,目前在SKAdNetwork2.0中并不存在轉(zhuǎn)化價(jià)值這個(gè)參數(shù)。
8. Apple把安裝和轉(zhuǎn)化信息發(fā)送給廣告平臺(tái)注冊(cè)時(shí)填寫的URL上。此時(shí)就涉及到如何歸因,可惜這方面Apple在文檔中沒(méi)有說(shuō)得很清楚,例如用戶看了兩個(gè)廣告網(wǎng)絡(luò)廣告后,在點(diǎn)擊后一個(gè)廣告去安裝廣告主APP,此時(shí)安裝信息的發(fā)送邏輯,類似問(wèn)題還有很多。
9. 廣告平臺(tái)驗(yàn)簽收到的安裝和轉(zhuǎn)化信息。此時(shí)廣告平臺(tái)要支持兩種版本的安裝和轉(zhuǎn)化信息驗(yàn)簽,且只能通過(guò)收到的信息中的參數(shù)與解密后的簽名相驗(yàn)簽。生成簽名時(shí),用私鑰去加密;收到簽名后,用公鑰去驗(yàn)簽和解密。具體參數(shù)如下:
- version版本2.0。與匹配的廣告網(wǎng)絡(luò)驗(yàn)簽API的版本。
- SKStoreProductParameterAdNetworkVersionad-network-id版本1.0和2.0。廣告網(wǎng)絡(luò)id
- SKStoreProductParameterAdNetworkIdentifiertransaction-id版本1.0和2.0。此驗(yàn)簽的唯一值;用于對(duì)安裝驗(yàn)簽消息進(jìn)行重復(fù)數(shù)據(jù)刪除。
- campaign-id版本1.0和2.0。展示廣告時(shí)提供的與匹配的廣告系列ID 。
- SKStoreProductParameterAdNetworkCampaignIdentifierapp-id版本1.0和2.0。廣告主的APP
id - attribution-signature版本1.0和2.0。要驗(yàn)簽的Apple的署名簽名。
- redownload版本2.0。一個(gè)布爾值,指示值為1時(shí)用戶重新下載并重新安裝了該應(yīng)用程序。
- source-app-id版本2.0。媒體的APPid。注意:僅當(dāng)提供的參數(shù)滿足Apple的隱私閾值時(shí),才會(huì)顯示。SKStoreProductParameterAdNetworkSourceAppStoreIdentifiersource-appid
- conversion-value版本2.0。轉(zhuǎn)化id,已安裝的應(yīng)用程序通過(guò)調(diào)用提供的無(wú)符號(hào)6位值。注意:僅當(dāng)已安裝的應(yīng)用程序提供該參數(shù)并且提供的參數(shù)滿足Apple的隱私規(guī)則時(shí),才會(huì)顯示。updateConversionValue(_:)conversio
上述參數(shù)中,核心是attribution-signature簽名,若簽名被篡改或者非此廣告平臺(tái)的,就會(huì)驗(yàn)簽失敗。通過(guò)公鑰對(duì)簽名進(jìn)行驗(yàn)簽和解密后,就可以得到廣告平臺(tái)帶入的簽名加密前的字符串,而字符串中包含了廣告展示ID,即可將安裝轉(zhuǎn)化與廣告展示ID關(guān)聯(lián)起來(lái)。(此處很關(guān)鍵,建議實(shí)際驗(yàn)證或者找Apple確認(rèn))此外,還可用非簽名的參數(shù)跟簽名內(nèi)的字符串的參數(shù)核對(duì),若有沖突即可舍棄此次回傳。
文檔請(qǐng)見(jiàn):https://developer.apple.com/documentation/storekit/skadnetwork/verifying_an_install_validation_postback
03 疑問(wèn)點(diǎn)
1. 歸因相關(guān)
Apple是否涉及到歸因?歸因運(yùn)算邏輯?歸因時(shí)間周期?點(diǎn)擊廣告后沒(méi)有下載,在中途沒(méi)有點(diǎn)擊其他任何廣告,用戶自行去APP STORE 下載,歸因怎么算?先看A廣告點(diǎn)擊跳轉(zhuǎn)到AppStore,再看B廣告并點(diǎn)擊跳轉(zhuǎn)到AppStore,傳的是A還是B?
2. 參數(shù)相關(guān)
redownload 1和0的具體判斷邏輯是什么?廣告主APP版本跟redownload有啥關(guān)系?conversion-value 轉(zhuǎn)化價(jià)值的建議用法是什么?說(shuō)要滿足的隱私規(guī)則是什么?
3. 簽名相關(guān)
在正常情況下,廣告網(wǎng)絡(luò)在生成簽名時(shí)候的簽名,跟安裝回傳中的簽名是否一致?若是,則廣告網(wǎng)絡(luò)是否要根據(jù)解密后的簽名和其他參數(shù)作對(duì)比?若是,則可以通過(guò)廣告展示的uuid把安裝和曝光關(guān)聯(lián)起來(lái)?若是,則有了廣告展示的UUID,campaignid還有什么用?
4. 反作弊相關(guān)
通過(guò)什么渠道向廣告主提供了哪些信息?整套機(jī)制是否能有效防止媒體或者廣告平臺(tái)作弊?若是,則整套機(jī)制為什么能防止?
04 解決方案
1. 通用id方案
這種方案本質(zhì)上是尋找IDFA的替代品,要根據(jù)媒體、廣告平臺(tái)、廣告主都能拿到的設(shè)備或用戶數(shù)據(jù),根據(jù)這些數(shù)據(jù)和制定規(guī)則去生成一個(gè)IDFA的替代品”某某ID”。難點(diǎn)有兩個(gè),唯一性和多方認(rèn)可。要有普遍的唯一性,是作為一個(gè)ID的必備能力。而且此方案要受到多方認(rèn)可,才能夠真正對(duì)外使用,否則只是另一個(gè)IDFV。
2. Id Mapping方案
這種方案本質(zhì)上類似PC WEB的cookie mapping,通過(guò)廣告平臺(tái)的ID和廣告主的ID Mapping,來(lái)解決IDFA的問(wèn)題。難點(diǎn)也有兩個(gè),如何mapping和如何提高mapping濃度。我有個(gè)方案是在A APP調(diào)起/喚醒B APP時(shí)進(jìn)行mapping,但是mapping是要涵蓋拉新、拉活等多種場(chǎng)景的,我這種方案只能解決拉活,而且mapping濃度也無(wú)法保證。
3. IDFA+IDFV加密方案
這種方案是adjust提出來(lái)的,本質(zhì)上就是看Apple能不能睜一眼閉一眼。首先,在廣告主端的對(duì)廣告主的IDFA和IDFV組成一個(gè)hash。然后,把這個(gè)hash和廣告主的IDFV傳到媒體APP客戶端上。其次,在媒體本地上用媒體的IDFA和廣告主的IDFV組成一個(gè)hash。最后,在媒體本地比較這兩個(gè)hash是否一致。此方案就是用到了上文ATT標(biāo)藍(lán)的內(nèi)容,認(rèn)為這種方案不會(huì)以可識(shí)別的方式把IDFA發(fā)出去。Apple是否認(rèn)為這種方案就是符合隱私要求的,這是要打個(gè)問(wèn)號(hào)的。
總之,Apple的小改動(dòng)對(duì)于整個(gè)iOS不算什么,但是在互聯(lián)網(wǎng)廣告中掀起了狂風(fēng)駭浪,到目前也沒(méi)有業(yè)內(nèi)達(dá)成共識(shí)的解決方案。ATT和SKAdNetwork2.0的推出,確實(shí)對(duì)用戶隱私是利好,但是也會(huì)助長(zhǎng)以頭部綜合廣告平臺(tái)為代表的圍墻花園態(tài)勢(shì)。經(jīng)此一役,大家又回到同一個(gè)起跑線上,有風(fēng)險(xiǎn)就有機(jī)遇,希望同行同業(yè)能夠一起面對(duì)。
#專欄作家#
Vency,公眾號(hào):Vency不二,人人都是產(chǎn)品經(jīng)理專欄作家。海外商業(yè)產(chǎn)品經(jīng)理,關(guān)注海外、廣告、商業(yè)化、營(yíng)銷等領(lǐng)域,追求用戶、技術(shù)、商業(yè)、社會(huì)價(jià)值的統(tǒng)一,喜好看書、逛館。
本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來(lái)自 Unsplash,基于CC0協(xié)議。
這塊有問(wèn)題,廣告主APP不能直接調(diào)用接口傳轉(zhuǎn)化值給APPLE的
那轉(zhuǎn)化數(shù)據(jù)是怎么給Apple的