Odbieranie wiadomości FCM w trybie bezpośredniego rozruchu

Jeśli chcesz wysyłać FCM wiadomości do aplikacji przed odblokowaniem urządzenia, możesz włączyć tryb bezpośredniego uruchamiania. Na przykład jeśli chcesz, aby użytkownicy Twojej aplikacji otrzymywali powiadomienia o alarmie 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 włączonych w trybie bezpośredniego rozruchu. Każdy użytkownik, który ma dostęp do urządzenia, może wyświetlać te wiadomości bez podawania danych logowania.

Wymagania wstępne

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

Włącz obsługę wiadomości w trybie bezpośredniego uruchamiania w aplikacji

  1. W pliku Gradle na poziomie aplikacji dodaj zależność od FCMbiblioteki obsługującej bezpośrednie uruchamianie:

    implementation 'com.google.firebase:firebase-messaging-directboot:20.2.0'
    
  2. Spraw, aby aplikacja FirebaseMessagingService obsługiwała bezpośrednie uruchamianie, dodając atrybut android:directBootAware="true" w pliku manifestu 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 to FirebaseMessagingService mogło 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 przez dane logowania, gdy jest uruchomiona 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średnie uruchamianie, gdy działa w trybie bezpośredniego uruchamiania.
  • Żadne biblioteki używane przez usługę nie mogą też uzyskiwać dostępu do pamięci chronionej przez dane logowania ani wywoływać komponentów nieobsługujących trybu bezpośredniego rozruchu, gdy usługa działa w tym trybie. Oznacza to, że wszystkie biblioteki używane przez aplikację, które są wywoływane z usługi, muszą być przystosowane do bezpośredniego uruchamiania 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ą w trybie bezpośredniego uruchamiania (można je uwzględnić w aplikacji bez powodowania jej awarii w tym trybie), ale wiele interfejsów API Firebase nie obsługuje wywoływania w trybie bezpośredniego uruchamiania.
  • Jeśli aplikacja korzysta z niestandardowego Application, musi on też obsługiwać bezpośrednie uruchamianie (w trybie bezpośredniego uruchamiania nie ma dostępu do pamięci chronionej hasłem).Application

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 wysłania wiadomości musi zawierać klucz "direct_boot_ok": trueAndroidConfig opcjach treści żądania. 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,
    },
}