Autorisation d'exécution des notifications

Android 13 (niveau d'API 33) et versions ultérieures sont compatibles avec une autorisation d'exécution pour l'envoi de notifications non exemptées (y compris les services de premier plan) depuis une application : POST_NOTIFICATIONS. Cette modification permet aux utilisateurs de se concentrer sur les notifications les plus importantes pour eux.

Nous vous recommandons vivement de cibler Android 13 ou une version ultérieure dès que possible pour bénéficier du contrôle et de la flexibilité supplémentaires de cette fonctionnalité. Si vous continuez à cibler 12L (niveau d'API 32) ou une version antérieure, vous perdrez en flexibilité lors de la demande d'autorisation dans le contexte de la fonctionnalité de votre application.

Déclarer l'autorisation

Pour demander la nouvelle autorisation de notification depuis votre application, mettez-la à jour pour cibler Android 13 et suivez un processus semblable à celui utilisé pour demander d'autres autorisations d'exécution, comme indiqué dans les sections suivantes.

L'autorisation que vous devez déclarer dans le fichier manifeste de votre application apparaît dans l'extrait de code suivant :

<manifest ...>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
    <application ...>
        ...
    </application>
</manifest>

Les fonctionnalités de l'application dépendent du choix de l'utilisateur dans la boîte de dialogue des autorisations

Dans cette boîte de dialogue, les utilisateurs peuvent effectuer les actions suivantes :

Les sections suivantes décrivent le comportement de votre application en fonction de l'action effectuée par l'utilisateur.

L'utilisateur sélectionne "Autoriser"

Si l'utilisateur sélectionne l'option Autoriser, votre application peut effectuer les opérations suivantes :

L'utilisateur sélectionne "Ne pas autoriser"

Si l'utilisateur sélectionne l'option Ne pas autoriser, votre application ne peut pas envoyer de notifications, sauf si elle est éligible à une exemption. Tous les canaux de notification sont bloqués, à l'exception de quelques rôles spécifiques. Ce comportement est semblable à celui qui se produit lorsque l'utilisateur désactive manuellement toutes les notifications de votre application dans les paramètres système.

Attention : Si votre application cible 12L ou une version antérieure et que l'utilisateur appuie sur Ne pas autoriser, même une seule fois, il ne sera plus invité à le faire jusqu'à ce que l'une des situations suivantes se produise :

  • L'utilisateur désinstalle votre application, puis la réinstalle.
  • Vous mettez à jour votre application pour cibler Android 13 ou une version ultérieure.

L'utilisateur balaye la boîte de dialogue

Si l'utilisateur balaye la boîte de dialogue, c'est-à-dire qu'il ne sélectionne ni Autoriser ni Ne pas autoriser, l'état de l'autorisation de notification ne change pas.

Effets sur les applications nouvellement installées

Si un utilisateur installe votre application sur un appareil équipé d'Android 13 ou d'une version ultérieure, les notifications sont désactivées par défaut. Votre application doit attendre d'envoyer des notifications jusqu'à ce que vous demandiez la nouvelle autorisation et que l'utilisateur l'accorde à votre application.

Le moment où la boîte de dialogue des autorisations s'affiche dépend de la version du SDK cible de votre application :

  • Si votre application cible Android 13 ou une version ultérieure, elle contrôle entièrement le moment où la boîte de dialogue des autorisations s'affiche. Profitez-en pour expliquer aux utilisateurs pourquoi l'application a besoin de cette autorisation et les encourager à l'accorder.
  • Si votre application cible 12L (niveau d'API 32) ou une version antérieure, le système affiche la boîte de dialogue des autorisations la première fois que votre application démarre une activité après la création d'un canal de notification, ou lorsque votre application démarre une activité et crée ensuite son premier canal de notification. Cela se produit généralement au démarrage de l'application. Dans les applications à activité unique, telles que la plupart des applications Compose, le système affiche la boîte de dialogue au démarrage de MainActivity.

Effets sur les mises à jour des applications existantes

Pour minimiser les perturbations associées à l'autorisation de notification, le système pré-accorde automatiquement l'autorisation à toutes les applications éligibles lorsque l'utilisateur met à niveau son appareil vers Android 13 ou une version ultérieure. En d'autres termes, ces applications peuvent continuer à envoyer des notifications aux utilisateurs, et ces derniers ne voient pas d'invite d'autorisation d'exécution.

Éligibilité pour l'autorisation pré-accordée

Pour que votre application soit éligible à une autorisation pré-accordée automatique, elle doit disposer d'un canal de notification existant et ses notifications ne doivent pas avoir été explicitement désactivées par l'utilisateur sur un appareil équipé de 12L ou d'une version antérieure.

Si l'utilisateur a désactivé les notifications de votre application sur un appareil équipé de 12L ou d'une version antérieure, ce refus persiste lorsque l'appareil est mis à niveau vers Android 13 ou une version ultérieure.

Exceptions

Cette section contient l'ensemble des notifications et des applications exemptées de la modification du comportement de l'autorisation de notification. Sur Android 13 (niveau d'API 33) ou version ultérieure, si l'utilisateur refuse l'autorisation de notification, il voit toujours les notifications liées aux services de premier plan dans le gestionnaire de tâches, mais pas dans le panneau des notifications.

Sessions multimédias

Les notifications liées aux sessions multimédias sont exemptées de cette modification de comportement.

Applications configurées pour gérer elles-mêmes les appels téléphoniques

Si votre application se configure pour gérer elle-même les appels téléphoniques, vous n'avez pas besoin de l'autorisation POST_NOTIFICATIONS pour qu'elle puisse envoyer des notifications qui utilisent le style de notification Notification.CallStyle.

Le système considère que votre application s'est configurée pour gérer elle-même les appels téléphoniques si elle effectue chacune des opérations suivantes :

  1. Déclare l'autorisation MANAGE_OWN_CALLS.
  2. Implémente l'interface ConnectionService.
  3. S'enregistre auprès de l'opérateur télécom de l'appareil en appelant registerPhoneAccount().

Tester votre application

Vous pouvez évaluer l'impact de l'autorisation de notification sur votre application lors de sa première utilisation sur un appareil équipé d'Android 13 ou d'une version ultérieure. Les ensembles de commandes Android Debug Bridge (ADB) suivants vous permettent de simuler les séquences les plus courantes de choix de l'utilisateur et de mises à niveau de l'appareil sans avoir à réinitialiser votre appareil de test :

  • L'application est nouvellement installée sur un appareil équipé d' Android 13 ou d'une version ultérieure :

    adb shell pm revoke PACKAGE_NAME android.permission.POST_NOTIFICATIONS
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-set
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-fixed
  • L'utilisateur conserve les notifications activées lorsque l'application est installée sur un appareil équipé de 12L ou d'une version antérieure, puis l'appareil est mis à niveau vers Android 13 ou une version ultérieure :

    adb shell pm grant PACKAGE_NAME android.permission.POST_NOTIFICATIONS
    adb shell pm set-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-set
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-fixed
  • L'utilisateur désactive manuellement les notifications lorsque l'application est installée sur un appareil équipé de 12L ou d'une version antérieure, puis l'appareil est mis à niveau vers Android 13 ou une version ultérieure :

    adb shell pm revoke PACKAGE_NAME android.permission.POST_NOTIFICATIONS
    adb shell pm set-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-set
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-fixed

Bonnes pratiques

Cette section décrit plusieurs façons d'utiliser la nouvelle autorisation de notification de manière plus efficace dans votre application.

Mettre à jour la version du SDK cible de votre application

Pour que votre application soit plus flexible quant au moment où la boîte de dialogue des autorisations s'affiche, mettez-la à jour pour qu'elle cible Android 13 ou une version ultérieure.

Attendre avant d'afficher l'invite d'autorisation de notification

Avant de demander aux utilisateurs d'accorder des autorisations, laissez-les se familiariser avec votre application.

Les nouveaux utilisateurs peuvent explorer l'application et se rendre compte par eux-mêmes des avantages de chaque demande de notification individuelle. Vous pouvez déclencher une invite d'autorisation à partir d'une action de l'utilisateur. La liste suivante présente plusieurs exemples de moments où il est judicieux d'afficher l'invite d'autorisation de notification :

  • L'utilisateur appuie sur un bouton "Cloche d'alerte".
  • L'utilisateur choisit de suivre le compte de réseaux sociaux d'une personne.
  • L'utilisateur envoie une commande de livraison de nourriture.

La figure 1 présente un workflow recommandé pour demander l'autorisation de notification. Sauf si shouldShowRequestPermissionRationale() renvoie true, votre application n'a pas besoin d'afficher l'écran intermédiaire, celui dont le texte de titre est "Recevoir des notifications !". Dans Compose, vous pouvez trouver le Activity actuel en accédant à LocalContext.current et en le castant en Activity.

Vous pouvez également définir une requête qui s'affiche après avoir laissé aux utilisateurs le temps de se familiariser avec votre application. Par exemple, vous pouvez attendre la troisième ou la quatrième fois que l'utilisateur lance votre application.

Une fois l&#39;utilisateur connecté, il est invité à recevoir des notifications sur les mises à jour de ses voyages. Une fois que l&#39;utilisateur a appuyé sur le bouton &quot;J&#39;ai compris&quot;, l&#39;application demande la nouvelle autorisation, ce qui provoque l&#39;affichage de la boîte de dialogue système.
Figure 1. Workflow recommandé axé sur l'utilisateur pour demander l'autorisation de notification. L'écran intermédiaire n'est nécessaire que si shouldShowRequestPermissionRationale() renvoie true.

Demander l'autorisation dans Compose

Pour demander l'autorisation dans votre UI Compose, utilisez l' rememberLauncherForActivityResult() API avec le ActivityResultContracts.RequestPermission() contrat.

L'extrait suivant montre comment demander l'autorisation de notification en réponse à une interaction de l'utilisateur :

Kotlin

val context = LocalContext.current
val permissionLauncher = rememberLauncherForActivityResult(
    ActivityResultContracts.RequestPermission()
) { isGranted ->
    if (isGranted) {
        // Permission granted, you can now send notifications.
    } else {
        // Permission denied, handle accordingly.
    }
}

// ... in your UI ...
Button(onClick = {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        permissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
    }
}) {
    Text("Enable Notifications")
}

Demander l'autorisation en contexte

Lorsque vous demandez des autorisations de notification dans votre application, faites-le dans le contexte approprié, afin qu'il soit clairement indiqué à quoi servent les notifications et pourquoi l'utilisateur doit les activer. Par exemple, une application de messagerie peut inclure des options permettant d'envoyer des notifications pour chaque nouvel e-mail, ou uniquement pour les e-mails dont l'utilisateur est le seul destinataire.

Profitez-en pour faire preuve de transparence quant à vos intentions. Les utilisateurs seront plus susceptibles d'accorder l'autorisation de notification à votre application.

Vérifier si votre application peut envoyer des notifications

Avant que votre application n'envoie une notification, vérifiez si l'utilisateur a activé les notifications pour votre application. Pour ce faire, appelez areNotificationsEnabled().

Utiliser l'autorisation de manière responsable

Une fois que vous avez reçu l'autorisation d'envoyer des notifications, n'oubliez pas de l'utiliser de manière responsable. Les utilisateurs peuvent voir le nombre de notifications quotidiennes envoyées par votre application et ils peuvent révoquer l'autorisation à tout moment.