Autorizzazione runtime notifiche

Android 13 (livello API 33) e versioni successive supportano un'autorizzazione di runtime per l'invio di notifiche non esenti (inclusi i servizi in primo piano (FGS)) da un'app: POST_NOTIFICATIONS. Questa modifica aiuta gli utenti a concentrarsi sulle notifiche più importanti per loro.

Ti consigliamo vivamente di scegliere come target Android 13 o versioni successive il prima possibile per usufruire del controllo e della flessibilità aggiuntivi di questa funzionalità. Se continui a scegliere come target 12L (livello API 32) o versioni precedenti, perdi un po' di flessibilità nella richiesta dell'autorizzazione nel contesto della tua app's funzionalità.

Dichiarare l'autorizzazione

Per richiedere la nuova autorizzazione alle notifiche dalla tua app, aggiornala in modo che abbia come target Android 13 e completa una procedura simile a quella per richiedere altre autorizzazioni di runtime, come mostrato nelle sezioni seguenti.

L'autorizzazione che devi dichiarare nel file manifest dell'app è riportata nel seguente snippet di codice:

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

Le funzionalità dell'app dipendono dalla scelta dell'utente nella finestra di dialogo delle autorizzazioni

In questa finestra di dialogo, gli utenti hanno a disposizione le seguenti azioni:

Le sezioni seguenti descrivono il comportamento dell'app in base all'azione intrapresa dall'utente.

L'utente seleziona "Consenti"

Se l'utente seleziona l'opzione Consenti, la tua app può eseguire le seguenti operazioni:

L'utente seleziona "Non consentire"

Se l'utente seleziona l'opzione Non consentire, la tua app non può inviare notifiche a meno che non sia idonea per un'esenzione. Tutti i canali di notifica sono bloccati, ad eccezione di alcuni ruoli specifici. Questo comportamento è simile a quello che si verifica quando l'utente disattiva manualmente tutte le notifiche per la tua app nelle impostazioni di sistema.

Attenzione: se la tua app ha come target 12L o versioni precedenti e l'utente tocca Non consentire, anche una sola volta, non gli verrà richiesto di nuovo fino a quando non si verifica una delle seguenti condizioni:

  • L'utente disinstalla e reinstalla la tua app.
  • Aggiorni la tua app in modo che abbia come target Android 13 o versioni successive.

L'utente scorre verso l'esterno della finestra di dialogo

Se l'utente scorre verso l'esterno della finestra di dialogo, ovvero non seleziona Consenti o Non consentire , lo stato dell'autorizzazione alle notifiche non cambia.

Effetti sulle app appena installate

Se un utente installa la tua app su un dispositivo con Android 13 o versioni successive, le notifiche dell'app sono disattivate per impostazione predefinita. La tua app deve attendere l'invio delle notifiche fino a quando non richiedi la nuova autorizzazione e l'utente la concede alla tua app.

Il momento in cui viene visualizzata la finestra di dialogo delle autorizzazioni dipende dalla versione dell'SDK target della tua app:

  • Se la tua app ha come target Android 13 o versioni successive, ha il controllo completo sul momento in cui viene visualizzata la finestra di dialogo delle autorizzazioni. Cogli l'occasione per spiegare agli utenti perché l'app ha bisogno di questa autorizzazione, incoraggiandoli a concederla.
  • Se la tua app ha come target 12L (livello API 32) o versioni precedenti, il sistema mostra la finestra di dialogo delle autorizzazioni la prima volta che l'app avvia un'attività dopo aver creato un canale di notifica oppure quando l'app avvia un'attività e poi crea il suo primo canale di notifica. Di solito, questa operazione viene eseguita all'avvio dell'app. Nelle app a singola attività, come la maggior parte delle app Compose, il sistema mostra la finestra di dialogo all'avvio di MainActivity.

Effetti sugli aggiornamenti delle app esistenti

Per ridurre al minimo le interruzioni associate all'autorizzazione alle notifiche, il sistema concede automaticamente l'autorizzazione a tutte le app idonee quando l'utente esegue l'upgrade del dispositivo ad Android 13 o versioni successive. In altre parole, queste app possono continuare a inviare notifiche agli utenti e gli utenti non vedono una richiesta di autorizzazione di runtime.

Idoneità per la pre-concessione dell'autorizzazione

Affinché la tua app sia idonea per una pre-concessione automatica, deve avere un canale di notifica esistente e le notifiche non devono essere state disattivate esplicitamente dall'utente su un dispositivo con 12L o versioni precedenti.

Se l'utente ha disattivato le notifiche per la tua app su un dispositivo con 12L o versioni precedenti, il rifiuto persiste quando il dispositivo esegue l'upgrade ad Android 13 o versioni successive.

Esenzioni

Questa sezione contiene l'insieme di notifiche e app esenti dalla modifica del comportamento dell'autorizzazione alle notifiche. Su Android 13 (livello API 33) o versioni successive, se l'utente nega l'autorizzazione alle notifiche, continua a visualizzare gli avvisi relativi ai servizi in primo piano in Gestione attività ma non nel riquadro delle notifiche.

Sessioni multimediali

Le notifiche relative alle sessioni multimediali sono esenti da questa modifica del comportamento.

App configurate per gestire autonomamente le chiamate

