症状
用户下载打开app,并且联网了,idfa还是获取不到
定位问题
以下机型:
1.国行版本的iPhone手机
2.系统版本在iOS10及以上
3.首次安装一个App时,App只要进行网络请求,就会触发
app 首次启动会弹出一个询问用户“是否允许应用访问数据”的弹框,类似下图:
因此很容易猜测出这样的结论:
用户点“允许”之前,网络请求全都是失败的(例如上传idfa);而点“允许”之后,网络请求就能正常进行了。
如果app只在首次启动时只尝试一次上传idfa,那么这部分机型的idfa肯定获取不到!
解决思路:只要用户联网就上传idfa
只要用户联网都会调用这段代码,而上传成功时才保存到本地。这样首次请求失败也无妨,用户联网时能重试上传,直到成功为止。以下代码供ios开发工程师调用:
//在AppDelegate中添加以下代码
// 监听网络状态
- (void)observeNetWork {
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
if (status == AFNetworkReachabilityStatusNotReachable || status == AFNetworkReachabilityStatusUnknown) {
//无网络链接
} else {
//网络链接成功,上传IDFA
[self uploadIDFA];
}
}];
}
//上传IDFA
- (void)uploadIDFA {
NSString *storedIDFA = [[NSUserDefaults standardUserDefaults] objectForKey:kIDFAUploadKey];//上传成功后,本地保存的IDFA
NSString *nowIDFA = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];//当前IDFA
if ([storedIDFA isEqualToString:nowIDFA]) {
return;
}
__weak typeof(self) weakSelf = self;
//上传IDFA
[NetWorkHelper requestUploadIDFA:idfaString success:^(id response) {
//上传成功,IDFA保存在本地
[[NSUserDefaults standardUserDefaults] saveObject:idfaString forKey:kIDFAUploadKey];
} failure:^(NSError *error) {
//上传失败,重新上传,直到成功
[weakSelf uploadIDFA];
}];
}