2012-02-22 7 views
8

Estoy usando [[UIDevice currentDevice] uniqueIdentifier] en todas mis aplicaciones, Apple ya no permite el uso de uniqueIdentifier. Necesito algo para usar que reemplace el uniqueIdentifier que puedo usar para reconocer a un usuario incluso cuando el usuario elimina la aplicación y la instala de nuevo (y también obtiene mi aplicación aprobada por Apple).Método [[UIDevice currentDevice] uniqueIdentifier] no está permitido más, necesito una alternativa

Gracias

+3

Posible duplicado - [UIDevice uniqueIdentifier Desaprobados - ¿Qué hacer ahora] (http://stackoverflow.com/q/6993325/194544) – beryllium

Respuesta

12

El documentation recomienda qué hacer en esta sección.

Consideraciones especiales
No utilizar la propiedad uniqueIdentifier. Para crear un identificador único específico para su aplicación, puede llamar al a la función CFUUIDCreate para crear un UUID y escribirlo en la base de datos por defecto usando la clase NSUserDefaults.

Para asegurarse de que el identificador único permanece después de eliminar la aplicación que debe guardarlo en el lugar de keychain NSUserDefaults. Usando el llavero también podrás compartir la misma identificación única en todas tus aplicaciones en el mismo dispositivo usando keychain access groups. Este enfoque evitará que realice un seguimiento incorrecto de los usuarios después de que el dispositivo ya no sea suyo, y estará disponible en cualquier iDevice nuevo que restauren a partir de la copia de seguridad.

+0

que quiere decir que se puede añadir a la device keychain el UUID y elimine la aplicación y cuando lo instale de nuevo ¿recuperaré el valor y lo usaré de nuevo? – user784625

+0

Sí, los elementos del llavero permanecen persistentes (siempre que el dispositivo no se borre y se configure como un nuevo dispositivo), y cuando usa grupos de acceso puede permitir que otras aplicaciones suyas accedan al mismo valor del llavero. – Joe

+0

una pregunta más, ¿puedo usar la dirección MAC en su lugar y todavía obtener mi aplicación aprobada por Apple? – user784625

3

Actualización para iOS 7 y antes:

+ (NSString *)uniqueDeviceIdentifier 
{ 
    NSString *device_id = nil; 

    if ([[self deviceModel] isEqualToString:@"Simulator iOS"]) { 
     // static id for simulator 
     device_id = @"== your random id =="; 
    } 
    else if (CurrentIOSVersion >= 6.f) { 
     // iOS 6 and later 
     device_id = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; 
    } 
    else { 
     // iOS 5 and prior 
     SEL udidSelector = NSSelectorFromString(@"uniqueIdentifier"); 
     if ([[UIDevice currentDevice] respondsToSelector:udidSelector]) { 
      device_id = [[UIDevice currentDevice] performSelector:udidSelector]; 
     } 
    } 
    NSLog(@">>>>>> device_id: %@", device_id); 
    return device_id; 
} 

modelo de dispositivo que puede recibir a través de:

+ (NSString*)deviceModel 
{ 
    static NSString *device_model = nil; 

    if (device_model != nil) 
     return device_model; 

    struct utsname systemInfo; 
    uname(&systemInfo); 
    NSString *str = @(systemInfo.machine); 

    return device_model; 
} 
+0

El problema con este código es que devolverá un valor diferente cada vez que se llame en iOS 6 o posterior. Para ser un reemplazo 'uniqueIdentifier', debe ser persistente. – kamprath

Cuestiones relacionadas