2011-04-08 11 views
10

El proyecto en el que estoy solicitando dos (o incluso tres) identificadores únicos del iPhone o iPad. Lo sé, lo sé ... el UDID debería ser suficiente, pero estamos tratando de ver si hay otros identificadores únicos que podamos usar.Identificador único de iPhone/iPad ADEMÁS DE UUID/UDID?

Puedo obtener el IMEI, el número de serie, la dirección MAC, etc. desde el teléfono usando IOKit.framework pero aparentemente Apple no está de acuerdo con esta aplicación y cualquier aplicación que utilice este marco será rechazada.

¿Alguien tiene alguna otra idea o identificadores que me falta que podrían usarse?

Gracias!

+4

Siempre podría hash el UUID de alguna manera críptica para obtener dos ID más :) –

+0

@Nick: No creo que el OP quiera usar el UDID de ninguna manera porque es fácil simular eso, p. Descargue UDIDFaker de Cydia en un dispositivo con jailbreak. –

+0

Apple frunce el ceño ante IMEI? Eso no es bueno, porque restringe gran parte de lo que ese valor es bueno. – KevinDTimm

Respuesta

3

Puede obtener el ICCID y el IMSI (si existen).

NSString *commcenter = @"/private/var/wireless/Library/Preferences/com.apple.commcenter.plist"; 
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:commcenter]; 
NSString *ICCID = [dict valueForKey:@"ICCID"]; 
NSString *IMSI = [dict valueForKey:@"IMSI"]; 

Creo que eso es lo más lejos que obtendrá. No conozco ninguna otra opción para obtener una identificación universal.

ACTUALIZACIÓN 2013-03-13: Esto probablemente ha cambiado desde que escribí esta respuesta hace casi dos años. Ni siquiera recuerdo cuál era la versión de iOS en este momento. También como @joshis señaló correctamente en los comentarios: "legalmente no se puede hacer esto, ya que su aplicación leería cosas desde fuera del entorno limitado de la aplicación y, por lo tanto, será rechazada, como se especifica en las directrices de revisión de AppStore ...".

+0

¿Qué significa exactamente "legalmente"? ¿La aplicación será rechazada por capturar estos? – edcincy

+0

No, legalmente no puedes hacer esto, ya que tu aplicación leería cosas fuera del entorno limitado de la aplicación y, por lo tanto, será rechazada, como se especifica en AppStore Review Guidelines, 2.6: las aplicaciones que leen o escriben datos fuera del área de contenedor designado serán rechazado – joshis

+0

No puedo abrir dicho directorio: "inalámbrico" en /private/var/wireless/Library/Preferences/com.apple.commcenter.plist.Estoy tratando de hacer eso en dispositivos no jailbreak – Sergio

1

El método para conseguir el UDID está en desuso, ahora debería utilizar CFUUIDCreate que creo que podría ser utilizado varias veces para obtener más identificadores si es necesario

1

Tal vez debería aclarar su pregunta.

solicitando dos (o tres) identificadores únicos desde el iPhone o el IPAD

... es una contradicción en los términos. Si su propósito es rastrear un dispositivo físico específico, entonces un único identificador único, por definición, es suficiente. Eso es lo que significa único.

Tal vez, lo que realmente desea es realizar un seguimiento de varias cosas sobre el uso que cada usuario hace de su aplicación, a diferencia del dispositivo. Digamos que su aplicación de juegos en red le permite al usuario 1, 2 o 3 personalidades diferentes. A medida que el usuario crea una personalidad distinta, debe rastrear cada una de las personalidades de ese usuario entre todas las personalidades del otro usuario.

Para este propósito, generar y almacenar un UUID* es una solución adecuada y común. iOS incluye bibliotecas para generar un valor de UUID. La única pega es que si el usuario elimina y vuelve a instalar la aplicación, el almacenamiento de ese UUID puede perderse. Existen soluciones para este desafío, que puede aprender buscando en Google discusiones sobre cómo reemplazar el seguimiento de UDID con los valores de UUID generados.


Esta pregunta es un poco más antigua. Así que debería mencionar: en iOS 5, Apple deprecated el uso del UDID. A partir de 2013-05-01 Apple es rejecting cualquier aplicación que acceda al UDID.


(*) No confundas un UUID con un UDID.UUID es un número standard de 128 bits (32 dígitos hexadecimales) que a menudo se utiliza como un identificador virtualmente único en muchos escenarios tecnológicos. UDID es la cadena de 40 dígitos hexadecimales de Apple grabada en cada dispositivo iOS para identificar de manera única cada dispositivo.

7

Esta pregunta es viejo sin embargo, un nuevo y único, basado vendedor, identificador ahora se ha añadido para reemplazar el UUID obsoleto en iOS 6.

El [UIDevice identifierForVendor] ahora se debe utilizar en lugar de [UIDevice uniqueIdentifier] que ahora está obsoleta a partir de iOS el uso de 5,0

Ejemplo:

NSUUID *uuid = [[UIDevice currentDevice] identifierForVendor]; 
NSString *uuidString = [uuid UUIDString]; 
1

de Apple:

El valor en esta propiedad permanece igual mientras la aplicación (u otra aplicación del mismo proveedor) está instalada en el dispositivo iOS. El valor cambia cuando el usuario elimina todas las aplicaciones de ese proveedor del dispositivo y luego reinstala uno o más de ellos.

tanto, si utiliza [UIDevice identifierForVendor] y el usuario elimine la aplicación y vuelve a instalar, el ID será diferente (por lo que hay un verdadero seguimiento de dispositivo físico)

¿Por qué no usar SecureUDID?

NSString *domain = @"com.example.app"; 
NSString *key = @"mykey"; 
NSString *udid = [SecureUDID UDIDForDomain:domain usingKey:key]; 

De esta manera, incluso si el usuario elimina la aplicación y la reinstala, el UDID será el mismo. Esto le dará un seguimiento consistente (o lo que quiera hacer con el UDID). Por cierto, lo anterior aún está permitido en Apple. Diviértete.

0

DeviceCheck API en iOS 11 es una solución interesante para obtener un identificador único, la ventaja es que el valor se conservará incluso después de desinstalar la aplicación. Así que use casos como la instalación de prueba y los desarrolladores pueden controlar las recompensas de manera efectiva.

Cuestiones relacionadas