Blog technique sur mes expériences de développeur.
21 février 2016
Dans le chapitre précédent, nous avons vu que l’on distingue deux types de permissions :
Dans ce chapitre, je vous propose de revenir sur ces deux types de permissions et d’étudier plus précisément ce qui les différencie.
L’intégralité de ce cours est disponible dans le CourseLab OpenClassrooms !
Une permission dite normale est une permission qui ne présente aucun risque pour l’utilisateur que ça soit d’un point de vue sécurité ou vie privée. a l’image de ce qui se faisait avant Android 6.0 les permissions qualifiées de normales sont automatiquement acceptées par l’utilisateur à l’installation de l’application et, même sous Android 6.0, ne peuvent pas être révoquées. Cela signifie que même depuis l’écran dédié dans le gestionnaire l’application, l’utilisateur n’a pas la possibilité d’activer ou désactiver une telle permission.
En tant que développeur, comment savoir qu’une permission est normale ?
Tout simplement en lisant la documentation. ;)
Comme je suis gentil, je vous propose ci-dessous la liste des permissions considérées comme normales par Android.
Permission |
---|
ACCESS_LOCATION_EXTRA_COMMANDS |
ACCESS_NETWORK_STATE |
ACCESS_NOTIFICATION_POLICY |
ACCESS_WIFI_STATE |
BLUETOOTH |
BLUETOOTH_ADMIN |
BROADCAST_STICKY |
CHANGE_NETWORK_STATE |
CHANGE_WIFI_MULTICAST_STATE |
CHANGE_WIFI_STATE |
DISABLE_KEYGUARD |
EXPAND_STATUS_BAR |
GET_PACKAGE_SIZE |
INTERNET |
KILL_BACKGROUND_PROCESSES |
MODIFY_AUDIO_SETTINGS |
NFC |
READ_SYNC_SETTINGS |
READ_SYNC_STATS |
RECEIVE_BOOT_COMPLETED |
REORDER_TASKS |
REQUEST_INSTALL_PACKAGES |
SET_TIME_ZONE |
SET_WALLPAPER |
SET_WALLPAPER_HINTS |
TRANSMIT_IR |
USE_FINGERPRINT |
VIBRATE |
WAKE_LOCK |
WRITE_SYNC_SETTINGS |
SET_ALARM |
INSTALL_SHORTCUT |
UNINSTALL_SHORTCUT |
Comme vous pouvez le constater, accéder à internet ne nécessite pas une demande expressive à l’utilisateur ce qui, entre nous, est une bonne chose. ;)
Une permission dite dangereuse, s’oppose à une permission dite normale puisqu’elle présente un risque potentiel pour l’utilisateur que ça soit d’un point de vue sécurité ou vie privée.
Le risque est-il vraiment présent ?
Bien évidemment !
Parmi ces permissions dangereuses, vous trouverez des permissions capables d’accéder à l’espace de stockage du téléphone et donc potentiellement de supprimer vos données comme vos photos ou vos musiques.
Une fois de plus, je tiens à mettre l’accent que parfois, ces permissions dangereuses ne sont pas utilisées de manière abusive et sont nécessaires au bon fonctionnement de l’application. Est-ce qu’une application de cartographie sans géolocalisation serait aussi utile ? Est-ce qu’une application permettant de recevoir et envoyer des mails serait aussi pratique sans un accès aux adresses e-mails de vos contacts pour vous les proposer en auto-complétion ?
A l’instar des permissions normales qui sont automatiquement acceptées par l’utilisateur à l’installation de l’application et qui ne peuvent pas être révoquées, les permissions dangereuses doivent explicitement être autorisées par l’utilisateur et peuvent à tout moment être autorisées ou au contraire refusées.
Du coup je dois demander plusieurs autorisations si je souhaite lire et écrire dans la base de données des SMS de l’utilisateur ?
Pas tout à fait. En réalité, les permissions dangereuses sont regroupées par groupe. Par exemple, le groupe “calendrier” regroupe l’ensemble des permissions permettant d’interagir avec le calendrier de l’utilisateur, à savoir :
La demande d’autorisation des permissions se fera donc toujours via le groupe. Aussi, vous ne demanderez jamais si vous pouvez lire les SMS de l’utilisateur, vous lui demanderez simplement si vous pouvez accéder à ses SMS. En cas de réponse positive, vous pourrez alors :
Autoriser un groupe de permission c’est donc autoriser toutes les permissions de ce groupe. Il n’est absolument pas possible de cibler une permission particulière. Même chose pour la désactivation des permissions via le gestionnaire d’applications du système d’exploitation. Comme en témoigne la capture d’écran suivante, il n’y a qu’une ligne globale pour chaque pictogramme qui représente alors un groupe.
En tant que développeur, comment connaître les permissions et leur groupe associé ?
Encore une fois, en lisant la documentation. ;)
Voici tout de même un récapitulatif de ce que vous trouverez dans la documentation :
Groupe | Permissions |
---|---|
CALENDAR | READ_CALENDAR WRITE_CALENDAR |
CAMERA | CAMERA |
CONTACTS | READ_CONTACTS WRITE_CONTACTS GET_ACCOUNTS |
LOCATION | ACCESS_FINE_LOCATION<bACCESS_COARSE_LOCATION |
PHONE | READ_PHONE_STATE CALL_PHONE READ_CALL_LOG WRITE_CALL_LOG ADD_VOICEMAIL USE_SIP PROCESS_OUTGOING_CALLS |
SENSORS | BODY_SENSORS |
SMS | SEND_SMS RECEIVE_SMS READ_SMS RECEIVE_WAP_PUSH RECEIVE_MMS |
STORAGE | READ_EXTERNAL_STORAGE WRITE_EXTERNAL_STORAGE |
A la lecture de ce tableau, nous pouvons donc conclure qu’il existe neuf cas dans lesquels demander une autorisation à l’utilisateur sera strictement obligatoire :