Moyen le moins invasif d'identifier de manière unique l'utilisateur Android

Comment Pouvez-vous identifier de manière unique un utilisateur qui a installé votre application afin que:

  1. Vous saurez que c'est eux s'ils suppriment et réinstallent votre application;
  2. vous saurez que ce sont eux s'ils installent votre application sur un deuxième appareil qu'ils ont l'intention d'utiliser simultanément?

À titre d'exemple, je vois que L'application Netflix sera automatiquement liée à votre compte de bureau sans aucune interaction de l'utilisateur. Je suppose qu'ils utilisent accountManager.getAccounts() ou une méthode similaire, car ils nécessitent également l'autorisation GET_ACCOUNTS. Mais bien sûr, cette autorisation est marquée comme Protection level: dangerous. Y a-t-il une technique pour le faire qui est moins invasive ou potentiellement alarmante?


La clé pour y répondre est d'être à la fois simple (pour l'utilisateur) et minimalement invasive. Android fournit des tas de façons d'identifier les utilisateurs et beaucoup de ces moyens impliquent percer la vie privée d'un utilisateur, et si c'est le seul moyen, je ferai ce que je fais maintenant (inscription par e-mail en option). Je veux juste un moyen pour mon application de savoir si un utilisateur est déjà enregistré dans mon système à travers les installations sans avoir à interviewer l'utilisateur (nom d'utilisateur/mot de passe, adresse e-mail, OAuth tiers, etc.).

Mes principales raisons sont:

  1. Je ne veux pas de demandes de support des utilisateurs qui ont abandonné leur contenu après une réinstallation; et
  2. Je ne veux pas héberger beaucoup de contenu orphelin.
23
demandé sur Andrew 2017-02-07 07:45:51

6 réponses

Jetez un oeil à Authentification Firebase . Il est tout à fait transparente et ne nécessite pas beaucoup d'efforts pour intégrer. En outre, il ne se sent pas intrusif ou encombrant pour l'utilisateur final.

Voici un tutoriel vidéo de Google.

Modifier: Dans le cas où vos utilisateurs sont sûrs d'avoir un appareil avec un numéro de téléphone, vous pouvez utiliser AccountKit. C'est aussi ce qu'ils appellent Ota (authentification unique). AccountKit utilise uniquement le numéro de téléphone des utilisateurs pour vérifier et valider les utilisateurs.

Modifier: L'authentification Firebase dispose désormais de la "vérification du téléphone" qui est similaire à AccountKit mentionné ci-dessus. Les deux sont de bons services. Cependant, Firebase phone verification vous permet de créer votre propre interface utilisateur à partir de zéro (ce qui signifie un meilleur contrôle que AccountKit). De plus, si vous ne voulez pas créer votre interface utilisateur, vous pouvez toujours utiliser FirebaseUI

9
répondu Abdul Wasae 2017-10-24 04:30:19

J'ai implémenté quelque chose qui semble peu similaire à votre truc par notification push, je peux obtenir une erreur si l'Utilisateur a désinstallé mon application(et à partir de l'ID d'enregistrement, je reçois l'utilisateur), et s'il est réinstallé, il obtient un nouvel ID d'enregistrement, et essaie d'obtenir l'UUID de l'utilisateur pour]}

4
répondu Assem Mahrous 2017-02-22 09:58:35

Je pense que le moyen le plus simple serait d'utiliser UUID et de stocker le hachage sur sharedPreferences. Vous devez générer L'UUID le plus tôt possible dans votre application.

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();
}
2
répondu danielpsantiago 2017-02-22 15:11:19

Je pense que la meilleure façon serait de mise en œuvre de connexion avec Google ou Facebook. Ceci est tout à fait transparente pour les utilisateurs, assez sûr (comme Google et Facebook considérés comme fiables), vous n'avez pas besoin de mettre en œuvre votre inscription par e-mail et vous aurez l'identité sur tous les appareils.

1
répondu Alex Radzishevsky 2017-02-19 10:02:05

Si votre application est Android uniquement et que vous souhaitez fournir une identité sans création de compte pour l'utilisateur, je crois que l'utilisation du nom/id du compte Google est le meilleur choix (accès à L'Id /Nom D'utilisateur du compte Google via Android ) puisque vous devez utiliser le compte Google sur un téléphone Android (sauf si

Si vous souhaitez uniquement aborder le premier point de votre question (identifier après la réinstallation), il existe un ID de périphérique- Secure.getString(getContext().getContentResolver(), Secure.ANDROID_ID); Bien que ce ne soit pas 100% fiable (par exemple, la réinitialisation D'usine réinitialise cette valeur)

1
répondu krp 2017-05-23 12:25:33

La norme pour atteindre ce type de fonctionnalité est l'utilisation de JSON Web tokens (JWT) en conjonction avec le trafic API restful standard.

En supposant que votre application android interagit avec une api RESTful pour toutes les opérations grossières et la logique métier, l'utilisation D'un JWT comme identifiant d'authentification pour votre api peut très bien fonctionner. Vous pouvez intégrer des informations dans chaque JWT vous permettant d'identifier ce que vous voulez (l'id de l'utilisateur dans la base de données, l'id de périphérique whereve la connexion de l'utilisateur, etc). Un JWT est essentiellement une infrastructure de données vous permettant de stocker des informations à utiliser par L'API.

Quelques bases pour comment cela fonctionne:

  1. obtenir le JWT dans l'application: un utilisateur se connecte à l'application en utilisant son nom d'utilisateur / mot de passe. Le api renvoie ensuite un JWT chiffré à utiliser par le client pour toutes les demandes futures. Ne pas essayer de le faire le cryptage de vous-même. Toute langue qui peut gérer le service d'une api aura bibliothèques pour ce.
  2. Utilisation des informations dans le JWT : le JWT est lui-même une structure de données. Par exemple, cela pourrait ressembler à ceci:

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

    Votre api décryptera le JWT lorsqu'il est fourni pour authentification via l'en-tête de la requête, puis avoir ces informations disponibles dans le contexte de la session.

Si vous fournissez le langage utilisé par votre api, je pourrais recommander une bibliothèque.

Je conclurai en me référant à la finale exigence que vous avez soumise qui stipule essentiellement que vous ne voulez pas avoir à interviewer l'utilisateur à travers les installations. Si je comprends votre Signification, que vous voulez qu'un utilisateur puisse simplement installer l'application et commencer à l'utiliser sans fournir d'informations d'authentification, il n'y a aucun moyen d'y parvenir en toute sécurité. Vous pourriez être en mesure de trouver un moyen hackish pour le faire fonctionner, mais il sera fondamentalement précaire.

0
répondu melchoir55 2017-02-22 04:41:33