web-dev-qa-db-fra.com

Autorisation GET_ACCOUNTS lors de l'utilisation de GCM - Pourquoi est-ce nécessaire?

J'ai une application, avec des notifications Push implémentées.

Je veux comprendre la raison pour laquelle nous avons besoin de "GET_ACCOUNTS" (Android.permission.GET_ACCOUNTS), lors de la mise en œuvre de GCM? Certains utilisateurs expriment des inquiétudes concernant cette autorisation. J'ai utilisé cette autorisation dans le manifeste telle qu'elle a été donnée sur le site officiel ici .

Dans quelle mesure cette autorisation est-elle sûre? et si je le supprime de mon manifeste, les notifications Push fonctionneront-elles?

42
Vamsi Challa

Il utilise une connexion existante pour les services Google. Pour les appareils antérieurs à la version 3.0, cela nécessite que les utilisateurs configurent leur compte Google sur leurs appareils mobiles. Un compte Google n'est pas obligatoire sur les appareils exécutant Android 4.0.4 ou supérieur.

C'est donc la raison de l'exigence de l'autorisation

<uses-permission Android:name="Android.permission.GET_ACCOUNTS" />

pour lire le compte Google.

En savoir plus à ce sujet Présentation de GCM


La connexion au compte Google n'est plus nécessaire pour que GCM fonctionne. Vous n'avez donc pas besoin du Android.permission.GET_ACCOUNTS autorisation.

Si vous utilisez l'API GCM avec GoogleCloudMessaging.register ), vous n'avez plus besoin de configurer le compte Google sur une version Android. Mais si vous utilisez la bibliothèque obsolète ( GCMRegistrar.register ), vous avez toujours besoin d'un compte Google sur les anciennes versions (avant ICS).

Plus de détails sur https://groups.google.com/forum/#!topic/Android-gcm/ecG-RfH-Aso . Un autre fil similaire est Pourquoi la connexion au compte Google est-elle requise pour que GCM fonctionne pour les appareils sous le système d'exploitation 4.0.4?

61
Pankaj Kumar

L'autorisation GET_ACCOUNTS n'est plus nécessaire pour que GCM fonctionne. Auparavant, il était nécessaire pour l'inscription à GCM, mais une récente mise à jour des services Play a cessé d'utiliser le compte Google, même sur Froyo et Gingerbread. Si vous vous inscrivez à GCM avec Play Services (c'est-à-dire avec GoogleCloudMessaging.register), vous n'avez plus besoin de cette autorisation sur aucune version Android. Si vous utilisez la bibliothèque obsolète (GCMRegistrar.register), vous avez toujours besoin d'un compte Google sur la version antérieure à la version 4.0.4, qui nécessite cette autorisation.

Source (publié sur le groupe Google Android-gcm par un développeur Google):

Quelques antécédents:

L'enregistrement Froyo et Gingerbread est implémenté dans GoogleServicesFramework, en utilisant le compte Google pour l'enregistrement. Cela a entraîné de nombreuses erreurs d'authentification pour les personnes dont le compte n'était pas en bon état.

À partir d'ICS, GCM ne dépend pas ou n'utilise pas le compte Google - vous pouvez l'utiliser avant d'ajouter un compte ou sans aucun compte.

La mise à jour "Play Services" implémente le nouveau schéma sur tous les appareils - mais il semble qu'un petit nombre d'appareils ont des problèmes avec cela, nous étudions - mais les chiffres sont bien inférieurs à ceux de l'ancien schéma.

13
Eran

Comme tout le monde ici l'a dit, GET_ACCOUNT est nécessaire pour les appareils Android inférieurs à 4.0.4.

Si vous êtes comme moi et que vous avez installé une bibliothèque qui ajoute automatiquement cette autorisation mais que vous n'en avez pas besoin, vous pouvez demander au AndroidManifest de supprimer l'autorisation en ajoutant l'autorisation à avec le tools:node="remove" attribut comme ceci:

Dans votre AndroidManifest.xml fichier, assurez-vous que le xmlns:tools attribuez-le défini dans votre balise manifest, puis ajoutez l'autorisation avec remove set:

<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
          xmlns:tools="http://schemas.Android.com/tools"
          ...>

  ...

  <uses-permission Android:name="Android.permission.GET_ACCOUNTS" tools:node="remove" />

  ...

</manifest>

Mot ou avertissement que cela ne fonctionne jamais pour moi mais je sais que cela a fonctionné pour les autres. Si vous pouvez voir ce que je fais mal ou avoir plus d'informations à ce sujet, veuillez commenter!

* Modifier: un rapport de bogue est ouvert pour que cette fonctionnalité fonctionne: https://bugzilla.xamarin.com/show_bug.cgi?id=4815

6
hvaughan3

quand vous utilisez

compiler 'com.google.Android.gms: play-services: 7.5.0' ajouter le fichier build.gradle signifie que l'autorisation GET_ACCOUNT a été ajoutée automatiquement.

  • par exemple, si le développeur doit utiliser uniquement admob dans le projet, spécifiez uniquement cette autorisation dans le fichier build.gradle compilez 'com.google.Android.gms: play-services-ads: 7.5.0' si vous avez une autre clarification, consultez ce lien https://developers.google.com/Android/guides/setup
3
user2431979

Je ne pense pas que ce soit réellement le cas. Je l'ai testé sur un appareil Gingerbread fraîchement réinitialisé avec un nouveau compte Gmail et je pouvais très bien recevoir des messages GCM sans cette autorisation. La documentation est donc FAUX.

1
markostamcar

GET_ACCOUNT consiste à vérifier si l'utilisateur a synchronisé le compte Google sur mobile et à générer la valeur clé pour chaque utilisateur (chaque compte Google). Cela est nécessaire si l'appareil exécute une version inférieure à Android 4.0.4.

0
Brinda K