Android: obtenez l'ID utilisateur sans avoir besoin d'autorisations effrayantes (pour utilisateur)?

Afin de gérer les préférences des utilisateurs, actuellement je saisis le nom d'utilisateur google (effectivement l'adresse électronique qu'ils ont enregistrée sur le périphérique) et en utilisant (un hash de) qui, en tant qu'utilisateur, identifie les différents utilisateurs. Quelque chose se rapporte à ce qui est décrit ici .

Que tout fonctionne bien, mais certains utilisateurs sont (de manière compréhensible) effrayés par toute permission qui semble donner à l'application un pouvoir pervers pour parcourir les informations ou les contacts de leur compte.

  • Android: copier des fichiers d'un répertoire à un autre
  • Envoi d'une notification d'un service dans Android
  • Envoyer un bitmap à l'aide d'Android
  • Parfois Fragment non attaché à Activity (onCreateOptionsMenu)
  • HttpUnit / HtmlUnit équivalent pour Android
  • Java missing required source folder: 'gen'
  • EDIT: ce problème est encore plus sévère avec la façon dont Google a maintenant mis en place des Groupes de Permission dans le schéma d' autorisation d'exécution de l'Android 6. Ils ont mis GET_ACCOUNTS dans le groupe d'autorisations CONTACTS . Donc maintenant, afin de générer un identifiant d'utilisateur anonyme unique, l'utilisateur doit se présenter avec une boîte de dialogue indiquant:

    Permettre à cette application d'accéder à vos contacts? | Refuser | Autoriser |

    Quelle erreur est-ce? Mon application n'a pas envie d'accéder aux contacts, mais l'utilisateur est invité à accorder l'autorisation pour que l'application accède aux contacts! Oui, il est possible d'expliquer à l'utilisateur une boîte de dialogue distincte qui, en fait, l'accès aux contacts n'est PAS requis, mais ils obtiennent toujours la boîte de dialogue du système de stock qui leur demande d'autoriser l'accès aux contacts … naturellement ils Penserai "pourquoi est-ce que je suis appelé à accorder cette autorisation si l'accès aux contacts n'est pas nécessaire?" Et "est-ce que j'ai vraiment confiance au développeur? Ils disent que l'accès aux contacts n'est pas nécessaire, mais est-ce vraiment vrai?" … très très confus et une très mauvaise expérience de l'utilisateur IMHO (et l'opinion des autres aussi ).

    Je préférerais simplement éviter tout ce tracas et ma confusion et obtenir une ID utilisateur unique sans autorisation spéciale.

    Donc, existe-t-il une fonction stock ou une méthode dans le SDK qui renverra une ID utilisateur unique pour l'utilisateur, sans nécessiter d'autorisation supplémentaire? Je suis un peu surpris s'il n'y en a pas, car il semble tout à fait normal de vouloir … avoir une ID utilisateur pour gérer les utilisateurs de l'application.

    Deux points:

    (A) J'ai seulement besoin d'un identifiant anonyme … Je n'ai pas vraiment besoin de l'adresse électronique de l'utilisateur, et je ne voudrais jamais l'adresse électronique de l'utilisateur. Je ne vois donc pas pourquoi google ne peut pas fournir une méthode getUserID() qui renvoie une ID getUserID() , sans avoir à accorder d'autorisations spéciales à l'application.

    (B) Il doit s'agir d'une ID utilisateur, pas d'un ID d'appareil, de sorte qu'il fonctionnera sur tous les dispositifs de l'utilisateur enregistrés sur le même compte Google.

    Merci.

  • Comment puis-je gérer les sous-projets de sous-modules git dans Eclipse?
  • Changer l'activité de départ de l'application
  • Article simple spinner Android
  • Comment utiliser UsageStatsManager?
  • Android AlarmManager.setExactAndAllowWhileIdle () et WakefulBroadcastReceiver Ne fonctionne pas dans certains nouveaux appareils fabriqués et à bas prix
  • Version de mes propres bibliothèques Android
  • 4 Solutions collect form web for “Android: obtenez l'ID utilisateur sans avoir besoin d'autorisations effrayantes (pour utilisateur)?”

    Si vous utilisez Google Play Services, vous pouvez obtenir le type de compte et le nom de compte sans aucune autorisation supplémentaire.

    D'abord, ajoutez la dépendance suivante à build.gradle:

     compile 'com.google.android.gms:play-services-auth:8.4.0' 

    Ensuite, lancez l'intention du choix du compte:

     Intent intent = AccountPicker.newChooseAccountIntent(null, null, new String[]{GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE}, false, null, null, null, null); try { startActivityForResult(intent, REQUEST_CODE_EMAIL); } catch (ActivityNotFoundException e) { // This device may not have Google Play Services installed. // TODO: do something else } 

    Enfin, onActivityResult pour obtenir le type de compte et le nom du compte:

     @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE_EMAIL && resultCode == RESULT_OK) { String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME); String accountType = data.getStringExtra(AccountManager.KEY_ACCOUNT_TYPE); // TODO: do something with the accountName return; } super.onActivityResult(requestCode, resultCode, data); } 

    Source: https://stackoverflow.com/a/19444640/1048340

    Vous pouvez obtenir l'adresse courriel exacte de Gmail à l' aide de AccountPicker sans avoir à ajouter les autorisations.

    Votre application doit inclure les services Google Play mais elle n'a pas besoin d'autorisations.

    Tout ce processus échouera sur les anciennes versions d'Android (2.2+ est requis) , ou si Google Play n'est pas disponible, alors vous devriez considérer cette affaire.

    Exemple de code de la source:

     private static final int REQUEST_CODE_EMAIL = 1; private TextView email = (TextView) findViewById(R.id.email); // ... try { Intent intent = AccountPicker.newChooseAccountIntent(null, null, new String[] { GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE }, false, null, null, null, null); startActivityForResult(intent, REQUEST_CODE_EMAIL); } catch (ActivityNotFoundException e) { // TODO } // ... @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE_EMAIL && resultCode == RESULT_OK) { String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME); email.setText(accountName); } } 

    La source de l'information ci-dessus est: Cette réponse sur SO – à une question similaire mais légèrement différente posée dans le passé.

    This Post – a également quelques bonnes approches qui répondent à votre but.

    Vous pouvez utiliser un ID de publicité Google comme UUID, mais ce n'est pas un périphérique croisé (encore?):

    https://support.google.com/googleplay/android-developer/answer/6048248?hl=fr

    Cela va au moins se débarrasser de la demande d'autorisation effrayante.

    Je ne crois pas que Android / Google dispose d'un UUID à périphérique croisé qui ne nécessite pas d'autorisation, bien que Doubleclick de Google supposait en développer un.

    Malheureusement, il n'y a pas de solution pour le faire, même l'accès au compte le plus bas nécessite l'autorisation de l'utilisateur.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.