advertisingIdentifier和identifierForVendor返回“00000000-0000-0000-0000-000000000000”
我已经实现了这个方法来获取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个string的ID代表。
但是,当我从iPhone 3GS与iOS 6.0(10A403)运行,这两个方法返回“00000000-0000-0000-0000-000000000000”作为标识符。 已经完成了:
- 重新启动设备
- 删除了应用程序并重新安装
- 创build和Ad-Hoc构build,安装,删除和再次安装
- 从另一个应用程序运行此代码
- 使用iOS 6.0(10A403)在iPad 2上进行testing,一切正常(我已经得到正确的标识符)
这似乎是在iOS中的错误。 在无线升级的设备上看到相同的问题,但使用Xcode或iTunes升级的设备按预期工作而不带零。
尝试了类似的步骤,唯一的共同主题是空中(坏)与系留升级(好)。
更新:直接从iOS 5.1移动到6.1的用户会遇到不同的行为。 每当应用程序完全closures并重新启动时, identifierForVendor
将返回一个新值。 如果应用程序被卸载并重新安装,这将是预期的,但事实并非如此。
苹果在他们的系统中确认了这个错误,以回应技术支持事件请求。 他们说, identifierForVendor
和advertisingIdentifier
有时候会返回所有的零,可以在开发版本和应用程序商店下载的应用程序中看到。 他们没有解决问题的时间,也不能说什么时候解决问题。
在某些情况下,API会像设备恢复之后那样返回ID空的响应。
build议是推迟ID retreival,所以你可以这样调用sometginh:
-(void)retrieveID { if (<check fails>) [self performSelector:@"retrieveID" withObject:nil afterDelay:1.0]; }
稍后取回ID。