ios - digitos - cual es el codigo de iphone
Identificación única de un usuario de iOS (9)
¿Qué hay de usar el centro de juegos y iCloud para identificar al usuario?
Es menos probable que un usuario no juegue y no sincronice sus datos.
Me gustaría crear una cuenta de usuario en el servidor para los nuevos usuarios de una aplicación, pero también me gustaría no pedirle al usuario que escriba nada. Idealmente, me gustaría que esto sea automático, como en Game Center.
Pero me pregunto si es posible. ¿Hay algo que pueda usar para identificar de manera única al usuario? Es muy poco probable que pueda encontrar la ID de Apple del usuario. Además, el ID del dispositivo identifica de manera única el dispositivo, no el usuario, por lo que sería inútil si el usuario tiene más dispositivos ...
¿Hay algo más que pueda usar?
Acerca de la privacidad: no quiero encontrar nada detrás de la espalda del usuario. No tengo ningún problema en pedirle al usuario acceso a su información (y si hay una API que me otorgue esta información, sería genial si la API se lo pregunta). Como dijo el propio Steve Jobs, de eso se trata la privacidad: obligar a las aplicaciones a pedir permiso al usuario antes de hacer cualquier cosa con sus datos privados.
Genera un UUID con esto:
NSString *UUID() {
CFUUIDRef cfuuid = CFUUIDCreate(NULL);
NSString *uuid = (__bridge_transfer NSString *)CFUUIDCreateString(NULL, cfuuid);
CFRelease(cfuuid);
return uuid;
}
Nada aquí está desaprobado o desaprobado por Apple, de hecho, es la forma en que sugieren que lo hagas. Almacene el UUID generado en el llavero y estará allí, incluso si el usuario desinstala y reinstala su aplicación. El UUID es exclusivo para el dispositivo y la hora en que se generó.
A continuación, puede usar varios esquemas para que el usuario agrupe sus dispositivos: iCloud o algún tipo de clave que entregue desde el servidor.
¡Buena suerte!
Adición:
Así es como lo guardo en el llavero, usando el uuid como nombre de usuario y generando una contraseña aleatoria:
uuid = UUID();
[keychainItemWrapper setObject:uuid forKey:(__bridge_transfer id)kSecAttrAccount];
NSString *pass_token = randomString(10);
[keychainItemWrapper setObject:pass_token forKey:(__bridge_transfer id)kSecValueData];
Tenga en cuenta que todo esto se puede hacer sin ninguna entrada del usuario.
Actualizar:
MCSMKeychainItem tiene una gran solución para la generación y almacenamiento de UUID con [MCSMApplicationUUIDKeychainItem applicationUUID]
. La biblioteca también tiene [MCSMGenericKeychainItem genericKeychainItemWithService:service username:username password:password]
. Juntas, estas funciones se encargan de todo lo mencionado anteriormente. Fácil de instalar con CocoaPods también.
Generar un UUID como sugirió Erik es definitivamente una solución sólida. La única (pequeña) advertencia puede ser que en el caso de una restauración completa de iDevice, el llavero se borrará también. La aplicación generará un nuevo UUID en este escenario y el iDevice ya no se puede relacionar con un usuario existente.
Otro enfoque para identificar de forma única un iDevice es generar un ID único basado en la dirección MAC de la interfaz de red y combinarlo con el ID del paquete de la aplicación. Este método produce una identificación única que es específica de la aplicación y duradera. No cambiará cuando el iDevice sea borrado, restaurado o cuando la aplicación sea removida y reinstalada. Debido a esto, no hay necesidad de almacenar esta identificación en el llavero.
Afortunadamente, ya hay algunas personas que han creado una pequeña biblioteca para lograr esto. El código se puede encontrar en GitHub:
https://github.com/gekitz/UIDevice-with-UniqueIdentifier-for-iOS-5
Hoy nuestra aplicación fue rechazada, debido a la identificación del usuario de Game Center. Está en las Pautas de la tienda de aplicaciones: https://developer.apple.com/appstore/resources/approval/guidelines.html .
No puede usar la ID de Uniqe Game Center en formato G :.
La única forma ahora para nosotros es utilizar la integración de iOS iOS6.
ACTUALIZACIÓN: Nuestra nueva versión con inicio de sesión FB automático pasó el proceso de revisión y está disponible en App Store (Slovni Duel). Utiliza también en la suscripción de la aplicación vinculada al perfil de FB.
Me sorprende la edad de esta pregunta y cómo ninguna de las respuestas proporciona una respuesta (aunque se insinúa).
La solución más simple es usar iCloud Key-Value Store , donde puede almacenar una identificación de usuario única sin requerir ningún tipo de autenticación o información de usuario, como una dirección de correo electrónico.
El resultado final es un UUID aleatorio (nada que realmente IDENTIFIQUE al usuario), que es diferente para cada usuario, pero tendrá el mismo valor para múltiples dispositivos registrados en la misma cuenta de iTunes.
Definimos un campo en nuestra Tienda iCloud KV, llamémoslo ID de usuario. Cuando se lanza la aplicación, primero verificamos el ID de usuario. Si está allí, entonces estamos todos configurados con la identificación única de nuestro usuario. De lo contrario, esta es la primera vez que corremos para este usuario. Generamos un UUID aleatorio y lo almacenamos en la Tienda de KV en ID de usuario. Eso es todo al respecto.
Nuestra experiencia muestra que este UUID es único por cuenta de iTunes. Si sus usuarios finales utilizan el uso compartido de la familia, a esas cuentas se les asignarán diferentes UUID (que pueden o no ser deseables, pero no hay nada que puedan hacer al respecto). Cualquier número de dispositivos que se inicien bajo la misma cuenta de iTunes verá el mismo UUID.
Este enfoque es totalmente legítimo y debe ser aprobado por Apple sin problemas.
Obviamente debes habilitar la tienda iCloud Key-Value en Xcode en Capabilities, solo enciende el conmutador iCloud.
Aquí hay una clase simple que implementa este concepto en Objective-C:
@implementation EEUserID
+ (NSUUID *) getUUID
{
NSUUID *uuid = nil;
NSString *uuidString = [[NSUbiquitousKeyValueStore defaultStore] stringForKey: @"EEUserID"];
if (uuidString == nil)
{
// This is our first launch for this iTunes account, so we generate random UUID and store it in iCloud:
uuid = [NSUUID UUID];
[[NSUbiquitousKeyValueStore defaultStore] setString: uuid.UUIDString forKey: @"EEUserID"];
[[NSUbiquitousKeyValueStore defaultStore] synchronize];
}
else
{
uuid = [[NSUUID alloc] initWithUUIDString: uuidString];
}
return uuid;
}
+ (NSString *) getUUIDString
{
NSUUID *uuid = [self getUUID];
if (uuid != nil)
return uuid.UUIDString;
else
return nil;
}
+ (void) load
{
// get changes that might have happened while this
// instance of your app wasn''t running
[[NSUbiquitousKeyValueStore defaultStore] synchronize];
}
@end
Y para el archivo de encabezado:
#import <Foundation/Foundation.h>
@interface EEUserID : NSObject
+ (NSUUID *) getUUID;
+ (NSString *) getUUIDString;
@end
Para usar, todo lo que tienes que hacer es invocar:
NSString *uniqueIDForiTunesAccount = [EEUserID getUUIDString];
Disfrutar.
No es una solución absolutamente segura (y solo funciona cuando iCloud está habilitado), pero es muy fácil de implementar: genere una identificación única una vez (como UUID) y almacénela en iCloud valor-valor-almacenamiento.
El único problema es que los usuarios avanzados saben cómo eliminar contenido de iCloud.
Para evitar que el usuario simplemente edite la ID única almacenada en iCloud en otra ID, puede agregarle algún tipo de secreto.
Puedes usar soluciones de terceros como SECUREUDID también echa un vistazo a this
Radu
Excelente pregunta Hemos resuelto el problema que describes integrando Urban Airship (urbanairship.com) en nuestras aplicaciones. Urban Airship ofrece una gran cantidad de funcionalidades para respaldar las compras integradas en la aplicación, la validación de recibos, la recuperación de suscripciones, la entrega de contenido y la notificación push de Apple.
Una de las mejores cosas de Urban Airship es su capacidad de identificar un "usuario", no un dispositivo, sino un "usuario" por su dirección de correo electrónico. No es realmente una "característica" publicitada ... más que un subproducto de su funcionalidad prevista.
Esto es lo que hemos encontrado y cómo podemos aprovechar Urban Airship para resolver el problema que tiene.
Cuando un usuario instala su aplicación que tiene Urban Airship integrado, UA de alguna manera genera un número similar a UDID, que en este momento, simplemente identifica el dispositivo.
Sin embargo, si aprovecha los componentes de recuperación de suscripción de Urban Airship, puede hacer que el usuario ingrese una dirección de correo electrónico. Una vez que el usuario ingresa su dirección de correo electrónico en el primer dispositivo ... esa ID generada se convierte en su método principal de identificación de usuario y se asocia con esa dirección de correo electrónico. Cuando ingresen su dirección de correo electrónico en dispositivos posteriores, Urban Airship activará un proceso de validación de correo electrónico. Una vez que el usuario completa el proceso de validación, actualiza la identificación en el nuevo dispositivo para que coincida con la ID del primer dispositivo y así sucesivamente. La mejor parte es ... ¡es todo auto-magia! Simplemente integre los componentes y pida al usuario que ingrese su dirección de correo electrónico. Debería poder tenerlo todo funcionando en una hora.
También ofrece funcionalidad para permitir al usuario cambiar la dirección de correo electrónico asociada con todos sus dispositivos.
¡Realmente lo hemos implementado y funciona MUY bien!
NOTA: A partir del 1 de julio de 2013, Urban Airship está desaprobando la funcionalidad de suscripción y recuperación.
Una alternativa a la sugerencia de Erik es una biblioteca de terceros llamada OpenUDID . Puede generar un identificador único por dispositivo, y es muy simple:
#include "OpenUDID.h"
NSString* openUDID = [OpenUDID value];