目录
一、审核说明
ios升级到14版本之后,强制要求app授权AppTrackingTransparency,无法授权审核会被打回。
根据苹果官方说明文档:requestTrackingAuthorization(completionHandler:) | Apple Developer Documentation
需要在程序激活时唤起授权,
每次激活时检查授权状态,直到获取到权限或检测到用户拒绝,因为一旦用户作出选择,他们的决定会被保存,并且不能通过程序再次弹出请求。之后重复唤起授权也会被拒审。
二、Xcode工程配置
framework添加:
info.plist添加:
三、修改代码
在UnityAppController.mm 文件下:
#import <AppTrackingTransparency/ATTrackingManager.h>
#import <AdSupport/AdSupport.h>
- (void)getAppIDFADataWithCompletion:(void (^)(NSString *))completion {
__block NSString *idfa = @"";
if (@available(iOS 14, *)) {
ATTrackingManagerAuthorizationStatus status = [ATTrackingManager trackingAuthorizationStatus];
// 用户还没有做出选择时
if (status == ATTrackingManagerAuthorizationStatusNotDetermined) {
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
if (status == ATTrackingManagerAuthorizationStatusAuthorized) {
idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
} else {
NSLog(@"请在设置-隐私-跟踪中允许App请求跟踪");
idfa = @"00000000-0000-0000-0000-000000000000";
}
if (completion) {
completion(idfa);
}
}];
} else if (status == ATTrackingManagerAuthorizationStatusAuthorized) {
idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
if (completion) {
completion(idfa);
}
} else {
NSLog(@"用户已拒绝授权或在设置中关闭了IDFA");
idfa = @"00000000-0000-0000-0000-000000000000";
if (completion) {
completion(idfa);
}
}
} else {
idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
if (completion) {
completion(idfa);
}
}
}
// 在 applicationDidBecomeActive 中调用这个方法
- (void)applicationDidBecomeActive:(UIApplication *)application {
//...
[self getAppIDFADataWithCompletion:^(NSString *idfa) {
// 在这里使用 idfa
}];
}