參考:
AppTrackingTransparency
截止至2020年4月25日厕隧,實(shí)測(cè)更新iOS系統(tǒng)至iOS14.4.2梦抢,設(shè)置->隱私->跟蹤
中允許App請(qǐng)求數(shù)據(jù)
的總開關(guān)是默認(rèn)開啟的(可能由更新之前舊系統(tǒng)中允許獲取idfa的開關(guān)決定的)宗收,因此如果使用舊的代碼衣摩,不需要調(diào)用授權(quán)代碼影暴,仍然可以獲取到idfa。
蘋果官網(wǎng)明確指出:
確保您的應(yīng)用已準(zhǔn)備好用于iOS 14.5介劫,iPadOS 14.5和tvOS 14.5苇经。在即將發(fā)布的公共發(fā)行版中,所有應(yīng)用都必須使用AppTrackingTransparency框架來請(qǐng)求用戶允許其跟蹤或訪問其設(shè)備的廣告標(biāo)識(shí)符的權(quán)限铅歼。除非您獲得用戶允許啟用跟蹤的權(quán)限公壤,否則設(shè)備的廣告標(biāo)識(shí)符值將全為零换可,并且您可能無法跟蹤它們。
因此 AppTrackingTransparency
是必須適配的厦幅,后面更新到 iOS14.5 沾鳄,舊的獲取方式就不好使了。兩個(gè)步驟:
1确憨、工程 Info.plist
文件新增用戶授權(quán)提示文案译荞,用 Source Code
的方式打開Info.plist
文件,添加如下代碼休弃,string值可根據(jù)實(shí)際需要自行設(shè)置:
<key>NSUserTrackingUsageDescription</key>
<string>允許廣告追蹤以獲取更多相關(guān)廣告</string>
2吞歼、代碼適配:
導(dǎo)入框架:
#import <AdSupport/AdSupport.h>
#import <AppTrackingTransparency/AppTrackingTransparency.h>
iOS版本判斷:
- (NSString*)idfa {
__block NSString *idfa = @"";
ASIdentifierManager *manager = [ASIdentifierManager sharedManager];
if (@available(iOS 14, *)) {
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
if (status == ATTrackingManagerAuthorizationStatusAuthorized) {
idfa = [[manager advertisingIdentifier] UUIDString];
}
}];
}else{
if ([manager isAdvertisingTrackingEnabled]) {
idfa = [[manager advertisingIdentifier] UUIDString];
}
}
return idfa;
}
在iOS14 以上的系統(tǒng),一旦執(zhí)行授權(quán)代碼requestTrackingAuthorizationWithCompletionHandler
塔猾,只有第一次授權(quán)會(huì)彈出系統(tǒng)提示框篙骡,如下:
應(yīng)用也會(huì)增加到 設(shè)置->隱私->跟蹤
的列表中:
注意:
1、如果關(guān)閉列表中對(duì)應(yīng)的應(yīng)用的開關(guān)丈甸,再開啟糯俗,該應(yīng)用的idfa值不變;
2睦擂、如果關(guān)閉總跟蹤開關(guān)(“允許App請(qǐng)求跟蹤”)再開啟得湘,則應(yīng)用的開關(guān)需要單獨(dú)開啟,且應(yīng)用的idfa值會(huì)改變顿仇;