Ludovic ROLAND

Blog technique sur mes expériences de développeur.

Les permissions sous Android (1/6) : Android et les permissions

13 février 2016

En complément de mon cours sur la géolocalisation et la manipulation de Google Maps dans une application Android que j’écris actuellement pour OpenClassrooms, j’ai écrit un cours la gestion des permissions sous Android en revenant largement sur les nouveautés liées à Android 6.0.

Ce cours est actuellement dans le CourseLab d’OpenClassrooms et, par conséquent manque de visibilité. En attendant que le contenu du cours soit validé par l’équipe du site, je vais vous proposer une série de 6 articles correspondant à ce que j’ai pu écrire sur le site d’OpenClassrooms.

Plan

Introduction

Vous vous apprêtez à développer une application Android dans laquelle vous souhaitez accéder à la position de l’utilisateur, à ses contacts, son agenda ou encore ses photos ? Vous souhaitez savoir si vous avez le droit de le faire et si oui sous quelles conditions ? Ce cours est fait pour vous !

Android, comme l’ensemble des systèmes d’exploitations mobiles, évolue régulièrement afin de sans cesse proposer aux utilisateurs une meilleure expérience d’utilisation. Ces évolutions, de natures diverses (design, sécurité, etc.) ne font pas qu’impacter le système d’exploitation puisqu’elles touchent également les applications et donc ceux qui les développent.

Parmi les dernières évolutions qui ont impactées de manière forte les développeurs nous pouvons par exemple citer l’arrivée du material design et de nombreux composants graphiques avec Android 5, également appelé Android Lollipop :

  • toolbar ;
  • bouton flottant ;
  • snackbar ;
  • coordinator layout ;
  • etc.

Android 6, également nommé Android Marshmallow, a également apporté son lot de nouveautés dont une particulièrement impactante pour les développeurs : une toute nouvelle gestion des permissions.

Dans ce cours, je vous propose, dans un premier temps de revenir sur cette nouveauté pour bien comprendre ce qui change vraiment et quelles actions vous aller devoir prendre dans vos applications. Finalement, nous verrons ensemble comment implémenter tous ces changements au sein de votre application Android.

Android et les permissions

Dans ce premier chapitre, qui ne se veut pas technique, nous allons revenir sur ce qui change au niveau des permissions avec l’arrivée d’Android 6.0, mais avant ça, revenons sur le principe même des permissions.

Les permissions

Avant même de revenir sur le système de permissions avant l’arrivée d’Android Marshmallow, il convient de comprendre à quoi sert ce système.

Qu’est-ce qu’une permission ?

Une application mobile, quelque soit le système d’exploitation sur lequel elle tourne, peut potentiellement faire des milliers de choses. A titre d’exemple, une application peut :

  • envoyer / afficher des SMS ;
  • appeler ;
  • surfer sur internet ;
  • prendre des photos ;
  • visionner des photos ;
  • programmer un réveil ;
  • etc.

Pour tenter de garantir la sécurité des utilisateurs, une application, en fonction de ce quelle souhaite faire doit demander des permissions. Aussi, une application n’envoie pas et n’affiche pas des SMS, elle est autorisée à le faire. Une application mobile ne surfe pas sur internet, elle est autorisée à le faire. Une application mobile n’accède pas aux photos de l’utilisateur, elle est autorisée à le faire.

Déclarer qu’une application utilise telle ou telle permission permet aux utilisateurs qui installent et utilisent une application de potentiellement repérer un abus et / ou une utilisation malveillante.

Il ne faut bien évidemment pas tomber dans la paranoïa, aussi, ce n’est pas parce que votre application qui affiche les horaires de votre bus demande un accès à votre micro, votre appareil photo et l’espace de stockage du téléphone qu’il faut obligatoirement s’alarmer. Peut-être que cette application propose une fonctionnalité de commande vocale justifiant l’accès micro ? Peut-être également qu’il est possible de scanner des QR codes placés sur les arrêts de bus directement depuis l’application ? Peut-être que l’accès à l’espace de stockage est nécessaire pour mettre en cache certaines données ?

Vous l’aurez compris, il existe des centaines voir des milliers de cas d’utilisation pouvant justifier la demande d’une permission au sein d’une application, cependant, soyez prudents ! Grâce à ces permissions, qu’est-ce qui peut empêcher une application de scanner vos contacts pour récupérer leurs coordonnées, de lire vos SMS ou encore d’envoyer des SMS à un service payant ?

