The advertisingIdentifier and identifierForVendor return "00000000-0000-0000-0000-000000000000"

J. Costa picture J. Costa · Sep 26, 2012 · Viewed 16.1k times · Source

I've implemented this methods to get advertisingIdentifier and 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;
}

On simulator everything is working as should be and I can get the 2 strings IDs representation.

But when I run from iPhone 3GS with iOS 6.0 (10A403), these 2 methods return "00000000-0000-0000-0000-000000000000" as identifier. Already done:

  • Restarted the device
  • Removed the app and reinstalled
  • Created and Ad-Hoc build, installed, removed and installed again
  • Run this code from another app
  • Tested on iPad 2 with iOS 6.0 (10A403) and everything went ok (I've got the correct identifiers)

Answer

MattP picture MattP · Sep 26, 2012

It appears to be a bug in iOS. Seeing the same issue on devices that have been upgraded over-the-air, but devices upgraded with Xcode or iTunes work as expected without zeros.

Tried similar steps as you, and the only common theme was over-the-air (bad) versus tethered upgrade (good).

Update: Users that move directly from iOS 5.1 to 6.1 over-the-air experience a different behavior. Every time the app is closed completely and restarted, a new value is being returned by identifierForVendor. This would be expected if the app was being uninstalled and reinstalled, but that's not the case.