Réduire le nombre de demandes d'autorisation

Dans le cadre de l'amélioration de la qualité des applications et de la protection de la confidentialité des utilisateurs, nous vous recommandons de réduire autant que possible l'utilisation des autorisations dans vos applications. Les utilisateurs pourront ainsi découvrir et exploiter des applications de haute qualité offrant un environnement sûr.

Demander des autorisations aux utilisateurs interrompt leur parcours, et peut les inciter à refuser votre demande. 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.

Il existe plusieurs façons de réduire l'utilisation des autorisations :

  • Déclarez des autorisations qui fournissent des informations de localisation générales plutôt que informations précises si votre application a simplement besoin de la position approximative.
  • Appelez des API qui permettent à votre application d'exécuter la fonctionnalité souhaitée sans déclarer d'autorisations.
  • Appelez des intents ou des gestionnaires d'événements spécifiques afin d'exécuter des fonctionnalités au lieu de déclarer des autorisations.
  • 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 permettez-lui de bénéficier d'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 position 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 position 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.

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 :

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.

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.

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.

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.

Scanner des codes-barres

Android est compatible avec l'API Google Code Scanner, fournie par les services Google Play, qui vous permet de décoder les codes-barres sans déclarer aucune autorisation d'appareil photo. Cette API contribue à préserver la confidentialité des utilisateurs et vous évite d'avoir à créer une UI personnalisée pour votre cas d'utilisation de lecture de codes-barres.

L'API scanne le code-barres et renvoie uniquement les résultats de cette opération à votre application. Les images sont traitées sur l'appareil, et Google ne stocke aucune donnée ni aucun résultat liés à cette opération.

Si votre application doit prendre en charge des cas d'utilisation ou des formats de codes-barres complexes, ou si elle nécessite une interface utilisateur personnalisée, utilisez plutôt l'API de lecture de code-barres ML Kit.

Réinitialiser les autorisations inutilisées

Android propose plusieurs façons de réinitialiser les autorisations d'exécution inutilisées à leur état refusé par défaut.

Consultez les conseils de conception.

Demander des autorisations d'exécution

Une fois que vous avez déterminé que votre application doit déclarer et demander des autorisations d'exécution, suivez un workflow spécifique pour ce faire.

Consultez les conseils de conception.

Expliquer pourquoi votre application a besoin d'autorisations

L'utilisation de requestPermissions() affiche une boîte de dialogue indiquant les autorisations que votre application souhaite utiliser, mais sans en expliquer la raison, ce qui peut être déroutant pour l'utilisateur.

Pour en savoir plus et obtenir des recommandations sur la manière et le moment d'afficher cette boîte de dialogue, consultez les conseils de conception.

Gérer les refus d'autorisation

Votre application doit aider les utilisateurs à comprendre les conséquences d'un refus d'autorisation avant et après leur décision.

Consultez les conseils de conception.