ios - El identificador publicitario y el identificador para el proveedor devuelven “00000000-0000-0000-0000-000000000000”
xcode ios6 (3)
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 versiones de desarrollo como en las aplicaciones descargadas de forma remota desde la App Store. No tienen solución y no pueden decir cuándo se solucionará el problema.
He implementado 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 2 cadenas ID.
Pero cuando ejecuto desde iPhone 3GS con iOS 6.0 (10A403), estos 2 métodos devuelven "00000000-0000-0000-0000-000000000000" como identificador. Ya hecho:
- Reinicie el dispositivo
- Eliminado la aplicación y reinstalado
- Creado y Ad-Hoc construido, instalado, eliminado e instalado de nuevo
- 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)
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 devolución de ID, por lo que puede llamar a algo como esto:
-(void)retrieveID
{
if (<check fails>)
[self performSelector:@"retrieveID" withObject:nil afterDelay:1.0];
}
Y buscar ID más tarde.
Parece ser un error en iOS. Ver el mismo problema en los dispositivos que se han actualizado de forma inalámbrica, pero los dispositivos actualizados con Xcode o iTunes funcionan como se espera sin ceros.
Intentó pasos similares a los suyos, y el único tema común fue la actualización por aire (mala) frente a la atada (buena).
Actualización: los usuarios que se mueven directamente de iOS 5.1 a 6.1 por aire experimentan un comportamiento diferente. Cada vez que la aplicación se cierra completamente y se reinicia, identifierForVendor
devuelve un nuevo valor. Esto se esperaría si la aplicación estuviera siendo desinstalada y reinstalada, pero ese no es el caso.