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

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

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

Требования

  • Устройство должно быть настроено для режима прямой загрузки.
  • На устройстве должна быть установлена последняя версия сервисов 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. Добавьте в манифест приложения атрибут android:directBootAware="true", чтобы сделать FirebaseMessagingService совместимым с режимом Direct Boot.

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

Отправка сообщений с поддержкой прямого запуска

Вы можете отправлять сообщения на устройства в режиме прямой загрузки с помощью 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,
    },
}