Получать сообщения FCM в режиме прямой загрузки

Если вы хотите отправлять FCM -сообщения приложениям до разблокировки устройства, вы можете включить режим прямой загрузки. Например, если вы хотите, чтобы пользователи вашего приложения получали уведомления о тревогах даже на заблокированном устройстве.

При реализации этого сценария использования соблюдайте общие рекомендации и ограничения для режима прямой загрузки. Важно учитывать видимость сообщений, связанных с прямой загрузкой. Любой пользователь, имеющий доступ к устройству, может просматривать эти сообщения без ввода учётных данных.

Предпосылки

  • Устройство должно быть настроено для режима прямой загрузки.
  • На устройстве должна быть установлена ​​последняя версия сервисов Google Play (19.0.54 или более поздняя).
  • Для получения сообщений FCM приложение должно использовать FCM SDK ( com.google.firebase:firebase-messaging ).

Включите обработку сообщений режима прямой загрузки в вашем приложении

  1. В файле Gradle уровня приложения добавьте зависимость от библиотеки поддержки прямой загрузки FCM :

    implementation 'com.google.firebase:firebase-messaging-directboot:20.2.0'
    
  2. Включите прямую загрузку FirebaseMessagingService в приложении, добавив атрибут android:directBootAware="true" в манифест приложения:

    <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 .

Запрос сообщения должен включать ключ "direct_boot_ok": true в параметрах AndroidConfig тела запроса. Например:

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