Réduire le nombre de demandes d'autorisation

Avant de demander des autorisations dans votre application, déterminez si c'est nécessaire. Chaque fois qu'un utilisateur utilise une fonctionnalité de l'application nécessitant une autorisation d'exécution, votre application doit interrompre l'action de l'utilisateur pour demander une autorisation. L'utilisateur doit alors prendre une décision. Si l'utilisateur ne comprend pas pourquoi votre application demande une autorisation spécifique, il se peut qu'il la refuse, voire qu'il désinstalle l'application.

De plus, chaque fois que vous déclarez une nouvelle autorisation, vous devez examiner la manière dont votre application demande et partage les données utilisateur. Certaines autorisations et API particulièrement sensibles exigent que vous affichiez un communiqué au sein de l'application concernant l'accès aux données, leur collecte, leur utilisation et leur partage.

Déterminez si vous avez besoin de l'autorisation en premier lieu, ou s'il existe un autre moyen de prendre en charge la fonctionnalité dans votre application. Le système fournit des contrats intégrés pour différentes opérations sur les fichiers et prend également en charge les contrats personnalisés.

Si vous devez déclarer une autorisation, respectez toujours la décision de l'utilisateur et proposez la possibilité de réaliser une dégradation élégante de l'expérience de votre application.

Cette page décrit plusieurs cas d'utilisation que votre application peut traiter sans demander d'autorisation.

Afficher des lieux à proximité

Votre application peut avoir besoin de connaître la localisation approximative de l'utilisateur. Cette option est utile pour afficher des informations de localisation, comme les restaurants à proximité.

Certains cas d'utilisation requièrent uniquement une estimation approximative de la localisation d'un appareil. Dans ce cas, effectuez l'une des opérations suivantes, en fonction de la fréquence à laquelle votre application a besoin d'informations de localisation :

  • Si votre application doit accéder fréquemment à la position, déclarez l'autorisation ACCESS_COARSE_LOCATION. L'autorisation fournit une estimation de la position de l'appareil à partir des services de localisation, comme décrit dans la documentation sur la précision de position approximative.
  • Si votre application requiert moins souvent des informations de localisation, voire une seule fois, demandez plutôt à l'utilisateur de saisir une adresse ou un code postal.

D'autres cas d'utilisation nécessitent une estimation plus précise de la position de l'appareil. Ce sont les seuls cas où vous pouvez déclarer l'autorisation ACCESS_FINE_LOCATION.

Créer des fichiers et y accéder

Android vous permet de créer des fichiers et d'y accéder sans avoir à déclarer des autorisations liées au stockage ou aux capteurs.

Prendre une photo

Les utilisateurs peuvent prendre des photos avec votre application via l'application préinstallée de caméra système.

Dans ce cas, ne demandez pas l'autorisation CAMERA. Appelez plutôt l'action d'intent ACTION_IMAGE_CAPTURE.

Enregistrer une vidéo

Les utilisateurs peuvent enregistrer des vidéos dans votre application via l'application préinstallée de caméra système.

Dans ce cas, ne demandez pas l'autorisation CAMERA. Appelez plutôt l'action d'intent ACTION_VIDEO_CAPTURE.

Ouvrir des fichiers multimédias

Votre application peut autoriser les utilisateurs à choisir parmi leurs photos et vidéos, par exemple pour des pièces jointes ou des photos de profil.

Pour prendre en charge cette fonctionnalité, utilisez le sélecteur de photos. L'utilisation du sélecteur de photos ne nécessite aucune autorisation d'exécution. Lorsqu'un utilisateur interagit avec le sélecteur de photos pour choisir des photos ou des vidéos à partager avec votre application, le système accorde un accès en lecture temporaire à l'URI associé aux fichiers multimédias sélectionnés.

Si votre application doit accéder à des fichiers multimédias sans utiliser le sélecteur de photos, il n'est pas nécessaire de déclarer des autorisations de stockage :

Ouvrir des documents

Votre application peut afficher les documents créés par l'utilisateur, comme un fichier texte, soit dans votre application, soit dans une autre.

Dans ce cas, déclarez READ_EXTERNAL_STORAGE uniquement pour assurer la compatibilité avec les appareils plus anciens. Définissez android:maxSdkVersion sur 28.

En fonction de l'application à l'origine du document, effectuez l'une des opérations suivantes :

