透過直接啟動模式接收 FCM 訊息

如要在裝置解鎖前傳送 FCM 訊息給應用程式,可以啟用直接啟動模式。舉例來說,如果希望應用程式使用者即使在裝置鎖定時也能收到鬧鐘通知。

建構這個用途時,請遵守直接啟動模式的一般最佳做法和限制。請務必考量啟用直接啟動的訊息可見度。只要能存取裝置,使用者不必輸入憑證就能查看這些訊息。

事前準備

  • 裝置必須設為直接啟動模式。
  • 裝置必須安裝最新版本的 Google Play 服務 (19.0.54 以上版本)。
  • 應用程式必須使用 FCM SDK (com.google.firebase:firebase-messaging) 才能接收 FCM 訊息。

在應用程式中啟用直接啟動模式訊息處理功能

  1. 在應用程式層級的 Gradle 檔案中,新增 FCM 直接開機支援程式庫的依附元件:

    implementation 'com.google.firebase:firebase-messaging-directboot:20.2.0'
    
  2. 在應用程式資訊清單中加入 android:directBootAware="true" 屬性,讓應用程式的 FirebaseMessagingService 支援直接啟動模式:

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

請務必確保此 FirebaseMessagingService 能以直接開機模式執行。請確認是否符合下列條件:

  • 服務在直接啟動模式下執行時,不應存取受憑證保護的儲存空間。
  • 服務在直接啟動模式下執行時,不應嘗試使用未標示為具備直接啟動感知特性的元件,例如 ActivitiesBroadcastReceivers 或其他 Services
  • 服務使用的任何程式庫也不得存取受憑證保護的儲存空間,且在直接啟動模式下執行時,不得呼叫非 directBootAware 元件。也就是說,應用程式使用的任何程式庫 (從服務呼叫) 都必須具有直接啟動感知特性,否則應用程式必須檢查是否以直接啟動模式執行,且不得在該模式下呼叫這些程式庫。舉例來說,Firebase SDK 可搭配直接啟動功能使用 (可納入應用程式,不會在直接啟動模式下導致應用程式當機),但許多 Firebase API 不支援在直接啟動模式下呼叫。
  • 如果應用程式使用自訂 Application,則 Application 也必須支援直接啟動模式 (在直接啟動模式下無法存取受憑證保護的儲存空間)。

傳送啟用直接啟動功能的訊息

您可以使用 HTTP v1 API,將訊息傳送至直接啟動模式下的裝置。

訊息要求必須在要求主體的 AndroidConfig 選項中包含 "direct_boot_ok": true 鍵。例如:

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,
    },
}