Может ли уведомление FCM на Android перезаписать предыдущее?

Я использую FCM для отправки уведомлений на устройства Android. Когда приложение находится в фоновом режиме, если я отправлю 10 уведомлений, устройства отобразят 10 записей на панели уведомлений.

Я хочу, чтобы FCM делал только одну запись на панели уведомлений, т. е. более новая запись перезаписывала старые. Я не могу найти ключ, чтобы установить это на https://firebase.google.com/docs/cloud-messaging/http-server-ref#downstream.

Есть ли способ сделать, или это невозможно? Спасибо.


person Romulus Urakagi Ts'ai    schedule 30.09.2016    source источник
comment
Вы пробовали tag? https://firebase.google.com/docs/cloud-messaging/http-server-ref   -  person Jimit Patel    schedule 09.11.2017


Ответы (2)


Для этого в полезной нагрузке уведомления используйте ключ тега

{
    "notification" : {
        "title" : "Notification Title",
        "body" : "Notification Body",
        "tag" : "your_unique_tag"
    }
}

Ваше здоровье.

person Ayo Makanjuola    schedule 27.01.2018

Возможно. Два подхода.

Во-первых, вы используете параметр collapse_key, чтобы установить сообщение как сворачиваемое сообщение. Ссылаясь на документы FCM:

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

На самом деле он включен в предоставленную вами ссылку (сначала параметр в разделе Параметры):

collapse_key — этот параметр определяет группу сообщений (например, с Collapse_key: Доступны обновления), которые можно свернуть, чтобы при возобновлении доставки отправлялось только последнее сообщение. Это сделано для того, чтобы избежать отправки слишком большого количества одинаковых сообщений, когда устройство снова подключается к сети или становится активным.

Обратите внимание, что порядок отправки сообщений не гарантируется.

Примечание. В любой момент времени можно использовать не более 4 разных ключей свертывания. Это означает, что сервер подключения FCM может одновременно хранить 4 разных сообщения отправки для синхронизации для каждого клиентского приложения. Если вы превысите это число, нет никакой гарантии, какие 4 ключа свертывания сохранятся на сервере соединений FCM.


Второй подход — это объединение/упаковка/группировка уведомлений. Согласно моему ответу здесь:

Под группировкой уведомления я предполагаю, что вы имеете в виду группировку или объединение уведомлений.

Это больше о том, как вы обрабатываете уведомление в своем клиентском приложении. Вам просто нужно использовать setGroup(), чтобы добавить все ваши уведомления в одну группу, а затем вызвать notify(), чтобы позволить диспетчеру уведомлений об изменениях.

Эта документация по Добавить каждое уведомление в группу в значительной степени подводит итог. все до.


Обновлять:

Из одного из сообщений со ссылками, используя tag также является опцией:

Идентификатор, используемый для замены существующих уведомлений в панели уведомлений.

Если не указано, каждый запрос создает новое уведомление.

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

person AL.    schedule 30.09.2016
comment
Во-первых, я подумал, что это нужно для того, чтобы избежать многих уведомлений, когда устройство находится в автономном режиме. Если устройство подключено к сети, уведомления не будут группироваться. Я попробую второй. - person Romulus Urakagi Ts'ai; 30.09.2016
comment
@RomulusUrakagiTs'ai Для первого, да. Если вы хотите, чтобы уведомления были объединены, используйте второй подход. - person AL.; 30.09.2016
comment
Второй подход, по-видимому, можно использовать только тогда, когда приложение находится на переднем плане. Могу ли я сделать это, когда приложение находится в фоновом режиме? - person Romulus Urakagi Ts'ai; 30.09.2016
comment
@RomulusUrakagiTs'ai Когда приложение находится в фоновом режиме, в зависимости от структуры полезной нагрузки уведомление будет иногда обрабатывается по-разному, и по умолчанию, когда и уведомление, и данные находятся в полезной нагрузке, уведомление всегда будет обрабатываться системным треем Android. Одна вещь, которую вы можете сделать, это убедиться, что вы используете только полезные данные, чтобы они обрабатывались в вашем onMessageReceived(). - person AL.; 30.09.2016
comment
Поскольку для iOS требуется поле уведомления, невозможно сделать уведомление компактным или получить какую-либо трансляцию при получении уведомлений, верно? - person Romulus Urakagi Ts'ai; 30.09.2016
comment
@RomulusUrakagiTs'ai Я думаю, что это другая проблема, и она полностью зависит от того, как вы ее реализуете, адаптируясь к поведению устройств. - person AL.; 30.09.2016
comment
Давайте продолжим обсуждение в чате. - person Romulus Urakagi Ts'ai; 30.09.2016
comment
Не могли бы вы помочь мне @AL. с это? - person Joan P.; 04.03.2018