如果您想在设备解锁前将 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
。 - 在直接启动模式下运行时,该服务使用的库也不应访问受凭证保护的存储空间,并且不应调用 non-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,
},
}