我已实施此方法以获取advertisingIdentifier
和identifierForVendor
:
- (NSString *) advertisingIdentifier
{
if (!NSClassFromString(@"ASIdentifierManager")) {
return [OpenUDID value];
}
return [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
}
- (NSString *) identifierForVendor
{
if ([[UIDevice currentDevice] respondsToSelector:@selector(identifierForVendor)]) {
return [[[UIDevice currentDevice] identifierForVendor] UUIDString];
}
return @"";
}
- (BOOL)isAdvertisingTrackingEnabled
{
if (NSClassFromString(@"ASIdentifierManager") && ![[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
return NO;
}
return YES;
}
在模拟器上,一切正常,我可以获得2个字符串ID表示。
但是当我从带有iOS 6.0的iPhone 3GS(10A403)运行时,这两种方法将“00000000-0000-0000-0000-000000000000”作为标识符返回。 已经完成:
答案 0 :(得分:24)
这似乎是iOS中的一个错误。在已通过无线升级的设备上看到相同的问题,但使用Xcode或iTunes升级的设备按预期工作,没有零。
尝试了与您类似的步骤,唯一的共同主题是无线(坏)与系绳升级(好)。
更新:直接从iOS 5.1移动到6.1空中直播的用户会遇到不同的行为。每次完全关闭并重新启动应用时,identifierForVendor
都会返回一个新值。如果应用程序正在卸载并重新安装,则会出现这种情况,但事实并非如此。
答案 1 :(得分:8)
Apple在其系统中确认了此错误,以响应技术支持事件请求。他们有时说identifierForVendor
和advertisingIdentifier
返回全部零可以在开发版本和从App Store通过无线下载的应用程序中看到。他们没有解决办法,也无法说明问题何时得到解决。
答案 2 :(得分:0)
在某些情况下,API会在设备恢复后返回ID的空响应。
建议推迟ID retreival,所以你可以这样调用sometginh:
-(void)retrieveID
{
if (<check fails>)
[self performSelector:@"retrieveID" withObject:nil afterDelay:1.0];
}
稍后获取ID。