В Android у вас есть два варианта назначения приоритета доставки сообщений: обычный и высокий приоритет. Доставка сообщений с обычным и высоким приоритетом работает следующим образом:
Обычный приоритет. Это приоритет по умолчанию для сообщений передачи данных и уведомлений. Сообщения с обычным приоритетом доставляются немедленно, когда устройство не находится в спящем режиме. Когда устройство находится в режиме Doze , доставка может быть отложена для экономии заряда батареи до выхода устройства из спящего режима. Для менее важных сообщений, таких как уведомления о новых электронных письмах, поддержание синхронизации пользовательского интерфейса или синхронизация данных приложений в фоновом режиме, выберите обычный приоритет доставки.
Высокий приоритет. FCM стремится доставлять сообщения с высоким приоритетом немедленно, что позволяет FCM при необходимости вывести из спящего режима устройство и выполнить некоторую ограниченную обработку (включая очень ограниченный доступ к сети). Сообщения с высоким приоритетом, как правило, должны приводить к взаимодействию пользователя с вашим приложением или его уведомлениями.
Выбор между сообщениями с высоким и обычным приоритетом.
В то время как обычные приоритетные сообщения подходят для общих обновлений, выбирайте высокий приоритет, когда необходимо обеспечить немедленную доставку срочных сообщений или действий. Поскольку время доставки обычных приоритетных сообщений может зависеть от режима Doze, установка высокого приоритета для большинства видимых пользователям уведомлений гарантирует их быструю доставку. Например, уведомления, такие как сообщения чата, проблемы с учетной записью или обновления доставки еды, следует установить на высокий приоритет.
Обработка сообщений с высоким и обычным приоритетом.
Для сообщений с высоким и обычным приоритетом, полученных на устройстве Android, в обработчике onMessageReceived отводится несколько секунд на обработку содержимого сообщения, при этом для сообщений с высоким приоритетом выделяется немного больше времени, чем для сообщений с обычным приоритетом. Предполагается, что этого времени будет достаточно только для немедленного отображения уведомления. Если вам необходимо выполнить какие-либо дополнительные действия, такие как загрузка изображения из памяти устройства или обращение к вашим серверам для сбора дополнительного контента, вам потребуется предпринять дополнительные шаги.
Метод onMessageReceived вызывается в отдельном рабочем потоке. В качестве лучшей практики следует обрабатывать полезную нагрузку сообщения и немедленно отображать уведомление внутри метода onMessageReceived . Не следует выполнять дополнительные асинхронные сетевые вызовы или обрабатывать полезную нагрузку в отдельном потоке внутри метода onMessageReceived , так как это может привести к тому, что ваше приложение выйдет за пределы допустимого жизненного цикла процесса до полной обработки полезной нагрузки. В этом случае вы можете заметить, что некоторые отправленные сообщения FCM приводят к задержке или отсутствию уведомлений.
Если вам требуется дополнительное время для обработки сообщения, например, для получения imageUrl , содержащегося в полезной нагрузке сообщения, вам потребуется использовать такие конструкции, как WorkManager или службу переднего плана, чтобы продлить жизненный цикл приложения. При переопределении метода onMessageReceived следует руководствоваться следующими рекомендациями, чтобы убедиться в полной обработке уведомлений.
- Для уведомлений с высоким приоритетом: запустите ускоренное задание с помощью Android
WorkManager, чтобы убедиться, что ваше уведомление с высоким приоритетом получает приоритетное время обработки, и проверить, что отрисовка уведомления завершается. Хорошая новость в том, что если вы беспокоитесь о том, что исчерпаете квоты на ускоренные задания в результате обработки FCM с высоким приоритетом, вам не стоит волноваться. Существует кратковременное исключение для ускоренных заданий, запланированных сразу после отправки сообщенияonMessageReceivedFCM с высоким приоритетом. - Для обычных приоритетных уведомлений: вместо этого запустите обычный
WorkRequestс помощью AndroidWorkManager. Это гарантирует, что дополнительная работа, необходимая для обработки вашего уведомления, будет выполнена в конечном итоге, без использования приоритетной обработки и возникновения ненужных проблем с расходом заряда батареи.
Установка приоритета для сообщений
Вы можете отправлять уведомления пользователям, используя Admin SDK , FCM REST API и консоль Firebase . Чтобы изменить приоритет уведомления из Admin SDK и FCM REST API, необходимо обновить полезную нагрузку JSON сообщения. Пример кода показывает, как установить высокий приоритет. Для уведомлений, отправляемых из консоли, настройка полей уведомлений, специфичных для Android, не поддерживается.
{
"message": {
"notification": {
"body": "Purchase exceeding $500 detected",
"title": "Credit card purchase"
},
"data": {
"purchaser": "Your child",
"items": "Gravity Defier Sneakers"
},
"android": {
"priority": "high"
},
"apns": {
"headers": {
"apns-priority": "5"
}
}
}
}
Проверьте работу приоритетных уведомлений в режиме Doze.
Чтобы убедиться, что ваши приоритетные уведомления доходят до пользователя и обрабатываются корректно, выполните следующие действия для проверки уведомлений:
- Переведите ваше устройство в режим Doze, следуя инструкциям в разделе «Проверка приложения в режиме Doze» .
- Получите доступ к своему регистрационному токену FCM из приложения на тестовом устройстве. Дополнительную информацию о том, как получить доступ к токену, см. в разделе «Отправка тестового сообщения фоновому приложению» .
- Получив токен FCM , отправьте уведомление с высоким приоритетом на тестовое устройство, используя код отправки уведомлений FCM или команду cURL с параметрами конфигурации, соответствующими вашему уведомлению с высоким приоритетом.
Снижение приоритета выполнения высокоприоритетных задач FCM на Android.
Сообщения с высоким приоритетом на Android предназначены для контента, имеющего ограниченный срок действия и видимого пользователю, и должны приводить к появлению уведомлений для пользователя. Если FCM обнаружит закономерность, при которой сообщения не приводят к появлению уведомлений для пользователя, ваши сообщения могут быть понижены до обычного приоритета или переданы для обработки сервисам Google Play.
FCM использует данные о поведении сообщений за 7 дней при определении того, следует ли снижать приоритет сообщений или перенаправлять их на другие серверы; это решение принимается независимо для каждого экземпляра вашего приложения. Если в ответ на сообщения с высоким приоритетом уведомления отображаются таким образом, что они видны пользователю, то ваши будущие сообщения с высоким приоритетом не будут затронуты.
Делегирование уведомлений с помощью сервисов Google Play
Приоритетные уведомления, соответствующие определенным критериям, передаются через сервисы Google Play, а не понижаются в приоритете. Это означает, что уведомления отображаются сервисами Google Play от имени приложения, без необходимости его запуска. Это делается для улучшения общего пользовательского опыта на устройствах Android.
Обратите внимание, что отправка уведомлений через прокси-сервер вносит изменения в способ формирования отчетов по аналитике, связанной с полученными сообщениями:
- Для того чтобы аналитические данные по проксированным уведомлениям отображались, ваше приложение должно использовать FCM SDK версии 24.0.0 или выше.
- Вы можете заметить задержки или снижение количества полученных сообщений по сравнению с тем, что было до введения проксированных уведомлений. Это связано с тем, что аналитические данные для проксированных уведомлений отображаются только после запуска приложения и могут вообще не отображаться, если уведомление не приводит к открытию приложения.
Такой способ переадресации уведомлений является стандартным поведением для приложений, использующих Android Q+ и сервисы Google Play версии 19054000 или более поздней. Сообщения, отправленные через API HTTP v1, переадресовываются, но сообщения, отправленные через консоль Firebase или устаревшие API, переадресовываться не будут . Обратите внимание, что эта функция в настоящее время находится в стадии бета-тестирования и может быть изменена.
Хотя мы настоятельно рекомендуем оставить делегирование включенным из-за его преимуществ для батареи и памяти устройства, вы можете отключить эту функцию любым из следующих способов:
- На уровне приложения: в манифест приложения добавьте директиву
<meta-data android:name= "delivery_metrics_exported_to_big_query_enabled" android:value="false"/>. - Для экземпляра приложения: в зависимости от конкретного сценария использования, в пользовательском интерфейсе приложения установите
fun setNotificationDelegationEnabled(disable: Boolean): Task<Void!> - Для каждого сообщения отдельно: установите значение ключа
proxyв объектеAndroidNotificationдля запроса на отправку в значениеDENY.
Измерение снижения приоритета сообщений на Android
Отдельные сообщения. При доставке вы можете определить, было ли отдельное сообщение понижено в приоритете или нет, сравнив его приоритет доставки (из функции getPriority()) с его исходным приоритетом (из функции getOriginalPriority()) .
Все сообщения. API агрегированных данных о доставке FCM может сообщать, какой процент всех ваших сообщений, отправляемых на Android, получает пониженный приоритет. Некоторые сообщения могут быть пропущены в отчетах об агрегированных данных, но в целом они должны давать общее представление о показателях понижения приоритета сообщений. См. нашу статью об агрегированных данных о доставке для получения дополнительной информации и примеров кода для запроса к API; ее также можно изучить в обозревателе API .
Уведомления, отправленные через прокси. Уведомления, отправленные через прокси, не учитываются в текущих метриках доставки FCM или GA, поэтому вы можете столкнуться со снижением показателей доставки уведомлений до 15%. Для формирования отчетов по сообщениям, отправленным через прокси, используйте API агрегированных данных о доставке FCM .
ProxyNotificationInsightPercentsотображает процент успешно отправленных через прокси уведомлений, а также подробную информацию о сообщениях, которые не удалось успешно отправить через прокси.
Устранение неполадок, связанных с задержками уведомлений.
Убедитесь, что в вашем приложении включены уведомления. Если пользователь отключил разрешение на отправку уведомлений для вашего приложения, ваши уведомления не будут отправлены, и, как следствие, ваши сообщения будут иметь более низкий приоритет. Перед отправкой сообщений с высоким приоритетом в приложение необходимо убедиться, что уведомления включены .
Избегайте дополнительных сетевых запросов при обработке уведомления. Поскольку небольшая часть пользователей Android использует сети с высокой задержкой, избегайте установления соединения с серверами до отображения уведомления. Обратный вызов к серверу до истечения разрешенного времени обработки может быть опасен для пользователей в сетях с высокой задержкой.
Вместо этого включите содержимое уведомления в сообщение FCM и отобразите его немедленно. Если вам необходимо синхронизировать дополнительный контент внутри приложения на Android, вы можете запланировать задачу с помощью WorkManager для выполнения этой операции в фоновом режиме.