Identifier l'appareil qui exécute une instance de votre appli

Une instance particulière de votre appli peut avoir besoin de savoir sur quel appareil elle s'exécute. C'est utile pour les applications qui ont des préférences ou des messages spécifiques selon l'appareil, comme des playlists différentes pour les télévisions et les accessoires connectés.

Dans ce cas, n'accédez pas directement au code IMEI de l'appareil. Vous ne pouvez d'ailleurs pas le faire à partir d'Android 10. Effectuez plutôt l'une des opérations suivantes :

  • Obtenez un identifiant d'appareil unique pour l'instance de votre application à l'aide de la bibliothèque Instance ID.
  • Créez votre propre identifiant limité à l'espace de stockage de votre application. Utilisez des fonctions système de base, comme randomUUID().

Associer à un appareil via Bluetooth

Votre application peut proposer une expérience améliorée en transférant des données vers un autre appareil via Bluetooth.

Pour accepter cette fonctionnalité, ne demandez pas les autorisations ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATIION ou BLUETOOTH_ADMIN. Utilisez plutôt une association avec des appareils associés.

Saisir automatiquement un numéro de carte de paiement

Les services Google Play proposent une bibliothèque qui vous permet de saisir automatiquement un numéro de carte de paiement. Au lieu de déclarer l'autorisation CAMERA, vous pouvez utiliser la bibliothèque de reconnaissance des cartes de débit et de crédit.

Mettre le contenu multimédia en pause lorsque votre appli est interrompue

Si l'utilisateur reçoit un appel téléphonique ou si une alarme configurée par l'utilisateur s'active, votre application doit mettre en pause toute lecture de contenu multimédia jusqu'à ce qu'elle récupère la priorité audio.

Pour accepter cette fonctionnalité, ne demandez pas l'autorisation READ_PHONE_STATE. Intégrez plutôt le gestionnaire d'événements onAudioFocusChange(), qui s'exécute automatiquement lorsque le système modifie sa priorité audio. En savoir plus sur l'intégration de la priorité audio.

Gérer les appels téléphoniques et les messages texte

Les services Android et Google Play proposent des bibliothèques qui vous permettent de gérer les appels téléphoniques et les messages texte sans avoir à déclarer d'autorisations liées aux appels ni aux SMS.

Saisir automatiquement un code secret à usage unique

Pour simplifier un workflow d'authentification à deux facteurs, votre appli peut saisir automatiquement le code secret à usage unique envoyé à l'appareil d'un utilisateur afin de vérifier son identité.

Pour prendre en charge cette fonctionnalité sur les appareils qui fonctionnent avec les services Google Play, ne déclarez pas l'autorisation READ_SMS. Utilisez plutôt l'API SMS Retriever.

Sur les autres appareils, si votre appli cible Android 8.0 (niveau d'API 26) ou une version ultérieure, générez un jeton spécifique à l'application à l'aide de createAppSpecificSmsToken(). Transmettez ce jeton à une autre appli ou à un autre service qui peut envoyer un SMS de vérification.

Saisir automatiquement le numéro de téléphone de l'utilisateur

Pour garantir des ventes ou une assistance plus efficaces, votre appli peut autoriser l'utilisateur à saisir automatiquement le numéro de téléphone de son appareil.

Pour prendre en charge cette fonctionnalité sur les appareils qui fonctionnent avec les services Google Play, ne déclarez pas l'autorisation READ_PHONE_STATE. Utilisez plutôt la bibliothèque Phone Number Hint.

Filtrer les appels téléphoniques

Pour limiter les interruptions inutiles pour l'utilisateur, votre application peut filtrer les appels téléphoniques pour éliminer les appels indésirables.

Pour accepter cette fonctionnalité, ne demandez pas l'autorisation READ_PHONE_STATE. Utilisez plutôt l'API CallScreeningService.

Passer des appels téléphoniques

Votre application peut offrir la possibilité de passer un appel téléphonique en appuyant sur les informations d'un contact.

Pour prendre en charge cette fonctionnalité, utilisez l'action d'intent ACTION_DIAL au lieu de l'action ACTION_CALL. ACTION_CALL nécessite l'autorisation CALL_PHONE au moment de l'installation, ce qui empêche les appareils ne permettant pas de passer des appels, comme certaines tablettes, d'installer votre application.