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

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

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

Требования

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

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

  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, которые не помечены как поддерживающие прямой запуск, при работе в режиме прямого запуска.
  • Библиотеки, используемые сервисом, также не должны получать доступ к хранилищу, защищенному учетными данными, и вызывать компоненты, не поддерживающие режим прямого запуска, во время работы в этом режиме. Это означает, что любые библиотеки, которые используются в приложении и вызываются из сервиса, должны поддерживать прямой запуск или приложение должно проверять, запущен ли сервис в режиме прямого запуска, и не вызывать их в этом режиме. Например, пакеты SDK Firebase работают с прямым запуском (их можно включить в приложение без сбоев в режиме прямого запуска), но многие API Firebase не поддерживают вызовы в этом режиме.
  • Если приложение использует собственный 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,
    },
}