advertisingIdentifier和identifierForVendor返回“00000000-0000-0000-0000-000000000000”

时间:2012-09-26 15:29:00

标签: ios xcode ios6 advertising

我已实施此方法以获取advertisingIdentifieridentifierForVendor

- (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”作为标识符返回。 已经完成:

  • 重启设备
  • 删除了应用并重新安装
  • 创建,安装,删除和再次安装Ad-Hoc
  • 从其他应用
  • 运行此代码
  • 使用iOS 6.0(10A403)在iPad 2上测试,一切都确定(我有正确的标识符)

3 个答案:

答案 0 :(得分:24)

这似乎是iOS中的一个错误。在已通过无线升级的设备上看到相同的问题,但使用Xcode或iTunes升级的设备按预期工作,没有零。

尝试了与您类似的步骤,唯一的共同主题是无线(坏)与系绳升级(好)。

更新:直接从iOS 5.1移动到6.1空中直播的用户会遇到不同的行为。每次完全关闭并重新启动应用时,identifierForVendor都会返回一个新值。如果应用程序正在卸载并重新安装,则会出现这种情况,但事实并非如此。

答案 1 :(得分:8)

Apple在其系统中确认了此错误,以响应技术支持事件请求。他们有时说identifierForVendoradvertisingIdentifier 返回全部零可以在开发版本和从App Store通过无线下载的应用程序中看到。他们没有解决办法,也无法说明问题何时得到解决。

答案 2 :(得分:0)

在某些情况下,API会在设备恢复后返回ID的空响应。

建议推迟ID retreival,所以你可以这样调用sometginh:

-(void)retrieveID
{
    if (<check fails>)
        [self performSelector:@"retrieveID" withObject:nil afterDelay:1.0];
}

稍后获取ID。