Uprawnienia czasu działania powiadomień

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

Aby jak najszybciej korzystać z dodatkowych opcji kontroli i elastyczności tej funkcji, zalecamy jak najszybciej ustawić jako docel system Android 13 lub nowszy. Jeśli nadal kierujesz aplikację na Androida 12L (poziom interfejsu API 32) lub starszego, tracisz pewną elastyczność w sposobie wyrażania zgody na uprawnienia w kontekście funkcjonalności aplikacji.

Zadeklaruj uprawnienia

Aby poprosić o nowe uprawnienie do wysyłania powiadomień, zaktualizuj aplikację, aby kierowała się na Androida 13, i wykonaj podobny proces, co w przypadku udzielania innych uprawnień w czasie wykonywania, jak pokazano w następnych sekcjach.

Uprawnienie, które musisz zadeklarować w pliku manifestu aplikacji, jest widoczne w tym fragmencie kodu:

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

Funkcje aplikacji zależą od wyboru użytkownika w oknie uprawnień

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

W sekcjach poniżej opisujemy, jak aplikacja ma się zachowywać w zależności od działania użytkownika.

Użytkownik wybiera „Zezwól”.

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

Użytkownik klika „Nie zezwalaj”.

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

Uwaga: jeśli Twoja aplikacja jest przeznaczona na Androida w wersji 12L lub niższej, a użytkownik kliknie Nie zezwalaj, nawet tylko raz, nie wyświetli się ponownie żadna prośba, dopóki nie nastąpi jedno z tych zdarzeń:

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

Użytkownik odsuwa okno dialogowe

Jeśli użytkownik przesunie palcem w bok, aby zamknąć okno, to znaczy, że nie wybierze Zezwalaj ani Nie zezwalaj. W takim przypadku stan uprawnień do powiadomień się nie zmieni.

Wpływ na nowo zainstalowane aplikacje

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

Czas wyświetlenia okna z uprawnieniami zależy od wersji docelowej pakietu SDK aplikacji:

  • Jeśli Twoja aplikacja jest kierowana na Androida 13 lub nowszego, ma pełną kontrolę nad tym, kiedy wyświetla się okno z prośbą o uprawnienia. Wykorzystaj tę okazję, aby wyjaśnić użytkownikom, dlaczego aplikacja potrzebuje tego uprawnienia, i zachęcić ich do jego przyznania.
  • Jeśli Twoja aplikacja jest kierowana na Androida 12L (poziom interfejsu API 32) lub starszego, system wyświetla okno z prośbą o uprawnienia za każdym razem, gdy aplikacja uruchamia aktywność po utworzeniu kanału powiadomień lub gdy uruchamia aktywność, a następnie tworzy pierwszy kanał powiadomień. Zwykle jest to podczas uruchamiania aplikacji.

Wpływ na aktualizacje dotychczasowych aplikacji

Aby zminimalizować zakłócenia związane z uprawnieniami powiadomień, system automatycznie przyznaje te uprawnienia wszystkim odpowiednim aplikacjom, gdy użytkownik zaktualizuje urządzenie do Androida 13 lub nowszego. Oznacza to, że 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 przyznania uprawnień

Aby aplikacja kwalifikowała się do automatycznego wstępnego przyznania uprawnień, musi mieć istniejący kanał powiadomień, a powiadomienia nie mogą być wyraźnie wyłączone przez użytkownika na urządzeniu z Androidem w wersji 12L lub niższej.

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

Wyjątki

Ta sekcja zawiera zestaw powiadomień i aplikacji, które nie są objęte zmianą zachowania uprawnień powiadomień. Na Androidzie 13 (API na poziomie 33) lub nowszym, jeśli użytkownik odmówi udzielenia uprawnień do wysyłania powiadomień, nadal będzie widzieć powiadomienia związane z usługami na pierwszym planie w Menedżerze zadań, ale nie będzie ich widzieć w schowku powiadomień.

Sesje multimediów

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

aplikacje skonfigurowane do samodzielnego zarządzania połączeniami telefonicznymi;

