Odbieranie wiadomości FCM w trybie bezpośredniego rozruchu

Jeśli chcesz wysyłać wiadomości FCM do aplikacji, zanim urządzenie zostanie odblokowane, możesz włączyć tryb bezpośredniego uruchamiania. Na przykład jeśli chcesz, aby użytkownicy aplikacji otrzymywali powiadomienia o alarmach nawet na zablokowanym urządzeniu.

Podczas tworzenia tego przypadku użycia przestrzegaj ogólnych sprawdzonych metod i ograniczeń dotyczących trybu bezpośredniego uruchamiania. Ważne jest, aby wziąć pod uwagę widoczność wiadomości z włączonym bezpośrednim uruchamianiem. Każdy użytkownik mający dostęp do urządzenia może wyświetlać te wiadomości bez podawania danych logowania.

Wymagania wstępne

  • Urządzenie musi być skonfigurowane do trybu bezpośredniego uruchamiania.
  • Na urządzeniu musi być zainstalowana najnowsza wersja Usług Google Play (19.0.54 lub nowsza).
  • Aplikacja musi używać pakietu SDK FCM (com.google.firebase:firebase-messaging), aby otrzymywać wiadomości FCM.

Włączanie obsługi wiadomości w trybie bezpośredniego uruchamiania w aplikacji

  1. W pliku Gradle na poziomie aplikacji dodaj zależność od biblioteki obsługi bezpośredniego uruchamiania FCM:

    implementation 'com.google.firebase:firebase-messaging-directboot:20.2.0'
    
  2. Ustaw komponent FirebaseMessagingService aplikacji jako obsługujący bezpośrednie uruchamianie, dodając atrybut android:directBootAware="true" w manifeście aplikacji:

    <service
        android:name=".java.MyFirebaseMessagingService"
        android:exported="false"
        android:directBootAware="true">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    

Ważne jest, aby ta aplikacja (FirebaseMessagingService) mogła działać w trybie bezpośredniego uruchamiania. Możesz to sprawdzić, korzystając z tych wymagań:

  • Usługa nie powinna uzyskiwać dostępu do pamięci chronionej danymi logowania, gdy działa w trybie bezpośredniego uruchamiania.
  • Usługa nie powinna próbować używać komponentów takich jak Activities, BroadcastReceivers ani innych Services, które nie są oznaczone jako obsługujące bezpośredni rozruch, gdy działa w trybie bezpośredniego rozruchu.
  • Żadne biblioteki używane przez usługę nie mogą mieć dostępu do pamięci chronionej danymi logowania ani wywoływać komponentów, które nie obsługują bezpośredniego uruchamiania, gdy działają w trybie bezpośredniego uruchamiania. Oznacza to, że wszystkie biblioteki używane przez aplikację, które są wywoływane z usługi, muszą obsługiwać bezpośrednie uruchamianie lub aplikacja musi sprawdzać, czy działa w trybie bezpośredniego uruchamiania, i nie wywoływać ich w tym trybie. Na przykład pakiety SDK Firebase działają z bezpośrednim uruchamianiem (można je uwzględnić w aplikacji bez powodowania jej awarii w trybie bezpośredniego uruchamiania), ale wiele interfejsów API Firebase nie obsługuje wywoływania w trybie bezpośredniego uruchamiania.
  • Jeśli aplikacja używa niestandardowego elementu Application, element Application również musi obsługiwać bezpośrednie uruchamianie (brak dostępu do pamięci chronionej danymi logowania w trybie bezpośredniego uruchamiania).

Wysyłanie wiadomości z włączonym bezpośrednim uruchamianiem

Wiadomości do urządzeń w trybie bezpośredniego uruchamiania możesz wysyłać za pomocą interfejsu HTTP v1 API.

Żądanie wiadomości musi zawierać klucz "direct_boot_ok": true w opcjach AndroidConfig treści żądania. Na przykład:

https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send
Content-Type:application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA

{
  "message":{
    "token" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data": {
      "score": "5x1",
      "time": "15:10"
    },
    "android": {
      "direct_boot_ok": true,
    },
}