Hola, buenas tardes a todos los usuarios del foro.
Estoy desarrollando una app en iOS, y me interesa que solo se pueda realizar un registro por dispositivo. Pero no se si esto es posible y que requisitos serian necesarios.
Si alguien sabe si hay alguna forma de hacerlo, por favor a ver si me puede orientar unpoco.
A día de hoy identificar un dispositivo único tiene cierta complejidad. Desde iOS 6, Apple dejó de dar acceso a la dirección MAC, que es algo que identifica de forma única a cada dispositivo (no sólo iPhones).
En su lugar introdujo otro identificador, identifierForVendor, de la clase UIDevice.
Echa un vistazo a esa clase, en concreto, [[[UIDevice currentDevice] identifierForVendor] UUIDString]; representa un string único para cada dispositivo.
El único problema con esta cadena es que el usuario tiene la habilidad para resetearlo y además no se conserva entre instalaciones de una misma aplicación, esto es, si instalas la aplicación, luego la desinstalas y la vuelves a instalar, el identificador cambia.
Pero esto último tiene solución utilizando la única parte del sistema que no se borra entre instalaciones. Espero que te ayude.
El identifierForVendor no puede ser reseteado por el usuario, ese es el identifierForAdvertising
Lo de que no se conserva entre instalaciones, según la documentación, se conserva si hay alguna otra app tuya instalada, es decir, que sólo cambiaría si desinstala todas tus aplicaciones
En mis pruebas, si la app ha sido descargada de la app store, no cambia nunca ni aunque desinstales todas las aplicaciones
Si lo que pretendes es identificar a un dispositivo podrías crear un UUID y guardarlo en NSUserDefaults. Tal como explican aquí: http://stackoverflow.com/questions/19179799/how-to-identify-ios-device-uniquely
Pero esta solución también tiene el mismo problema que ya te han comentado. El usuario puede desinstalar la app y volverla a instalar para realizar otro registro: el UUID anterior se habría perdido.
¿Realmente necesitas identificar al dispositivo? Apple se ha empeñado en que esto no sea posible para evitar que terceras empresas puedan atacar la privacidad de sus usuarios. Te va a ser difícil encontrar una solución en este sentido ¿Realmente necesitas identificar el dispositivo y no al usuario o a la instalación?
Lo que necesito es que un usuario no cree varias cuentas desde el mismo dispositivo. La app tiene una parte de gamificacion con recompensa y podría darse la posibilidad de que un mismo usuario lo utilizara de forma fraudulenta.
No se me ocurre nada, si no es identificando el dispositivo y asignandole un usuario.
Gracias por por ayudar, cualquier sugerencia es buena
También tiene algunas ventajas, por ejemplo cuando un usuario se desinstala la App el servicio APN te indica que el token ya no es válido (y lo podrías reflejar en tu base de datos). ¿Cómo lo haces con el "identifier for vendor"?
Además el "identifier for vendor", se calcula en base al Bundle ID que haya puesto el desarrollador, mientras que el "device token" se calcula encriptando el certificado único del dispositivo, ya que es un identificador opaco que los APN desencriptan para saber a que dispositivo real enviar la notificación. Por lo que estrictamente hablando, se acerca más a lo del "device fingerprinting" que se sugiere.
Estoy desarrollando una app en iOS, y me interesa que solo se pueda realizar un registro por dispositivo. Pero no se si esto es posible y que requisitos serian necesarios.
Si alguien sabe si hay alguna forma de hacerlo, por favor a ver si me puede orientar unpoco.
Muchas gracias.
04/09/2015 13:37
En su lugar introdujo otro identificador, identifierForVendor, de la clase UIDevice.
Echa un vistazo a esa clase, en concreto, [[[UIDevice currentDevice] identifierForVendor] UUIDString]; representa un string único para cada dispositivo.
El único problema con esta cadena es que el usuario tiene la habilidad para resetearlo y además no se conserva entre instalaciones de una misma aplicación, esto es, si instalas la aplicación, luego la desinstalas y la vuelves a instalar, el identificador cambia.
Pero esto último tiene solución utilizando la única parte del sistema que no se borra entre instalaciones. Espero que te ayude.
06/09/2015 13:26
Lo de que no se conserva entre instalaciones, según la documentación, se conserva si hay alguna otra app tuya instalada, es decir, que sólo cambiaría si desinstala todas tus aplicaciones
En mis pruebas, si la app ha sido descargada de la app store, no cambia nunca ni aunque desinstales todas las aplicaciones
05/09/2015 18:02
10/09/2015 12:36
Pero esta solución también tiene el mismo problema que ya te han comentado. El usuario puede desinstalar la app y volverla a instalar para realizar otro registro: el UUID anterior se habría perdido.
¿Realmente necesitas identificar al dispositivo? Apple se ha empeñado en que esto no sea posible para evitar que terceras empresas puedan atacar la privacidad de sus usuarios. Te va a ser difícil encontrar una solución en este sentido ¿Realmente necesitas identificar el dispositivo y no al usuario o a la instalación?
10/09/2015 14:51
Lo que necesito es que un usuario no cree varias cuentas desde el mismo dispositivo. La app tiene una parte de gamificacion con recompensa y podría darse la posibilidad de que un mismo usuario lo utilizara de forma fraudulenta.
No se me ocurre nada, si no es identificando el dispositivo y asignandole un usuario.
Gracias por por ayudar, cualquier sugerencia es buena
15/09/2015 13:00
UIApplication.sharedApplication().registerForRemoteNotifications()
15/09/2015 18:26
15/09/2015 21:58
Además el "identifier for vendor", se calcula en base al Bundle ID que haya puesto el desarrollador, mientras que el "device token" se calcula encriptando el certificado único del dispositivo, ya que es un identificador opaco que los APN desencriptan para saber a que dispositivo real enviar la notificación. Por lo que estrictamente hablando, se acerca más a lo del "device fingerprinting" que se sugiere.