Se la tua app si configura per gestire autonomamente le chiamate, non hai bisogno dell'autorizzazione POST_NOTIFICATIONS per inviare notifiche che utilizzano lo stile di notifica Notification.CallStyle.

Il sistema considera che la tua app si sia configurata per la gestione autonoma delle chiamate se esegue le seguenti operazioni:

  1. Dichiara l'autorizzazione MANAGE_OWN_CALLS.
  2. Implementa l'interfaccia ConnectionService.
  3. Si registra con il provider di telecomunicazioni del dispositivo chiamando registerPhoneAccount().

Testa la tua app

Puoi valutare l'impatto dell'autorizzazione alle notifiche sulla tua app quando viene utilizzata per la prima volta su un dispositivo con Android 13 o versioni successive. I seguenti set di comandi Android Debug Bridge (ADB) ti consentono di simulare le sequenze più comuni di scelte dell'utente e upgrade del dispositivo senza dover reimpostare il dispositivo di test:

  • L'app è stata appena installata su un dispositivo con Android 13 o versioni successive:

    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'utente mantiene le notifiche attive quando l'app viene installata su un dispositivo con 12L o versioni precedenti, quindi il dispositivo esegue l'upgrade ad Android 13 o versioni successive:

    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'utente disattiva manualmente le notifiche quando l'app viene installata su un dispositivo con 12L o versioni precedenti, quindi il dispositivo esegue l'upgrade ad Android 13 o versioni successive:

    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

Best practice

Questa sezione descrive diversi modi in cui puoi utilizzare la nuova autorizzazione alle notifiche in modo più efficace nella tua app.

Aggiorna la versione dell'SDK target della tua app

Per dare alla tua app una maggiore flessibilità sul momento in cui viene visualizzata la finestra di dialogo delle autorizzazioni, aggiornala in modo che abbia come target Android 13 o versioni successive.

Attendi prima di mostrare la richiesta di autorizzazione alle notifiche

Prima di chiedere agli utenti di concedere le autorizzazioni, lascia che si familiarizzino con la tua app.

I nuovi utenti potrebbero voler esplorare l'app e rendersi conto in prima persona dei vantaggi di ogni singola richiesta di notifica. Puoi attivare una richiesta di autorizzazioni da un'azione dell'utente. Il seguente elenco mostra alcuni esempi di momenti in cui è opportuno mostrare la richiesta di autorizzazione alle notifiche:

  • L'utente tocca un pulsante "campanello di avviso".
  • L'utente sceglie di seguire l'account di social media di qualcuno.
  • L'utente invia un ordine per la consegna di cibo.

La figura 1 mostra un flusso di lavoro consigliato per richiedere l'autorizzazione alle notifiche. A meno che shouldShowRequestPermissionRationale() non restituisca true, la tua app non deve mostrare la schermata intermedia, quella con il testo del titolo "Ricevi notifiche". In Compose, puoi trovare l'oggetto Activity corrente accedendo a LocalContext.current ed eseguendo il cast a un oggetto Activity.

In alternativa, puoi impostare la visualizzazione di una richiesta dopo aver dato agli utenti la possibilità di familiarizzare con la tua app. Ad esempio, potresti attendere la terza o la quarta volta che l'utente avvia l'app.

Dopo l&#39;accesso, l&#39;utente riceve un invito a ricevere notifiche sugli aggiornamenti dei viaggi. Dopo che l&#39;utente preme il
   pulsante Mi trovo qui, l&#39;app richiede la nuova autorizzazione, il che causa la visualizzazione della finestra di dialogo di sistema
Figura 1. Un flusso di lavoro consigliato basato sull'utente per richiedere l'autorizzazione alle notifiche. La schermata intermedia è necessaria solo se shouldShowRequestPermissionRationale() restituisce true.

Richiedere l'autorizzazione in Compose

Per richiedere l'autorizzazione all'interno dell'interfaccia utente di Compose, utilizza l' rememberLauncherForActivityResult() API con il ActivityResultContracts.RequestPermission() contratto.

Il seguente snippet mostra come richiedere l'autorizzazione alle notifiche in risposta a un'interazione dell'utente:

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")
}

Richiedere l'autorizzazione nel contesto

Quando richiedi le autorizzazioni alle notifiche all'interno dell'app, fallo nel contesto corretto, in modo che sia chiaramente esplicito a cosa servono le notifiche e perché l'utente dovrebbe attivare la ricezione. Ad esempio, un'app email potrebbe includere opzioni per inviare notifiche per ogni nuova email o solo per le email in cui l'utente è l'unico destinatario.

Cogli l'occasione per dare trasparenza alle tue intenzioni e gli utenti avranno maggiori probabilità di concedere l'autorizzazione alle notifiche alla tua app.

Verificare se la tua app può inviare notifiche

Prima che la tua app invii una notifica, verifica se l'utente ha attivato le notifiche per la tua app. Per farlo, chiama areNotificationsEnabled().

Utilizzare l'autorizzazione in modo responsabile

Dopo aver ricevuto l'approvazione per l'invio delle notifiche, ricordati di utilizzare l'autorizzazione in modo responsabile. Gli utenti possono vedere il numero di notifiche giornaliere inviate dalla tua app e possono revocare l'autorizzazione in qualsiasi momento.