iOS: Indentificando como único un dispositivo

La política de Apple para identificar dispositivos es a día de hoy muy restrictiva, no te dejan identificar un dispositivo por IMEI y por UDID, de hecho han bloqueado los accesos a estos datos desde hace unas cuantas versiones de iOS.

A día de hoy la única manera de identificar de manera única a un dispositivo facilitada por Apple es con el Identificador de Publicidad del dispositivo, pero este se puede resetear desde el móvil y además sólo está permitido usarlo si muestras publicidad en tu app, si no te la rechazarán cuando subas la aplicación a la tienda.

Nos toca por tanto recurrir a soluciones propias y rezar para que Apple no detecte en su proceso de revisión que estás identificando como único a ese dispositivo, tarea necesaria cuando no solicitas al usuario que tenga una cuenta en tu servidor.

En mi caso lo que hago es generar un identificador único y lo grabo como una preferencia de usuario, así nadie puede borrarlo salvo que desinstales la app.

Os pongo aquí el método:
- (NSString*)getGUIDString {
    CFUUIDRef newUniqueID = CFUUIDCreate(kCFAllocatorDefault);
    CFStringRef newUniqueIDString = CFUUIDCreateString(kCFAllocatorDefault, newUniqueID);
    NSString *guid = (__bridge NSString *)newUniqueIDString;
    CFRelease(newUniqueIDString);
    CFRelease(newUniqueID);
    return([guid lowercaseString]);
}
Y aquí el código para guardar el dato como preferencia de usuario:
NSString *userGuid = [[NSUserDefaults standardUserDefaults] stringForKey:@"guid"];
if(!userGuid.length>0){
    NSString *guid = [self getGUIDString];
    [[NSUserDefaults standardUserDefaults] setValue:guid forKey:@"guid"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}
Espero que os sea útil.

Comentarios