92 votes

Pourquoi tant d'applications demandent-elles la permission de lire l'état et l'identité du téléphone ?

Pourquoi tant d'applications demandent-elles la permission de lire l'état et l'identité du téléphone ? Plus précisément :

Phone calls
   read phone state and identity

Par exemple, Quickpedia est un portail Wikipédia, mais il veut avoir accès au téléphone. Quelle en est l'explication ?

enter image description here

0 votes

Ce n'est pas vraiment, pour "ouais ouais, cette application a cette permission d'envoyer des sms et de sonner un numéro premium dans votre dos" qui est ce que les gens supposez . La réponse de @Christian ci-dessous a fait mouche ! C'est légitime dans de nombreux cas, et bien souvent, les développeurs ont tendance à oublier de réduire les autorisations (peut-être un héritage des premiers jours de développement d'une application).

1 votes

@t0mm13b Je ne pense pas qu'il y ait une grande demande pour des permissions réduites en dehors des techniciens et des geeks de la vie privée (moi inclus). Donc, si les fabricants d'applications font simplement norme pour exiger l'ensemble des autorisations, les consommateurs supposeront alors que de nombreuses autorisations sont acceptables pour n'importe quelle application. Le gouvernement ne fait pas pression sur eux pour qu'ils utilisent des autorisations minimales, et jusqu'à présent le marché ne fait pas pression sur eux. En d'autres termes, il n'y a pas ou peu de frais pour que les applications requièrent beaucoup d'autorisations.

62voto

Elle permet à l'application de lire un identifiant unique (un identifiant de téléphone appelé IMEI ) qui est associé à votre téléphone.

Il peut donc aider à la protection contre la copie ou à la tentative de suivi du nombre d'utilisateurs.

3 votes

Voir cette question de l'OS sur l'obtention d'un ID unique d'un téléphone, il semble que le moyen (actuellement) le plus fiable pour un développeur d'obtenir un ID unique d'un téléphone nécessite la permission Read Phone State stackoverflow.com/questions/2785485/

40voto

Il y a une autre raison à cela que l'identification unique. Je pense que la moitié des applications n'accèdent pas du tout à ces valeurs. Le problème est que pour une version inférieure jusqu'à Android 1.5, cette permission n'existe pas. Tout le monde pouvait accéder à ces valeurs sans rien demander.

Par conséquent, si vous créez une application compatible avec la version 1.5, cette autorisation sera automatiquement ajoutée pour émuler la sécurité inférieure d'Android 1.5. Vous pouvez donc ignorer cette autorisation dans la plupart des cas, car il s'agit généralement d'un simple problème de compatibilité.

2 votes

Il en va de même pour l'accès à la carte SD.

2 votes

C'est vrai - mais cela n'explique pas pourquoi les applications pour les versions 2.x et supérieures le demandent si souvent.

19voto

La raison en est qu'Android 1.5 et les versions antérieures n'exigeaient pas que l'application demande spécifiquement ces permissions et les accordaient automatiquement. Depuis Android 1.6, ces autorisations doivent être spécifiquement demandées par l'application. Toutefois, si vous spécifiez que votre application peut fonctionner sur des appareils équipés d'Android 1.5 et moins, cette autorisation est ajoutée à l'application par défaut et le marché indique que cette autorisation a été demandée par l'application.

En résumé, l'application n'accède peut-être pas à l'état et à l'identité de votre téléphone, mais si le développeur a spécifié que son application pouvait fonctionner sur des appareils de taille inférieure ou égale à 1.5, cette autorisation sera affichée.

0 votes

Avez-vous un lien vers une documentation montrant cela ?

0 votes

developer.Android.com/reference/Android/os/ donne une liste complète des identifiants des versions cibles et des changements de permissions (entre autres différences) entre elles.

19voto

Milner Points 533

Cette question me préoccupe depuis un certain temps. Aujourd'hui, j'ai enfin décidé d'aller au fond des choses.

Le Playstore propose une application appelée permission.READ_PHONE_STATE qui demande READ_PHONE_STATE comme seule permission, et ne fait rien d'autre que d'imprimer toutes les données auxquelles il peut accéder avec ou sans l'utiliser. Je l'ai installé sur mon LG Optimus 4X Il s'agit d'un ordinateur qui a été rooté sur Android 4.0.3, et qui a révoqué la permission en utilisant LBE. Les résultats sont assez intéressants, comme le montrent les captures d'écran suivantes :

Screenshot 1 Screenshot 2 Screenshot 3
Informations recueillies par l'application permission.READ_PHONE_STATE (cliquez sur les images pour les agrandir)

Comme vous pouvez facilement le voir, même certaines informations que le dev, bien qu'inaccessibles sans la permission, étaient librement accessibles : mon numéro de boîte aux lettres (remarque : Oui, c'est le bon ; avec mon fournisseur, c'est le raccourci lorsqu'on compose un numéro depuis son propre appareil, donc je peux l'afficher librement ;) A la fin de la première capture d'écran, vous voyez :

  • CALL_STATE_IDLE . Donc pas d'appel téléphonique entrant, sortant, ou en cours. Aucune application n'a besoin de cette permission pour se mettre en arrière-plan sur les appels entrants.

