以前審核都很正常,但是這次最近遇見(jiàn)App Store審核被拒,原因是iOS17下IDFA不彈窗

image.png
網(wǎng)上查看了很多攻略,發(fā)現(xiàn)都說(shuō)的不太完善,這邊結(jié)合自身成功通過(guò)的方法再總結(jié)下。
1.General => Frameworks,Libraries,and Embedded Content 中添加AppTrackingTransparecy.framework
image.png
2.applicationDidBecomeActive中添加下述代碼
- (void)applicationDidBecomeActive:(UIApplication *)application {
[self requestIDFA];
}
- (void)requestIDFA {
[self getAppIDFADataWithCompletion:^(NSString *idfa) {
}];
}
- (void)getAppIDFADataWithCompletion:(void (^)(NSString *))completion {
__block NSString *idfa = @"";
if (@available(iOS 14, *)) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
ATTrackingManagerAuthorizationStatus status = [ATTrackingManager trackingAuthorizationStatus];
// 用戶(hù)還沒(méi)有做出選擇時(shí)
if (status == ATTrackingManagerAuthorizationStatusNotDetermined) {
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
if (status == ATTrackingManagerAuthorizationStatusAuthorized) {
idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
} else {
NSLog(@"請(qǐng)?jiān)谠O(shè)置-隱私-跟蹤中允許App請(qǐng)求跟蹤");
idfa = @"";
}
if (completion) {
completion(idfa);
}
}];
} else if (status == ATTrackingManagerAuthorizationStatusAuthorized) {
idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
if (completion) {
completion(idfa);
}
} else {
NSLog(@"用戶(hù)已拒絕授權(quán)或在設(shè)置中關(guān)閉了IDFA");
idfa = @"";
if (completion) {
completion(idfa);
}
}
});
} else {
idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
if (completion) {
completion(idfa);
}
}
}
3.Info中添加下述內(nèi)容
image.png
上述能解決非多語(yǔ)言下的情況,但多語(yǔ)言環(huán)境,還行執(zhí)行下面設(shè)置
4.Info中移除對(duì)應(yīng)3中的Privacy字段,并在對(duì)應(yīng)的多語(yǔ)言InfoPlist中添加NSUserTrackingUsageDescription的字段

image.png
通過(guò)以上能解決IDFA不彈窗的問(wèn)題