出现问题:
控制台报错
RenrenPlay-Concept[31782:4157972] [access] This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSUserTrackingUsageDescription key with a string value explaining to the user how the app uses this data.
解决方案:
运行的Target
对应的info.plist
中申请权限:
打开方式:Source Code
<key>NSUserTrackingUsageDescription</key>
<string>获取设备信息用以精准推送您喜欢的内容</string>
打开方式:Property List
key :Privacy - Tracking Usage Description
value:获取设备信息用以精准推送您喜欢的内容
申请权限代码:
#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import <AdSupport/AdSupport.h>
// 调用requestTrackingAuthorizationWithCompletionHandler会弹窗提示用户是否授权,点拒绝则无法读取
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
if (status == ATTrackingManagerAuthorizationStatusAuthorized) {
// 已授权
NSString *idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
} else {
// 此时用户点击拒绝则无法读取
NSString *idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
}
}];
或者判断版本进行处理
if (@available(iOS 14, *)) {
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
if (status == ATTrackingManagerAuthorizationStatusAuthorized) {
// 已授权
NSString *idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
} else {
// 此时用户点击拒绝则无法读取
NSString *idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
}
}];
} else {
// 使用原方式访问 IDFA
}