Il est même possible de voir si les données mobiles sont actives ( DATA_DISCONNECTED (J'étais en WiFi lorsque j'ai fait les captures d'écran, comme vous pouvez le voir dans la barre de notification), le pays dans lequel vous vous trouvez, votre fournisseur (y compris quelques données techniques sur lui), si vous avez une carte SIM, ou si vous êtes en itinérance.

Les seules choses pas accessibles donc des données d'identification : IMEI, SIMID, IMSI, et votre propre numéro de téléphone.

Conclusion : Cette autorisation n'est nécessaire qu'à des fins d'identification, rien d'autre.

Pourquoi tant d'applications en ont-elles besoin alors ?

  • Pour les modules publicitaires, il est probable que 1
  • Parce que le dev pensée il en a besoin (comme l'ont souligné certaines réponses ici) 2
  • Étant donné que l'application en question est conçue pour fonctionner (également) sur Android 1.5 et inférieur (facile à trouver, car cela est indiqué sur le site web de l'entreprise), elle ne peut être exécutée que sur des ordinateurs portables. Google Play ).

Les probabilités sont exactement dans cet ordre, IMHO.


1 Note de Le message de Dan sur le chat :

La politique de Google Play interdit désormais aux applications d'obtenir votre IMEI pour vous identifier à des fins publicitaires. Toutes les bibliothèques publicitaires ont été mises à jour pour utiliser l'"ID publicitaire" fourni par les services Google-Play. Toute application qui utilise encore l'IMEI à cette fin doit être signalée à Google.

Comme il est difficile pour l'utilisateur de savoir à quoi sert l'application en utilisant l'IMEI, vous devez d'abord demander au développeur de vous expliquer.


2 Un autre développeur vient de me signaler une différence subtile : alors que la permission n'est pas nécessaire pour lire l'état actuel de l'appel (comme je l'ai souligné), il pourrait être nécessaire d'enregistrer une auditeur afin d'être notifié à sur changements de l'état de l'appel (voir : Détection des appels téléphoniques entrants et sortants sur Android ). Bien qu'il semble y avoir des moyens de gérer cela automatiquement lorsque le système appelle onPause Mais il n'est pas toujours possible de le faire : pensez à votre réveil. Vous ne voudriez peut-être pas qu'il se déclenche automatiquement arrêté lors d'un appel entrant - surtout pas lorsque votre profil est réglé sur le volume de la sonnerie "en sourdine".


3 Encore une fois, un correction de Dan : Vous n'obtenez la permission supplémentaire par défaut que si la version "cible" de votre application est 1.5. Si vous ciblez une version ultérieure mais que votre version minimale est la 1.5, la permission ne sera pas ajoutée automatiquement.


Mises à jour

  1. Intéressant qu'il y ait un question ouverte (21504) de diviser READ_PHONE_STATE dans ce qui est nécessaire pour a) détecter les appels entrants et connexes (téléphonie), et une deuxième permission pour les détails d'identification (IMEI, IMSI, etc). Ouvert en 11/2011, toujours pas travaillé. Démarrez-le si vous êtes intéressé :)
  2. Et oui, il existe un moyen d'obtenir la même chose (détection des appels entrants). sans el READ_PHONE_STATE l'autorisation, comme par exemple comme l'a souligné Arno Welzel . Comme un appel téléphonique entrant déclencherait la sonnerie, que pourrait être utilisé avec onAudioFocusChange() qui ne nécessite pas de permission particulière : si elle est déclenchée par cette fonction, l'application peut vérifier le fichier État d'appel (là encore, sans autorisation spéciale) pour voir s'il y a un appel entrant.

0 votes

Je pense que vous devez enlever la partie où vous dites qu'aucune application n'a besoin de cette permission pour être en arrière-plan des appels entrants. Vous faites déjà cette remarque dans la note de bas de page 2, mais c'est contradictoire. Voir aussi developer.Android.com/reference/Android/telephony/

0 votes

@Mikel Vous avez partiellement raison. Utiliser cette permission est le moyen le plus "facile" d'accomplir la tâche, mais ce n'est pas le seul. Il est possible de le faire sans, comme l'a souligné un développeur (était-ce sur le chat ? Malheureusement, j'ai perdu le lien). Comme pour beaucoup d'autres choses, l'utilisation des API de Google rend certaines choses beaucoup plus faciles à accomplir (tout en liant votre application à l'éco-système Google). Je ne suis pas un développeur, donc je ne peux pas dire combien de travail supplémentaire l'autre voie impliquerait.

0 votes

Je ne suis pas encore un développeur Android non plus, et je suis d'accord qu'il semble que certains cas d'utilisation soient couverts par onPause(). Dire simplement que "Aucune application n'a besoin de cette permission" me semble faux. Cela ressemble plus à "certaines applications peuvent avoir besoin de cette permission", par exemple si elles fonctionnent en arrière-plan. Notez également que la réception de l'intention de diffusion doit certainement être plus efficace que l'interrogation répétée de l'état du téléphone.

10voto

Kasper Peeters Points 201

De nombreux éditeurs de publicités utilisent cette autorisation pour obtenir l'ID du téléphone à toutes sortes de fins de suivi. Il existe d'autres moyens d'obtenir un identifiant unique, mais ils sont malheureusement bogués dans les anciennes versions d'Android (l'histoire est plus compliquée, voir par ex. https://stackoverflow.com/questions/2785485/is-there-a-unique-Android-device-id o http://Android-developers.blogspot.com/2011/03/identifying-app-installations.html pour une histoire plus complète).

Ainsi, si l'application utilise des publicités, il est fort probable que l'application elle-même n'ait pas besoin de l'autorisation READ_PHONE_STATE, mais uniquement le fournisseur de publicités.

1 votes

C'est À mon avis, c'est le principal problème qui se cache derrière tout cela ! Bien vu.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X