Firebase Cloud Messaging + Android: приоритет тихих уведомлений

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.

Ответ 1

Вы получили разрешение на вибрацию или что-то в этом роде?