Uprawnienia czasu działania powiadomień

Android 13 (poziom 33 interfejsu API) i nowsze wersje obsługują uprawnienia w czasie działania do wysyłania powiadomień z aplikacji, które nie są wyłączone (w tym usług działających na pierwszym planie): POST_NOTIFICATIONS. Ta zmiana pomaga użytkownikom skupić się na powiadomieniach, które są dla nich najważniejsze.

Aby korzystać z dodatkowej kontroli i elastyczności tej funkcji, jak najszybciej zacznij kierować aplikację na Androida 13 lub nowszego. Jeśli nadal będziesz kierować aplikację na 12L (poziom 32 interfejsu API) lub starszą wersję, stracisz pewną elastyczność w zakresie proszenia o uprawnienia w kontekście funkcjonalności aplikacji.

Deklarowanie uprawnień

Aby poprosić o nową zgodę na wyświetlanie powiadomień z aplikacji, zaktualizuj aplikację, aby była kierowana na Androida 13, i wykonaj podobny proces jak w przypadku proszenia o inne uprawnienia w czasie działania aplikacji, jak pokazano w kolejnych sekcjach.

Uprawnienia, które musisz zadeklarować w pliku manifestu aplikacji znajdziesz w tym fragmencie kodu:

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

Możliwości aplikacji zależą od wyboru użytkownika w oknie uprawnień

W tym oknie użytkownicy mogą wykonać te czynności:

W kolejnych sekcjach opisujemy, jak zachowuje się aplikacja w zależności od działania użytkownika.

Użytkownik wybiera „Zezwól”

Jeśli użytkownik wybierze opcję Zezwól, Twoja aplikacja może:

Użytkownik wybiera „Nie zezwalaj”

Jeśli użytkownik wybierze opcję Nie zezwalaj, Twoja aplikacja nie będzie mogła wysyłać powiadomień, chyba że kwalifikuje się do wyłączenia. Wszystkie kanały powiadomień są zablokowane, z wyjątkiem kilku konkretnych ról. Jest to podobne do sytuacji, gdy użytkownik ręcznie wyłączy wszystkie powiadomienia z Twojej aplikacji w ustawieniach systemu.

Uwaga: jeśli Twoja aplikacja jest kierowana na 12L lub starszą wersję i użytkownik kliknie Nie zezwalaj, nawet tylko raz, nie będzie już wyświetlać się prośba o zgodę dopóki nie nastąpi jedna z tych sytuacji:

  • Użytkownik odinstaluje i ponownie zainstaluje Twoją aplikację.
  • Zaktualizujesz aplikację, aby była kierowana na Androida 13 lub nowszego.

Użytkownik przesuwa palcem po oknie

Jeśli użytkownik przesunie palcem po oknie, czyli nie wybierze opcji Zezwól ani Nie zezwalaj , stan zgody na wyświetlanie powiadomień nie zmieni się.

Wpływ na nowo zainstalowane aplikacje

Jeśli użytkownik zainstaluje Twoją aplikację na urządzeniu z Androidem 13 lub nowszym, powiadomienia z Twojej aplikacji będą domyślnie wyłączone. Aplikacja musi poczekać z wysyłaniem powiadomień, aż poprosisz o nowe uprawnienia i użytkownik je przyzna.

Czas wyświetlenia okna uprawnień zależy od docelowej wersji pakietu SDK aplikacji:

  • Jeśli Twoja aplikacja jest kierowana na Androida 13 lub nowszego, masz pełną kontrolę nad tym, kiedy wyświetla się okno uprawnień. Wykorzystaj tę możliwość, aby wyjaśnić użytkownikom, dlaczego aplikacja potrzebuje tych uprawnień, i zachęcić ich do ich przyznania.
  • Jeśli Twoja aplikacja jest kierowana na 12L (poziom 32 interfejsu API) lub starszą wersję, system wyświetli okno uprawnień, gdy aplikacja po raz pierwszy uruchomi aktywność po utworzeniu kanału powiadomień lub gdy aplikacja uruchomi aktywność, a następnie utworzy swój pierwszy kanał powiadomień. Zwykle dzieje się to podczas uruchamiania aplikacji. W aplikacjach z jedną aktywnością, takich jak większość aplikacji Compose, system wyświetla okno, gdy uruchamia się MainActivity.

