IDFA — Privacy Setting in iOS14
測試環境:Xcode12.2 / iPhoneSE2 iOS14.1
2021/2/2更新:測試在 iOS 14.5 Beta 版預設已拿不到 IDFA,iOS 14.5 正式實施。
原訂隨 iOS14 系統發布,因開發者反彈,目前推遲到 2021 Early 正式實施。
IDFA 的衝擊
iOS 14 對隱私權的重大改變之一,便是預設 App 無法拿到 app tracking data — IDFA 包括其中,直到使用者允許為止。這對於需要跨 App 比對用戶興趣進而投放 TA 的廣告商來說,是個不小的衝擊。
以過往更新歷史資料來看,使用者在新版 iOS 推出後,一個月內可以達到 50% 的使用者更新到新版 iOS。
也就是說,若在新版推出後,App 沒有採取相對應的措施,會導致 iOS14 推出的一個月後,可能就有 50% 的 iOS 使用者採取不到 IDFA 資料。
2020–2021 Early 過渡期
iOS14 設定 -> 隱私權 -> 追蹤裡仍可看到隱私權總開關,與 2021 Early 正式上路有所不同的行為是不論 App 是否有請求授權,都可拿到 IDFA。
目前在 iOS 14.0 與 iOS 14.2 測試出的結果無論追蹤總開關是否關閉,跳窗後使用者是否允許,皆會得到 IDFA。
2021 Early 正式上路後將會預設拿不到 IDFA,亦即是即使使用者開啟總開關,App 仍須個別向使用者要求授權,才可拿到 IDFA。
IDFA 的重置
若沒有任何 App 被允許追蹤,當使用者重新打開追蹤或授權時,IDFA 會新換一組。
例如當總開關被關掉再打開,或者是總開關開著,但所有 App 皆被禁止追蹤,此時若有某一 App 再被使用者打開允許追蹤,則拿到的 IDFA 會是新的。
系統彈窗
系統彈窗主標題的字不可更改。
只會跳出一次系統彈窗,之後呼叫不會再開啟。
能提供補充說明 Message 欄位,於 Info.plist 新增 “Privacy — Tracking Usage Description” 欄位,並在值欄位輸入想要給使用者的說明文字,系統彈窗高度會自動隨著 message 字數增加。若沒有設定此值就呼叫系統彈窗會 crash。
App 必須跳過一次上述的系統彈窗後,iOS 系統才會提供此 App 的隱私權選項給使用者,意即若 App 沒有跳過任何一次系統彈窗,使用者也無法在手機設定頁手動開啟,如下圖所示。
如何叫出系統彈窗
Apple 針對新的隱私設定,提供開發者 App Tracking Transparency 框架,提供跳出系統彈窗以及目前使用者的隱私狀態。
class func requestTrackingAuthorization(completionHandler completion: @escaping (ATTrackingManager.AuthorizationStatus) -> Void)
開發者可以在任何想要的時機 call requestTrackingAuthorization
,但是彈窗要跳出需同時滿足下列兩個條件:
- 使用者有打開隱私權 ➝ 追蹤 ➝ “允許 App 要求追蹤” 。
- 下載此 App 後,系統彈窗從未彈出過。
若上述條件都滿足,在 call requestTrackingAuthorization
前檢查 status 狀態,會得到 “NotDetermined”,在此狀態下 call 系統彈窗會順利跳出。
檢查使用者隱私設定狀態
ATTrackingManager.AuthorizationStatus.authorized
:使用者允許此 App 拿到 app tracking data。
ATTrackingManager.AuthorizationStatus.denied
:使用者拒絕此 App 拿到 app tracking data。
此狀態在 Xcode12 beta6 測試有可能的情況是
- 跳出系統彈窗失敗,因為使用者關閉 ” 允許 App 要求追蹤 ”。
- 使用者跳出系統彈窗後,選擇拒絕此 App 追蹤。
- 使用者至設定關掉此 App 的追蹤。
ATTrackingManager.AuthorizationStatus.notDetermined
:使用者”允許 App 要求追蹤”,但 App 尚未跳出系統彈窗要求權限。
ATTrackingManager.AuthorizationStatus.restricted
:使用 app tracking data 的權限遭受限制(Note: 此狀態 Apple 目前未提供具體說明,在 Beta6 也測不出此狀態產生的邏輯,有待觀察。)
追蹤設定
“允許 App 要求追蹤” 與各 App 的 “追蹤開關” 不完全關聯。
“允許 App 要求追蹤” — 若關閉會讓從沒有要求過權限的 App 無法跳出系統彈窗,因此新的 App 在設定裡便沒有路徑可以讓使用者打開追蹤。已經要求過權限的 App 設定仍會存在不受影響。
因此在下圖的設定裡,已經要求過權限的 App 依然可以拿到 IDFA(只要追蹤仍被打開),但未要求過權限的 App 會無法跳出系統彈窗(允許 App 要求追蹤被關閉),進而也不會出現清單裡。