如要在裝置解鎖前傳送 FCM 訊息給應用程式,可以啟用直接啟動模式。舉例來說,如果希望應用程式使用者即使在裝置鎖定時也能收到鬧鐘通知。
建構這個用途時,請遵守直接啟動模式的一般最佳做法和限制。請務必考量啟用直接啟動的訊息可見度。只要能存取裝置,使用者不必輸入憑證就能查看這些訊息。
事前準備
- 裝置必須設為直接啟動模式。
- 裝置必須安裝最新版本的 Google Play 服務 (19.0.54 以上版本)。
- 應用程式必須使用 FCM SDK (
com.google.firebase:firebase-messaging
) 才能接收 FCM 訊息。
在應用程式中啟用直接啟動模式訊息處理功能
在應用程式層級的 Gradle 檔案中,新增 FCM 直接開機支援程式庫的依附元件:
implementation 'com.google.firebase:firebase-messaging-directboot:20.2.0'
在應用程式資訊清單中加入
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
能以直接開機模式執行。請確認是否符合下列條件:
- 服務在直接啟動模式下執行時,不應存取受憑證保護的儲存空間。
- 服務在直接啟動模式下執行時,不應嘗試使用未標示為具備直接啟動感知特性的元件,例如
Activities
、BroadcastReceivers
或其他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,
},
}