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

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

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

Предварительные требования

  • Устройство необходимо настроить на режим прямой загрузки.
  • На устройстве должна быть установлена ​​последняя версия сервисов Google Play (19.0.54 или более поздняя).
  • Для приема сообщений FCM приложение должно использовать SDK FCM ( 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, во время работы в режиме прямой загрузки. Это означает, что любые библиотеки, используемые приложением и вызываемые из сервиса, либо должны поддерживать DirectBootAware, либо приложение должно проверять, работает ли оно в режиме прямой загрузки, и не вызывать их в этом режиме. Например, SDK Firebase работают с DirectBoot (их можно включить в приложение, не вызывая сбоев в режиме прямой загрузки), но многие API Firebase не поддерживают вызов в режиме прямой загрузки.
  • Если приложение использует собственное Application , Application также должно поддерживать прямую загрузку (в режиме прямой загрузки доступ к хранилищу, защищенному учетными данными, должен быть закрыт).

Отправляйте прямые сообщения, активируемые при загрузке.

Вы можете отправлять сообщения на устройства в режиме прямой загрузки, используя API HTTP v1 .

В запросе сообщения необходимо указать ключ "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,
    },
}