Если вы хотите отправлять сообщения FCM в приложения до разблокировки устройства, включите режим прямой загрузки. Например, если вы хотите, чтобы пользователи вашего приложения получали уведомления о будильнике даже на заблокированном устройстве.
При реализации этого сценария использования соблюдайте общие рекомендации и ограничения для режима Direct Boot. Важно учитывать видимость сообщений, для которых включен режим прямого запуска. Любой пользователь, у которого есть доступ к устройству, может просматривать эти сообщения без ввода учетных данных.
Требования
- Устройство должно быть настроено для режима прямой загрузки.
- На устройстве должна быть установлена последняя версия сервисов Google Play (19.0.54 или более поздняя).
- Чтобы получать сообщения FCM, в приложении должен использоваться FCM SDK (
com.google.firebase:firebase-messaging).
Как включить обработку сообщений в режиме прямой загрузки в приложении
В файле Gradle на уровне приложения добавьте зависимость от библиотеки поддержки прямого запуска FCM:
implementation 'com.google.firebase:firebase-messaging-directboot:20.2.0'Добавьте в манифест приложения атрибут
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,
},
}