Wpływ na aktualizacje istniejących aplikacji

Aby zminimalizować zakłócenia związane ze zgodą na wyświetlanie powiadomień, system automatycznie przyznaje te uprawnienia wszystkim kwalifikującym się aplikacjom, gdy użytkownik uaktualni urządzenie do Androida 13 lub nowszego. Innymi słowy, te aplikacje mogą nadal wysyłać powiadomienia do użytkowników, a użytkownicy nie widzą prośby o uprawnienia w czasie działania.

Kwalifikowanie się do wstępnego przyznania uprawnień

Aby Twoja aplikacja kwalifikowała się do automatycznego wstępnego przyznania uprawnień, musi mieć istniejący kanał powiadomień, a użytkownik nie może mieć w niej wyraźnie wyłączonych powiadomień na urządzeniu z 12L lub starszą wersją.

Jeśli użytkownik wyłączył powiadomienia z Twojej aplikacji na urządzeniu z 12L lub starszą wersją, odmowa ta będzie obowiązywać również po uaktualnieniu urządzenia do Androida 13 lub nowszego.

Wykluczenia

Ta sekcja zawiera listę powiadomień i aplikacji, które są wyłączone ze zmiany zachowania zgody na wyświetlanie powiadomień. Jeśli użytkownik odmówi przyznania zgody na wyświetlanie powiadomień w Androidzie 13 (poziom 33 interfejsu API) lub nowszym, nadal będzie widzieć powiadomienia związane z usługami działającymi na pierwszym planie w Menedżerze zadań, ale nie w panelu powiadomień.

Sesje multimedialne

Powiadomienia związane z sesjami multimedialnymi są wyłączone z tej zmiany zachowania.

Aplikacje skonfigurowane do samodzielnego zarządzania połączeniami telefonicznymi

Jeśli Twoja aplikacja jest skonfigurowana do samodzielnego zarządzania połączeniami telefonicznymi, nie potrzebujesz uprawnień POST_NOTIFICATIONS, aby wysyłać powiadomienia, które używają stylu powiadomień Notification.CallStyle.

System uznaje, że Twoja aplikacja jest skonfigurowana do samodzielnego zarządzania połączeniami telefonicznymi, jeśli spełnia wszystkie te warunki:

  1. Deklaruje uprawnienia MANAGE_OWN_CALLS.
  2. Implementuje interfejs ConnectionService.
  3. Rejestruje się u operatora telekomunikacyjnego urządzenia, wywołując registerPhoneAccount().

Testowanie aplikacji

Możesz sprawdzić, jak zgoda na wyświetlanie powiadomień wpływa na Twoją aplikację, gdy jest ona używana po raz pierwszy na urządzeniu z Androidem 13 lub nowszym. Te zestawy poleceń Android Debug Bridge (ADB) umożliwiają symulowanie najczęstszych sekwencji wyborów użytkowników i uaktualnień urządzeń bez konieczności resetowania urządzenia testowego:

  • Aplikacja jest nowo zainstalowana na urządzeniu z Androidem 13 lub nowszym:

    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
  • Użytkownik pozostawia włączone powiadomienia, gdy aplikacja jest zainstalowana na urządzeniu z 12L lub starszą wersją, a następnie urządzenie jest uaktualniane do Androida 13 lub nowszego:

    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
  • Użytkownik ręcznie wyłącza powiadomienia, gdy aplikacja jest zainstalowana na urządzeniu z 12L lub starszą wersją, a następnie urządzenie jest uaktualniane do Androida 13 lub nowszego:

    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

Sprawdzone metody

Ta sekcja zawiera opis kilku sposobów, dzięki którym możesz najskuteczniej wykorzystać nowe uprawnienia do wysyłania powiadomień w swojej aplikacji.

