iphone - por - ¿Qué es un método a largo plazo que puedo usar para identificar de forma única un dispositivo iOS?
rastrear iphone por imei (5)
A menos que su aplicación sea para administrar mis dispositivos Apple, es el enfoque equivocado. Como usuario, no quiero que sepas qué dispositivo estoy usando. Quiero que me reconozcas, sea cual sea el dispositivo que use. Quiero poder reemplazar un dispositivo defectuoso. Apple restringirá cada vez más el acceso a esta información.
[editar] No puedo ver cómo podría funcionar una dirección MAC. Mis dispositivos iOS pueden tener múltiples.
¿Cuál es la mejor manera de registrar de forma única un dispositivo iOS, que no estará limitado por futuras restricciones de Apple?
Mi enfoque actual para registrar un dispositivo iOS (básicamente para identificar el dispositivo únicamente) es que utilizo el UDID de un dispositivo iOS para identificarlo y registrarlo, y luego, después de reconocerlo, realizo las acciones necesarias.
El problema es que la propiedad UIDevice uniqueIdentifier está en desuso. Hay ciertas soluciones para eso (como se explica en esta pregunta ) de las cuales tengo conocimiento.
Una posibilidad es usar la dirección MAC de un dispositivo iOS. Sin embargo, creo que Apple también puede restringir el acceso a esta información en algún momento en el futuro.
¿Hay alguna otra forma (además de acceder a la dirección MAC) para identificar un dispositivo iOS, en el que podamos confiar para el futuro?
El mejor enfoque que he visto es usar el llavero. Puede generar un UUID con la función CFUUIDCreateString y almacenarlo en el llavero. Estos datos permanecen en el dispositivo entre las instalaciones y las restauraciones de las copias de seguridad.
Otra opción es generar dinámicamente tu propio UUID.
CFUUIDRef uuid = CFUUIDCreate(NULL);
CFStringRef generatedUuidStr = CFUUIDCreateString(NULL, uuid);
CFRelease(uuid);
NSString* uuidStr = [(NSString*)generatedUuidStr autorelease];
Podría persistir este UUID en NSUserDefaults para la singularidad basada en la instalación. Si la singularidad basada en el dispositivo es realmente lo más importante (de modo que después de que la desinstalación y la reinstalación de la ID persistan) necesitará un mecanismo para conservar la ID en el dispositivo. Creo que podría considerar el uso del llavero para conservar esa identificación que debería persistir más allá de la desinstalación de la aplicación. Incluso puede usar un grupo de acceso al agregar el UUID al llavero para que pueda tener un conjunto de aplicaciones que usen el mismo UUID.
Consulte la referencia del marco de seguridad de Apple para obtener más información sobre cómo guardar elementos de llavero y cómo recuperarlos.
Usa la dirección Mac de los dispositivos. Es tan único como podría necesitar, creo.
¿Cómo puedo obtener programáticamente la dirección MAC de un iPhone?
Utilizar el método preferido de Apple para generar un CFUUIDRef es probablemente la mejor solución, ya que creo que la dirección MAC también puede eliminarse en el futuro. Si usa esto y lo guarda en su NSUserdefaults, tendrá que persistir a menos que el usuario elimine la aplicación. Si desea tener una ID única generada que puede compartir entre aplicaciones o persistir entre instalaciones, debería mirar usando el UIPasteboard y guardar su UID generado con una clave que comparte entre las aplicaciones.
//Create a unique id as a string
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
//create a new pasteboard with a unique identifier
UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"youruniquestring" create:YES];
[pasteboard setPersistent:YES];
//save the unique identifier string that we created earlier
[pasteboard setString:((__bridge NSString*)string)];
//accessing it
UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"youruniquestring" create:NO];
NSLog([pasteboard string]);
He escrito un breve tutorial aquí, pero básicamente son las líneas anteriores: http://www.roostersoftstudios.com/2012/03/26/a-way-to-share-data-between-apps-on-a-given-ios-device/