TL;DR: сообщения, отправляемые на устройства Android через FCM, занимают от 10 секунд до 5 минут для доставки. Вероятно, из-за приоритета. Я установил его на "высокий", но похоже, что он не остается на этом уровне.
Я разрабатываю приложение как для iOS, так и для Android. Мой бэкенд работает на Django. Для нашего взаимодействия в реальном времени мы недавно начали использовать Firebase Cloud Messaging (FCM).
Мне удалось успешно подключить сервер Django и отправлять сообщения на оба типа устройств.
Вот мой код python, который создает сообщение. Обратите внимание, что данные маркера добавляются позднее динамически и сообщения являются тихими уведомлениями.
def _build_silent_message(not_id, data):
"""Construct silent notifiation message.
Silent means that this message won't show up in the notifications hub
of the app.
"""
return {
'message': {
'data': {"data": data},
'apns': {
'payload': {
"notId": not_id, # notId HAS TO BE FIRST!!!
'aps': {
'content-available': 1
}
},
'headers': {
'apns-priority': '10'
},
},
'android': {
'priority': "high",
'data': {
"androidData": data,
'content-available': '1'
}
}
}
}
Как вы можете видеть, я поставил приоритет Apple и Android на "высокий" (/10). На iOS все сообщения доставляются немедленно. На Android, однако, это не так. Сообщения доходят до 5 минут, пока они не появятся на телефонах. Я думаю, что это может быть приоритетным вопросом, поскольку в документации указано:
Высокий приоритет. FCM пытается немедленно отправить сообщения с высоким приоритетом, что позволяет службе FCM пробуждать спящее устройство, когда это необходимо, и выполнять ограниченную обработку (включая очень ограниченный доступ к сети).
Все идет нормально. Я поставил приоритет на высокий. Но в документации далее говорится:
Сообщения с высоким приоритетом обычно должны приводить к взаимодействию пользователя с вашим приложением. Если FCM обнаруживает шаблон, в котором они этого не делают, ваши сообщения могут быть деприориентированы.
Все мои сообщения, отправленные на устройства, требуют взаимодействия с телефоном. Но все мои сообщения - это бесшумные сообщения. Возможно, FCM считает, что мои сообщения не требуют взаимодействия с пользователем и поэтому придают ему более низкий приоритет.
Кто-нибудь знает, как это решить?
EDIT: Я тестировал Android Galaxy S7 и Google Pixel 2.