El identificador publicitario e identificador de ForVendor devuelven “00000000-0000-0000-0000-000000000000”

Implementé estos métodos para obtener advertisingIdentifier e 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; } 

En el simulador, todo funciona como debería y puedo obtener la representación de ID de 2 cadenas.

Pero cuando corro desde el iPhone 3GS con iOS 6.0 (10A403), estos 2 métodos devuelven “00000000-0000-0000-0000-000000000000” como identificador. Ya hecho:

  • Reinició el dispositivo
  • Se eliminó la aplicación y se volvió a instalar
  • Creación creada y Ad-Hoc, instalada, eliminada e instalada nuevamente
  • Ejecuta este código desde otra aplicación
  • Probado en iPad 2 con iOS 6.0 (10A403) y todo salió bien (tengo los identificadores correctos)

Parece ser un error en iOS. Al ver el mismo problema en los dispositivos que se han actualizado por air, pero los dispositivos actualizados con Xcode o iTunes funcionan como se esperaba sin ceros.

Probé pasos similares a los tuyos, y el único tema común fue la actualización por air (mala) frente a la atada (buena).

Actualización: los usuarios que se mueven directamente desde iOS 5.1 a 6.1 experimentan un comportamiento diferente. Cada vez que la aplicación se cierra por completo y se reinicia, identifierForVendor devuelve un nuevo valor. Esto se esperaría si la aplicación se desinstalara y reinstalara, pero ese no es el caso.

Apple confirmó este error en su sistema en respuesta a una solicitud de Incidente de Soporte Técnico. Dijeron que identifierForVendor y advertisingIdentifier veces devuelven todos los ceros, se pueden ver tanto en las comstackciones de desarrollo como en las aplicaciones descargadas por air de la App Store. No tienen trabajo y no pueden decir cuándo se solucionará el problema.

Hay algunas situaciones en las que la API devuelve una respuesta vacía para ID, como después de la restauración del dispositivo.

La sugerencia es posponer la repetición de ID, para que pueda llamar algo así como esto:

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

Y buscar ID más tarde.