2011-10-18 26 views
10

Duplicar posibles:
UIDevice uniqueIdentifier Deprecated - What To Do Now?UUID para aplicación en IOS5

Como espero que son conscientes de la uniqueIdentifier en está en desuso en iOS5. Lo que estoy buscando básicamente es la misma funcionalidad para iOS5.

Lo que entiendo de la documentación es que Apple desea que nosotros (los desarrolladores) creemos nuestro propio UUID (usando CFUUIDCreate, supongo) y lo almacenemos en el NSUserDefaults. Esto, sin embargo, me hace estremecer un poco y no me siento en absoluto salvado. Se siente un poco inútil tener un UUID en este caso.

La razón por la que necesito un UUID es porque envío una gran cantidad de información que incluye UUID a mis servidores en el proceso de autenticación y me gustaría poder omitir algunos pasos si el servidor puede "adivinar" quién es la próxima vez la aplicación se inicia o reinstala o otra aplicación implementa mi biblioteca. CFUUIDCreate no parece ayudarme con esto.

Eché un vistazo rápido al gekitz también, pero según tengo entendido, lo basa únicamente en la dirección MAC de la "tarjeta" Ethernet en el teléfono. Esto no es adecuado ya que tengo la vaga sensación de que la dirección MAC es modificable. El uniqueIdentifier en fue

Una cadena alfanumérica única para cada dispositivo en base a varios detalles de hardware.

Currenly Escribí este código, que recupera un UUID. Pero tan pronto como limpio en XCode y vuelvo a instalar la aplicación en el teléfono, obtengo un nuevo UUID.

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *UUID = @""; 

if (![defaults valueForKey:@"UUID"]) 
{ 
    CFUUIDRef UUIDRef = CFUUIDCreate(kCFAllocatorDefault); 
    CFStringRef UUIDSRef = CFUUIDCreateString(kCFAllocatorDefault, UUIDRef); 
    UUID = [NSString stringWithFormat:@"%@", UUIDSRef]; 

    [defaults setObject:UUID forKey:@"UUID"]; 
} 
else { 
    UUID = [defaults valueForKey:@"UUID"]; 
} 

[deviceInformation setObject:UUID forKey:@"UUID"]; 

Para resumir, mi pregunta es la siguiente:
¿Hay alguna forma sólida de crear un UUID que se basa en el dispositivo que es "duro" para manipular y me da como receptor de un poco algo en que confiar y en quien confiar? Esto no tiene que estar basado en el dispositivo, puede estar basado en la aplicación como un UUID de la aplicación siempre que sea el mismo después de una reinstalación.

+0

¿Por qué un UUID de 'CFUUIDCreate', almacenado con' NSUserDefaults', no satisface su caso de uso de autenticación? Cada instalación siempre enviará el mismo valor (hasta que se borre y vuelva a instalar). Puede ser molesto mientras se desarrolla, pero un usuario no elimina sus aplicaciones muy a menudo, ¿o sí? – DarkDust

+0

Además, ¿por qué cambiaría el MAC? Puede cambiar en una PC donde puede modificarlo con alguna herramienta, pero siempre que no lo haga, los MAC nunca cambian. – DarkDust

+1

@DarkDust No es un duplicado posible. He leído esa publicación también antes de publicar la mía. Ya respondió su segundo comentario en el comentario mismo. La próxima vez que se instale la aplicación, necesito el mismo UUID, no uno nuevo para esa instalación. Borro aplicaciones de manera bastante regular, y también soy un usuario. Sin embargo, esta pregunta SO no se trata de los hábitos de los usuarios, independientemente de lo que sean. Mis requisitos son un UUID que es único pero el mismo en cada instalación. –

Respuesta

7

Hasta ahora, el MAC parece ser la única forma conocida "estable" para identificar un dispositivo.

Eche un vistazo a Erica Sadun's UIDevice(Hardware) category, notará que lo único útil para la identificación es el MAC.

Ella también tiene una categoría UIDevice(IOKit_Extensions) que proporciona el IMEI y el número de serie. Sin embargo, IOKit es una API privada. Erica wrote:

Como twitteó iPhone evangelista Mateo Drance, "IOKit no es pública en el iPhone La falta de cabeceras y documentos rara vez es un descuido.".

Así que usar IOKit puede ser rechazado.

Por lo que sé, no hay forma de que un usuario cambie el MAC sin jailbreaking el dispositivo (y luego puede hacer lo que quiera de todos modos). Así que mi sugerencia es ignorar los jailbreakers y simplemente usar un UUID basado en el MAC.

¡Advertencia! Las API de direcciones MAC no funcionarán en iOS 7.

+0

Como mencioné en el chat, las librerías privadas son un poco no no. Apple no lo permitirá. Tendré que usar la dirección Mac. ¡Gracias por tu ayuda! –