Как сделать сообщение типа уведомления GCM / FCM неразборным - PullRequest
0 голосов
/ 11 мая 2018

Google Cloud Messaging (GCM) поддерживает два типа push-сообщений: сообщения «уведомления» и «данные». Согласно документации , уведомления по умолчанию являются сворачиваемыми, а сообщения данных по умолчанию не являются сворачиваемыми.

Чтобы сделать сообщение данных разборным, вам нужно указать collapseKey. У меня вопрос: как сделать сообщение-уведомление неразборным?

Примечание. Этот вопрос относится и к Firebase Cloud Messaging (FCM).

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Прежде всего, просто добавим сюда ссылку FCM docs :

A не сворачиваемое сообщение означает, что каждое отдельное сообщение доставленоУстройство.Не свернутое сообщение доставляет некоторое полезное содержимое, в отличие от свертываемого сообщения, такого как «пинг» без содержимого для мобильного приложения, чтобы связаться с сервером для получения данных.

По вашему вопросу -- " Как сделать сообщение неразборным? " - указали ли вы разные collapse_key для каждого notification отправляемого сообщения?

Складное сообщение работает так, как если бы каждое сообщение имело одинаковую collapse_key.Но если вы укажете другое для каждого сообщения, оно не сможет заменить предыдущее.Это приведет к тому, что сообщение notification будет вести себя как сообщение не сворачиваемое .

Однако, так как вы используете collapse_key, технически оно все еще обрабатываетсяв виде складного сообщения .Это означает, что он по-прежнему может быть ограничен четырьмя ключами сброса одновременно:

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

С учетом всего этого, любая причина, по которой вы не просто используете сообщение dataПолезная нагрузка?Мы используем его в нашем приложении, и я считаю его более гибким, чем notification сообщение.

0 голосов
/ 11 мая 2018

Документация по понятиям и опциям гласит:

сообщения по умолчанию не сворачиваются, за исключением уведомлений, которые всегда складываются

Но позже на той же странице говорится:

за исключением уведомлений, все сообщения неразборные по умолчанию

Что несколько двусмысленно. Однако в разделе полезной нагрузки указано:

[сообщения уведомлений] могут иметь дополнительную полезную нагрузку данных. Всегда складной

Поэтому кажется невозможным сделать сообщения уведомлений неразборными.

Я бы предположил, что это сделано специально, потому что при создании уведомлений в Android они автоматически заменяются, когда другое уведомление с таким же идентификатором публикуется (аналогично тому, как работает свертывание сообщений). Если я правильно помню, FCM / GCM использует один и тот же идентификатор для всех уведомлений.

Возможное решение

Если вы хотите получить неразборное уведомление, я бы посоветовал отправить полезную нагрузку только для данных (без уведомления или collapseKey), а затем переопределить onMessageReceived() из FirebaseMessagingService для создания собственного уведомления.

Пример этого доступен на примере быстрого запуска Android :

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    // ...

    // Check if message contains a data payload.
    if (remoteMessage.getData().size() > 0) {
        Log.d(TAG, "Message data payload: " + remoteMessage.getData());

        // ...
    }

    // ...

    // Also if you intend on generating your own notifications as a result of a received FCM
    // message, here is where that should be initiated. See sendNotification method below.
}

Последний комментарий указывает на пример sendNotification() метод .

Для вашего сценария вам необходимо передать уникальный идентификатор в вызов notificationManager.notify(), чтобы Android создавал новое уведомление и не заменял никакие существующие уведомления - следовательно, сообщение не сборно-разборные.

...