Pregunta

Para una aplicación de iPhone que envía imágenes a un servidor, de alguna manera necesito unir todas las imágenes de un teléfono en particular. Con cada envío me gustaría enviar una identificación de teléfono única. Visto

  [[UIDevice mainDevice] uniqueIdentifier]
and [[NSUserDefaults standardDefaults] stringForKey:@"SBFormattedPhoneNumber"]

pero obteniendo errores en el simulador.

¿Hay una forma autorizada por Apple de hacer esto?

¿Fue útil?

Solución

¿Qué errores estás recibiendo? [[UIDevice currentDevice] uniqueIdentifier] ( editado para corregir API, gracias Martin! ) es la forma oficialmente recomendada de hacer esto.

Otros consejos

También puede usar CFUUID para generar un UUID. Aquí hay un código:

NSString *uuid = nil;
CFUUIDRef theUUID = CFUUIDCreate(kCFAllocatorDefault);
if (theUUID) {
  uuid = NSMakeCollectable(CFUUIDCreateString(kCFAllocatorDefault, theUUID));
  [uuid autorelease];
  CFRelease(theUUID);
}

De lejos, la forma más fácil y apropiada de obtener un identificador único es usar los mecanismos que Apple proporciona explícitamente para obtener uno - [[UIDevice currentDevice] uniqueIdentifier] . No puede garantizar que el número de teléfono sea único para el dispositivo o que el dispositivo tenga incluso un número de teléfono. Más allá de eso, hacerlo es una idea horrible, ya que es una invasión definitiva de la privacidad del usuario. Incluso el uniqueidentifier debe estar marcado si va a almacenarlo de alguna manera.

Para persistir el identificador único que creas entre las instalaciones, puedes usar el llavero Hecho fácil con SSKeychain : simplemente configura tu UUID como sigue:

        [SSKeychain setPassword:@"Your UUID" forService:@"com.yourapp.yourcompany" account:@"user"];

y luego vuelva a llamar cuando lo necesite:

NSString *retrieveuuid = [SSKeychain passwordForService:@"com.yourapp.yourcompany" account:@"user"];

Nota: Los servicios y las cuentas deben coincidir exactamente .

Luego, si la aplicación se elimina y se vuelve a instalar, el UUID persistirá con la reinstalación.

Si luego quiere compartir este UUID entre dispositivos, configure su aplicación para usar iCloud. Luego puede almacenar el UUID en NSUserDefaults, sincronizar con KeyValueStore y luego configurar el UUID en el nuevo llavero de dispositivos con el código anterior.

Esta respuesta se volvería extremadamente larga si escribiera el código para todo lo anterior, pero hay un montón de código de ejemplo por aquí para resolverlo todo.

No olvides que en iOS 5 uniqueIdentifier quedará obsoleto, debes usar CFUUID en lugar de eso

Es interesante que desde entonces Apple ha dejado de utilizar el identificador único en iOS 5 (como se mencionó en gN0Me). Aquí está el artículo relevante de TechCrunch: http://techcrunch.com/2011/08/ 19 / apple-ios-5-phasing-out-udid /

Apple sugiere que ya no identifique de forma única el dispositivo, sino que identifique al usuario . En la mayoría de los casos, este es un excelente consejo, aunque hay algunas situaciones que aún requieren una identificación de dispositivo única globalmente . Estos escenarios son bastante comunes en la publicidad. Por lo tanto, escribí una biblioteca extremadamente simple que reproduce exactamente el comportamiento existente.

En un desvergonzado plug de auto promoción, lo vincularé aquí con la esperanza de que alguien lo encuentre útil. También, doy la bienvenida a todos y cualquier comentario / crítica: http://www.binpress.com/app/myid/591

Sin embargo, en su situación particular, le aconsejaría que omita la función de identificación única globalmente que proporciona mi biblioteca, ya que es un poco excesivo para su situación. En su lugar, generaría un CFUUID simple y lo almacenaría en NSUserDefaults. Esta ID sería específica para su aplicación, pero le permitiría agrupar todas las fotos para esa " instalación de la aplicación " en su base de datos.

En otras palabras, al desaprobar el método uniqueIdentifier, Apple sugiere que no se identifique por dispositivo, sino por aplicación install . A menos que esté operando bajo condiciones específicas, es probable que el ID por aplicación se adapte mejor a su producto de todos modos.

Este es un problema interesante que también estoy buscando para resolver. Aquí hay un escenario que me gustaría abordar.

¿Qué sucede cuando vendes tu teléfono a otra persona ... esa ID del dispositivo pertenecerá a otra persona, por lo que incluso si la aplicación se elimina del iPhone, podría volver a agregarse y toda esa información se volvería a agregar? re-asociado a un nuevo usuario ... esto es malo.

Sería una excelente solución usar el número de teléfono con el ID de dispositivo MD5. Otro de los que se nos ocurrió es tener una base de datos SQL Lite con algún token Hashed con el ID de dispositivo. Luego, cuando se elimina la aplicación, se elimina la base de datos y todos los datos se disocian. Creo que eso podría ser demasiado frágil.

¿Alguna otra idea?

Rob Ellis (PhoneGap / Nitobi)

No he hecho el trabajo con el iPhone, pero ¿qué tal si tomas un hash de algo exclusivo del teléfono ... oh, di el número de teléfono?

Obtención del número de iphone

snippit:

NSString *phoneNumber = (NSString *) [[NSUserDefaults standardUserDefaults] objectForKey:@"SBFormattedPhoneNumber"]; // Will return null in simulator!
NSLog(@"Formatted phone number [%@]", phoneNumber);

[Recientemente] ejecuté este código como está en OS 2.2.1 [y OS 3.0].

Funciona como se esperaba cuando se ejecuta en el dispositivo y devuelve mi número de teléfono con los códigos de marcación internacional completos [1 en mi caso].

Cuando se ejecuta en el simulador, el valor [devuelto] es una cadena nula, por lo que solo funciona en un dispositivo iPhone real.

No lo probé en un iPod Touch.

...

Ejecutó este código en un dispositivo diferente esta semana y obtuvo un valor nulo en lugar del número.

En futuras investigaciones, parece que el número devuelto por este fragmento de código es el número configurado en iTunes para el dispositivo.

Si no ingresó & # 8217; t número de iPhone en iTunes en la activación del dispositivo, o quizás (como en mi caso) si el valor predeterminado no era & # 8217; t número de iPhone & # 8217; y De todos modos, haga clic en Aceptar, por lo que iTunes no muestra el número de teléfono cuando se enchufa su iPhone, este código devolverá una cadena nula.

[Arriba hay una concatenación editada de comentarios que publiqué recientemente en otro artículo sobre este tema en http://www.alexcurylo.com/blog/2008/11/15/snippet-phone-number/]

Aquí hay más información sobre un forma de obtenerlo desde iTunes que puede ser útil para propósitos de prueba.

Tuve éxito con tal código:

- (NSString *)stringUniqueID {
    NSString *  result;
    CFUUIDRef   uuid;
    CFStringRef uuidStr;
    uuid = CFUUIDCreate(NULL);
    assert(uuid != NULL);
    uuidStr = CFUUIDCreateString(NULL, uuid);
    assert(uuidStr != NULL);
    result = [NSString stringWithFormat:@"%@", uuidStr];
    assert(result != nil);
    NSLog(@"UNIQUE ID %@", result);
    CFRelease(uuidStr);
    CFRelease(uuid);
    return result;
}    

Puedes usar la dirección MAC como una identificación única. El siguiente enlace te ayudará

¿Cómo puedo obtener el MAC mediante programación? dirección de un iphone

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top