場景
Apple宣布 2020-9-16 發(fā)布iOS14新系統(tǒng)咬像,iOS14系統(tǒng)具官網(wǎng)了解猖毫,如果需要獲取IDFA(廣告符)荔睹,需要用戶授權(quán)。我們公司合作的第三方廣告目前都是通過IDFA在跟蹤用戶眉厨。
iOS13之前的版本可以直接獲取,只要用戶不手動去設(shè)置頁面關(guān)閉兽狭。
所以小調(diào)研了一下憾股。
測試設(shè)備:iPhone6鹿蜀,iOS14Beta7
開發(fā)工具:Xcode11
調(diào)用判斷IDFA是否開啟開關(guān),無論設(shè)置里限制廣告跟蹤的開關(guān)是否打開服球,都是返回 false茴恰,但是直接獲取卻是正確的IDFA值。(不知道是不是iOS14Beta系統(tǒng)的bug)
import AdSupport
// 是否可以獲取IDFA斩熊,iOS14永遠(yuǎn)返回 false往枣,但是打印 ASIdentifierManager.shared().advertisingIdentifier.uuidString 有值
if ASIdentifierManager.shared().isAdvertisingTrackingEnabled {
debugPrint("開著:\(ASIdentifierManager.shared().advertisingIdentifier.uuidString)")
} else {
debugPrint("關(guān)了:\(ASIdentifierManager.shared().advertisingIdentifier.uuidString)")
}
打印結(jié)果:
"關(guān)了:7DE78ED0-3854-4840-A49C-2F33B9DC201B"
iOS14后正確的獲取方式:
測試設(shè)備:iPhone6,iOS14Beta7
開發(fā)工具: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及之前版本,繼續(xù)用以前的方式
if ASIdentifierManager.shared().isAdvertisingTrackingEnabled {
debugPrint("可以獲取:\(ASIdentifierManager.shared().advertisingIdentifier.uuidString)")
} else {
debugPrint("用戶未打開IDFA開關(guān)")
}
}
同時 info.plist也要添加一個權(quán)限提示配置:
NSUserTrackingUsageDescription
:Vaule為要提示用戶授權(quán)的一句話渣叛,配置完成丈秩。
還有一個變動是,iOS14的廣告跟蹤權(quán)限放到了每個App的設(shè)置中淳衙,而不像之前在隱私全局設(shè)置中蘑秽。
啟動App后,會類似推送或者定位的權(quán)限提示一樣箫攀,有一個系統(tǒng)彈窗肠牲。
結(jié)論:
如果有需要使用IDFA的App,或者和第三方廣告有合作的App靴跛,需要產(chǎn)品層面設(shè)計(jì)上考慮缀雳,如果用戶需選擇“要求App不跟蹤”,引導(dǎo)用戶跳轉(zhuǎn)到設(shè)置打開的流程梢睛。
技術(shù)需要考慮的問題
是要使用 AppTrackingTransparency肥印,必須升級到Xcode12,如果升級到意味著要兼容iOS14绝葡,是否還有別的坑深碱。
目前已經(jīng)發(fā)現(xiàn)的坑是,UITableViewCell
直接 cell.addSubView(viewTest)
, viewTest
會無法觸發(fā)到手勢響應(yīng)(像是被cell.contentView遮蓋住了)藏畅。
必須改為 cell.contentView.sddSubView(viewTest)
敷硅,我們項(xiàng)目是通過這種方式全局兼容的。
不太清楚是不是 Xcode12Beta版本問題愉阎,因?yàn)槟壳罢桨鎄code12還未發(fā)布绞蹦。
也可以嘗試:
如果我們不著急升級Xcode12,依然使用Xcode11暫時先打包榜旦;不判斷廣告符是否授權(quán)坦辟,直接獲取,是不是依然可以獲取到iOS14設(shè)備的真實(shí)IDFA章办?
目前拿一臺iPhone6的iOS14Beta7測試是可以的锉走,需要更多的測試結(jié)果來證明猜測滨彻。