Zaktualizuj docelową wersję pakietu SDK aplikacji

Aby zapewnić aplikacji większą elastyczność w zakresie wyświetlania okna uprawnień, zaktualizuj ją, aby była kierowana na Androida 13 lub nowszego.

Poczekaj z wyświetleniem prośby o zgodę na wyświetlanie powiadomień

Zanim poprosisz użytkowników o przyznanie jakichkolwiek uprawnień, pozwól im zapoznać się z Twoją aplikacją.

Nowi użytkownicy mogą chcieć poznać aplikację i przekonać się, jakie korzyści przynosi każda prośba o powiadomienia. Możesz wywołać prośbę o uprawnienia za pomocą działania użytkownika. Poniższa lista zawiera kilka przykładów, kiedy warto wyświetlić prośbę o zgodę na wyświetlanie powiadomień:

  • Użytkownik kliknie przycisk „dzwonek alarmowy”.
  • Użytkownik zdecyduje się obserwować konto w mediach społecznościowych.
  • Użytkownik złoży zamówienie na dostawę jedzenia.

Rysunek 1 przedstawia zalecany proces proszenia o uprawnienia do wysyłania powiadomień. Jeśli shouldShowRequestPermissionRationale() zwraca true, aplikacja nie musi wyświetlać środkowego ekranu z tekstem „Otrzymuj powiadomienia!”. W Compose możesz znaleźć bieżący Activity, uzyskując dostęp do LocalContext.current i rzutując go na Activity.

Możesz też ustawić, aby prośba wyświetlała się po tym, jak użytkownicy zapoznają się z Twoją aplikacją. Możesz na przykład poczekać, aż użytkownik uruchomi aplikację po raz trzeci lub czwarty.

Po zalogowaniu się użytkownik zobaczy zaproszenie do otrzymywania powiadomień o zmianach w podróży. Gdy użytkownik naciśnie przycisk „OK”, aplikacja poprosi o nowe uprawnienia, co spowoduje wyświetlenie okna systemowego.
Rysunek 1. Zalecany przepływ pracy inicjowany przez użytkownika w celu proszenia o zgodę na wyświetlanie powiadomień. Środkowy ekran jest potrzebny tylko wtedy, gdy shouldShowRequestPermissionRationale() zwraca wartość true.

Proszenie o uprawnienia w Compose

Aby poprosić o uprawnienia w interfejsie Compose, użyj interfejsu API rememberLauncherForActivityResult() z kontraktem ActivityResultContracts.RequestPermission().

Ten fragment kodu pokazuje, jak poprosić o zgodę na wyświetlanie powiadomień w odpowiedzi na interakcję użytkownika:

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

Proszenie o uprawnienia w kontekście

Gdy prosisz o uprawnienia do wysyłania powiadomień w aplikacji, rób to w odpowiednim kontekście, aby było wyraźnie widać, do czego służą powiadomienia i dlaczego użytkownik powinien się na nie zgodzić. Na przykład aplikacja do poczty e-mail może zawierać opcje wysyłania powiadomień o każdym nowym e-mailu lub tylko o e-mailach, w których użytkownik jest jedynym odbiorcą.

Wykorzystaj tę możliwość, aby wyjaśnić swoje intencje. Dzięki temu użytkownicy chętniej przyznają Twojej aplikacji zgodę na wyświetlanie powiadomień.

Sprawdzanie, czy aplikacja może wysyłać powiadomienia

Zanim aplikacja wyśle powiadomienie, sprawdź, czy użytkownik włączył powiadomienia z Twojej aplikacji. Aby to zrobić, wywołaj areNotificationsEnabled().

Odpowiedzialne korzystanie z uprawnień

Gdy otrzymasz zgodę na wysyłanie powiadomień, pamiętaj, aby korzystać z tych uprawnień w sposób odpowiedzialny. Użytkownicy mogą zobaczyć liczbę dziennych powiadomień wysyłanych przez Twoją aplikację i w każdej chwili cofnąć uprawnienia.