iOS14關于IDFA獲取權限調研

場景

Apple宣布 2020-9-16 發布iOS14新系統,iOS14系統具官網了解,如果需要獲取IDFA(廣告符),需要用戶授權。我們公司合作的第三方廣告目前都是通過IDFA在跟蹤用戶。
iOS13之前的版本可以直接獲取,只要用戶不手動去設置頁面關閉。

所以小調研了一下。

測試設備:iPhone6,iOS14Beta7
開發工具:Xcode11

調用判斷IDFA是否開啟開關,無論設置里限制廣告跟蹤的開關是否打開,都是返回 false,但是直接獲取卻是正確的IDFA值。(不知道是不是iOS14Beta系統的bug)

import AdSupport
 
    // 是否可以獲取IDFA,iOS14永遠返回 false,但是打印 ASIdentifierManager.shared().advertisingIdentifier.uuidString 有值
    if ASIdentifierManager.shared().isAdvertisingTrackingEnabled {
        debugPrint("開著:\(ASIdentifierManager.shared().advertisingIdentifier.uuidString)")
    } else {
        debugPrint("關了:\(ASIdentifierManager.shared().advertisingIdentifier.uuidString)")
    }

打印結果:

"關了:7DE78ED0-3854-4840-A49C-2F33B9DC201B"

iOS14后正確的獲取方式:

測試設備:iPhone6,iOS14Beta7
開發工具:Xcode12,Beta2

Xcode12引入新的Framework AppTrackingTransparency,代碼如下:

import AdSupport
import AppTrackingTransparency
 
    if #available(iOS 14, *) {
             
        ATTrackingManager.requestTrackingAuthorization { (status) in
            switch status {
             case .denied:
                debugPrint("用戶拒絕")
                break
            case .authorized:
                 debugPrint("用戶允許")
                debugPrint("IDFA:\(ASIdentifierManager.shared().advertisingIdentifier.uuidString)")
                break
            case .notDetermined:
                debugPrint("用戶沒有選擇")
            default:
                break
            }
        }
    } else {
        // iOS13及之前版本,繼續用以前的方式
        if ASIdentifierManager.shared().isAdvertisingTrackingEnabled {
            debugPrint("可以獲取:\(ASIdentifierManager.shared().advertisingIdentifier.uuidString)")
        } else {
            debugPrint("用戶未打開IDFA開關")
        }
    }

同時 info.plist也要添加一個權限提示配置:
NSUserTrackingUsageDescription:Vaule為要提示用戶授權的一句話,配置完成。

還有一個變動是,iOS14的廣告跟蹤權限放到了每個App的設置中,而不像之前在隱私全局設置中。


IMG_2EC8D9B22F3C-1.jpeg

啟動App后,會類似推送或者定位的權限提示一樣,有一個系統彈窗。


IMG_2294.PNG

結論:

如果有需要使用IDFA的App,或者和第三方廣告有合作的App,需要產品層面設計上考慮,如果用戶需選擇“要求App不跟蹤”,引導用戶跳轉到設置打開的流程。

技術需要考慮的問題

是要使用 AppTrackingTransparency,必須升級到Xcode12,如果升級到意味著要兼容iOS14,是否還有別的坑。
目前已經發現的坑是,UITableViewCell直接 cell.addSubView(viewTest), viewTest會無法觸發到手勢響應(像是被cell.contentView遮蓋住了)。
必須改為 cell.contentView.sddSubView(viewTest),我們項目是通過這種方式全局兼容的。
不太清楚是不是 Xcode12Beta版本問題,因為目前正式版Xcode12還未發布。

也可以嘗試:

如果我們不著急升級Xcode12,依然使用Xcode11暫時先打包;不判斷廣告符是否授權,直接獲取,是不是依然可以獲取到iOS14設備的真實IDFA?

目前拿一臺iPhone6的iOS14Beta7測試是可以的,需要更多的測試結果來證明猜測。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。