如要在裝置解鎖前將 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,
},
}