Jeśli aplikacja sama zarządza połączeniami telefonicznymi, nie potrzebuje uprawnienia POST_NOTIFICATIONS, aby wysyłać powiadomienia w stylu Notification.CallStyle.

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

  1. Deklaruje uprawnienie MANAGE_OWN_CALLS.
  2. Implementuje interfejs ConnectionService.
  3. Rejestruje się u dostawcy usług telekomunikacyjnych urządzenia, dzwoniąc na numer registerPhoneAccount().

Testowanie aplikacji

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

  • Aplikacja została niedawno zainstalowana na urządzeniu z Androidem w wersji 13 lub nowszej:

    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 włącza powiadomienia, gdy aplikacja jest zainstalowana na urządzeniu z Androidem 12L lub starszym, a następnie urządzenie zostaje zaktualizowane 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 Androidem 12L lub starszym, a następnie urządzenie zostanie zaktualizowane 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

W tej sekcji opisaliśmy kilka sposobów na efektywne wykorzystanie w aplikacji nowego uprawnienia dotyczącego powiadomień.

Zaktualizuj docelową wersję pakietu SDK aplikacji

Aby umożliwić aplikacji większą elastyczność w określaniu, kiedy ma się wyświetlić okno z prośbą o uprawnienia, zaktualizuj aplikację tak, aby była kierowana na Androida 13 lub nowszego.

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

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

Nowi użytkownicy mogą chcieć zapoznać się z aplikacją i sami przekonać się, jakie korzyści daje każda prośba o powiadomienie. Możesz wyświetlić prośbę o przyznanie uprawnień w reakcji na działanie użytkownika. Poniżej znajdziesz kilka przykładów sytuacji, w których warto wyświetlić prośbę o dostęp do powiadomień:

  • Użytkownik klika przycisk „dzwonek”.
  • Użytkownik decyduje się śledzić konto mediów społecznościowych innej osoby.
  • Użytkownik przesyła zamówienie na jedzenie z dowozem.

Rysunek 1 przedstawia zalecany proces żądania uprawnień do wysyłania powiadomień. Jeśli funkcja shouldShowRequestPermissionRationale() nie zwraca wartości true, aplikacja nie musi wyświetlać środkowego ekranu, czyli ekranu z tytułem „Otrzymuj powiadomienia”.

Możesz też ustawić prośbę o ocenę 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 otrzyma zaproszenie do otrzymywania powiadomień o aktualizacjach podróży. Gdy użytkownik naciśnie przycisk „Zgadzam się”, aplikacja poprosi o nowe uprawnienia, co spowoduje wyświetlenie okna systemowego
Rysunek 1. Zalecane czynności użytkownika związane z wyrażeniem zgody na wyświetlanie powiadomień. Ekran środkowy jest potrzebny tylko wtedy, gdy shouldShowRequestPermissionRationale() zwraca wartość true.

Prośba o uprawnienia w kontekście

Jeśli w aplikacji prosisz o uprawnienia dotyczące powiadomień, rób to w odpowiednim kontekście, aby wyraźnie wskazać, do czego służą powiadomienia i dlaczego użytkownik powinien wyrazić zgodę na ich otrzymywanie. Na przykład aplikacja poczty e-mail może zawierać opcje wysyłania powiadomień o każdym nowym e-mailu lub tylko o tych, w których użytkownik jest jedynym odbiorcą.

Wykorzystaj tę okazję, aby poinformować użytkowników o swoich zamiarach. Dzięki temu łatwiej będzie im zezwolić na wysyłanie powiadomień przez Twoją aplikację.

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

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

Odpowiedzialne korzystanie z uprawnień

Po otrzymaniu zgody na wysyłanie powiadomień pamiętaj, aby korzystać z tego uprawnienia w odpowiedzialny sposób. Użytkownicy mogą zobaczyć liczbę powiadomień wysyłanych codziennie przez Twoją aplikację oraz w każdej chwili mogą cofnąć uprawnienia.