2016-04-21 2 views
3

Всякий раз, когда добавляется новое событие, пользователю отправляется push-уведомление. Если в строке добавлено десять событий, будет отправлено десять push-уведомлений, поведение которых будет раздражать.Как показать накопительное уведомление push вместо того, чтобы показывать несколько уведомлений, которые, как правило, появляются одновременно?

Я бы хотел, чтобы это было так: если десять событий добавлены в строку или добавлены очень близко друг к другу относительно времени, каждому пользователю будет отправлено только одно push-уведомление: "#{event.name} and 19 others events added that match your interests.".

Вот что я сделал до сих пор:

Добавлено поле last_sent_notification в users таблице. Каждый раз, когда добавляется новое событие, проверяется, что созданное событие не находится в радиусе 2 минут от last_sent_notification, и выдается уведомление.

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

Единственным недостатком этой проблемы является то, что при добавлении события уведомление не будет отправлено сразу. Будет отложено 2 минуты.

Есть ли какой-либо шаблон дизайна или оптимальное решение, которое могло бы лучше выполнить эту работу?

+0

Просто следуйте документам: http://developer.android.com/training/wearables/notifications/stacks.html – NSimon

+0

@NicolasSimon требуется на сервере. –

+0

Так что же вы остановились в конце? – e4c5

ответ

1

Было бы намного проще использовать Collapsible messages, который предназначен только для такого рода сценариев.

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

Все, что вам нужно сделать, это установить параметр collapse_key.

Если это не то, что вы действительно хотите, то, что вы ищете, это механизм очереди и отправки. Такого рода вещи можно сделать с помощью redis довольно легко. Ваше текущее приложение на стороне сервера просто подталкивает уведомления GCM в очереди redis. Если для данного пользователя уже есть сообщение, оно заменяется.

Тогда вам понадобится другой поток, который постоянно контролирует очередь redis и отправляет сообщения, которые старше n минут.

+0

Связанный с сервером или связанный с клиентом материал? –

+0

Arsan ali. Это просто вопрос добавления 1 строки кода вашему отправителю GCM, а также серверному приложению. – e4c5

+0

Я просмотрел этот документ. Это не то, что я хочу. Что там написано: оно отправит пользователю все уведомления, но только последний будет отображаться на мобильном телефоне пользователя, если все предыдущие уведомления используют одну и ту же 'collapse_key'. –