fromhtml example android identity android-permissions

example - Manera menos invasiva para identificar de forma única a los usuarios de Android



html fromhtml android example (6)

Creo que la forma más sencilla sería utilizar UUID y almacenar el hash en las preferencias compartidas. Debería generar el UUID lo antes posible en su aplicación.

sharedPrefs = context.getSharedPreferences(APP_SHARED_PREFS,Activity.MODE_PRIVATE); if (sharedPrefs.getString("YOUR-KEY-TO-THE-UUID") == null || "".equals(sharedPrefs.getString("YOUR-KEY-TO-THE-UUID"))){ prefsEditor = sharedPrefs.edit(); prefsEditor.putString("YOUR-KEY-TO-THE-UUID", UUID.randomUUID().toString()); prefsEditor.commit(); }

¿Cómo puede identificar de manera única a un usuario que ha instalado su aplicación de modo que:

  1. Sabrás que son ellos si eliminan y reinstalan tu aplicación;
  2. ¿Sabrá que son ellos si instalan su aplicación en un segundo dispositivo que pretenden usar simultáneamente?

A modo de ejemplo, veo que la aplicación Netflix se vinculará automáticamente a su cuenta de escritorio sin la interacción del usuario. Supongo que utilizan accountManager.getAccounts() o un método similar, porque también requieren el permiso GET_ACCOUNTS . Pero, por supuesto, ese permiso está marcado como Protection level: dangerous . ¿Hay alguna técnica para hacer esto que sea menos invasiva o potencialmente alarmante?

La clave para responder esto es ser simple (para el usuario) y mínimamente invasivo. Android proporciona un montón de formas de identificar a los usuarios y muchas de esas formas implican perforar la privacidad de un usuario, y si esa es la única manera, haré lo que hago ahora (registro de correo electrónico opcional). Solo quiero una forma para que mi aplicación sepa si un usuario ya está registrado en mi sistema a través de instalaciones sin tener que entrevistar al usuario (nombre de usuario / contraseña, dirección de correo electrónico, OAuth de terceros, etc.).

Mis principales razones son:

  1. No quiero solicitudes de soporte de usuarios que han dejado huérfano su contenido después de una reinstalación; y
  2. No quiero alojar mucho contenido huérfano.

Creo que la mejor manera sería implementar el inicio de sesión con Google o Facebook . Esto es bastante sencillo para los usuarios, lo suficientemente seguro (ya que Google y Facebook consideran de confianza), no necesita implementar su registro de correo electrónico y tendrá identidad en todos los dispositivos.


Echa un vistazo a la autenticación Firebase . Es bastante transparente y no requiere mucho esfuerzo para incorporarlo. Además, no se siente intrusivo o engorroso para el usuario final.

Aquí hay un video tutorial de Google.

EDITAR: En caso de que sus usuarios estén seguros de tener un dispositivo celular con un número de teléfono, puede usar AccountKit . También es lo que ellos llaman OTA (One Time Authentication). AccountKit usa solo el número de teléfono de los usuarios para verificar y validar a los usuarios.

EDITAR: Firebase Authentication ahora presenta ''Verificación del teléfono'', que es similar a AccountKit mencionado anteriormente. Ambos son buenos servicios. Sin embargo, la verificación del teléfono Firebase le permite crear su propia interfaz de usuario desde cero (lo que significa un control mucho mejor que AccountKit). Además, si no desea realizar su UI, siempre puede usar FirebaseUI


El estándar para lograr este tipo de funcionalidad es a través del uso de tokens web JSON (JWT) junto con el tráfico api de descanso normal.

Asumiendo que su aplicación de Android interactúa con una API RESTful para todas las operaciones y la lógica de negocios crudlike, luego usar un JWT como un identificador de autenticación para su API puede funcionar bastante bien. Puede incrustar información en cada JWT, lo que le permite identificar lo que quiera (la identificación del usuario en la base de datos, la identificación del dispositivo desde donde el usuario inició sesión, etc.). Un JWT es esencialmente una estructura de datos que le permite almacenar información para ser utilizada por la API.

Algunos conceptos básicos de cómo funciona esto:

  1. Cómo obtener el JWT en la aplicación : un usuario inicia sesión en la aplicación con su nombre de usuario / contraseña. La API luego devuelve un JWT encriptado para que lo use el cliente para todas las futuras solicitudes. No intente hacer el cifrado usted mismo. Cualquier lenguaje que pueda manejar el servicio de una api tendrá bibliotecas para esto.
  2. Uso de la información en el JWT : el JWT es en sí mismo una estructura de datos. Por ejemplo, podría verse así:

    { user_id: 1, device_id: 44215, device_os: android, }

    Su API descifrará el JWT cuando se suministre para la autenticación a través del encabezado de la solicitud y luego tendrá esa información disponible en el contexto de la sesión.

Si proporciona el idioma utilizado por su API, entonces podría recomendar una biblioteca.

Para concluir, me referiré al requisito final que presentó, que establece esencialmente que no desea tener que entrevistar al usuario en todas las instalaciones. Si entiendo su significado, que desea que un usuario pueda simplemente instalar la aplicación y comenzar a usarla sin proporcionar credenciales de autenticación, no hay forma de lograrlo de manera segura. Es posible que puedas encontrar una manera pirata para que funcione, pero será fundamentalmente inseguro.


He implementado algo que parece poco similar a lo tuyo por medio de una notificación push, puedo obtener un error si el usuario desinstaló mi aplicación (y de la identificación de registro obtengo al usuario), y si está instalado, obtiene una nueva identificación de registro y prueba para obtener el usuario UUID para diferentes dispositivos


Si su aplicación es solo para Android y le gustaría proporcionar una identidad sin creación de cuenta para el usuario, creo que usar el nombre / identificación de la cuenta de Google es la mejor opción ( Acceder a la identificación de la cuenta de Google / nombre de usuario a través de Android ) ya que tiene que usar Google Cuenta en el teléfono Android (a menos que usted lo raíz, elimine los servicios de Google Play, etc.).

Si solo desea abordar el primer punto de su pregunta (identificar después de reinstalar), hay un Id. De dispositivo: Secure.getString(getContext().getContentResolver(), Secure.ANDROID_ID); aunque no es 100% confiable (fe Restablecimiento de fábrica restablece este valor)