Connaître les permissions d’une application

Il existe deux moyens de connaître les permissions demandées par une application :

  • via la fiche de l’application sur le Google Play Store avant installation ;
  • via le gestionnaire d’application du terminal après installation ;

Avant de lancer l’installation d’une application depuis le Google Play Store, il est possible, à partir de la fiche de l’application, de consulter les permissions de l’application en cliquant sur “Détails des autorisations”.

Une fois l’application installée, il est possible de connaître les permissions accordées à l’application en passant par le gestionnaire d’applications de votre téléphone comme en témoigne la capture d’écran suivante :

La gestion des permissions sur Android

Avant Android 6.0

Avant Android 6.0 la gestion des permissions était peu poussée. En effet, sur certains systèmes d’exploitation, comme par exemple iOS, certaines permissions pouvaient être acceptées ou refusées de manière individuelle dans l’application, Android, dans ses anciennes versions, partait du principe qu’accepter l’installation d’une application c’était accepter toutes les permissions demandées.

Cette acceptation est une action utilisateur, puisqu’à l’installation de l’application, l’utilisateur doit accepter les permissions demandées par l’application.

Cette demande d’acceptation monolithique n’offre donc que peu de possibilités à l’utilisateur :

  • installer l’application et accepter les risques d’abus de celle-
  • ne pas installer l’application et se priver de ses services.

Depuis Android 6.0

Depuis Android 6.0 les règles ont légèrement changé !

Conscient du problème que nous avons évoqué quelques lignes plus haut, Google a décidé de se calquer sur ce que propose iOS : une demande explicite d’autorisation au moment où celle-ci est nécessaire.

Cela signifie que ce n’est pas parce qu’une application demande une autorisation qu’elle pourra nécessairement y avoir accès. Prenons un exemple simple : une demande de géolocalisation. Avant, à condition d’avoir déclaré la permission d’accès au GPS, une application pouvait tenter de vous géolocaliser sans votre consentement. Depuis Android 6.0, ce n’est plus suffisant. En effet, l’application doit, au moment de lancer la géolocalisation, vous demander explicitement l’autorisation de vous géolocaliser. Cette demande explicite se fait donc au sein de l’application à l’aide d’une boite de dialogue.

Comme vous pouvez le constater dans la capture d’écran ci-dessus, plusieurs scénarios sont possibles :

  1. autoriser la demande d’autorisation ;
  2. refuser la demande d’autorisation ;
  3. refuser la demande d’autorisation et demander à ne plus être questionné.

Bref, autant de scénario que vous devrez prendre en compte en tant que développeur ! ;)

A l’image de ce que proposait Android dans ses versions précédentes, il est toujours possible de connaître les permissions demandées par une application installée sur un téléphone grâce au gestionnaire d’application.

Si l’on compare la capture d’écran des permissions d’une application sur un téléphone qui n’est pas sous Android 6.0 et celle d’un téléphone qui est sous Android 6.0, on remarque une différente de taille hormis le design : sur Android 6.0 il est possible de désactiver ou activer une permission !

Cela signifie tout simplement, qu’à tout moment, l’utilisateur peut ne plus autoriser l’application à accéder à certaines fonctionnalités du téléphone (comme l’appareil photo, le GPS, etc.) même si la permission a été acceptée précédemment. C’est une information capitale qu’il conviendra de prendre en compte dans le développement de vos applications.

Les différentes permissions

Comme je le disais au cours des précédentes lignes, il existe de nombreuses permissions. Aussi, une application nécessite, par exemple, une permission pour :

  • accéder à internet
  • accéder aux photos de l’utilisateur
  • accéder aux contacts de l’utilisateur
  • etc.

La réponse est… non ! :D

Comme vous le faisiez dans une application pré-marshmallow, toutes les permissions devront apparaître dans le manifest de votre application. De ce côté là, rien ne change. Cependant, vous n’êtes pas obligé de demander explicitement l’autorisation d’utiliser une permission pour chacune d’entre elles.

En effet, depuis Android 6.0, Google distingue deux types de permissions :

  • les permissions normales ;
  • les permissions dangereuses.

Nous reviendrons sur ces deux types de permissions et sur ce qui les différencie dans le prochain chapitre.

En résumé

  • Avec Android 6.0 la gestion des permissions a complètement été revue.
  • Il existe deux types de permissions : les permissions normales et les permissions dangereuses.

Commentaires