如何显示累积推送通知,而不是显示同时出现的多个通知?

3
每当添加新事件时,会向用户发送推送通知。如果连续添加十个事件,则用户将收到十条推送通知,这种行为很让人恼火。
我想这样做:如果连续添加十个事件或者这些事件在时间上非常接近,那么每个用户只会收到一条推送通知,内容为:"#{event.name}和其他19个符合您兴趣的事件已经添加了"。
到目前为止,我所做的是:在“users”表中添加了一个字段“last_sent_notification”。每次添加新事件时,都要检查所创建的事件是否在“last_sent_notification”的2分钟半径内,并触发通知。
如果新创建的事件在“last_sent_notification”的2分钟半径内,将会创建一个后台作业,在2分钟内等待任何其他即将到来的事件,并在2分钟后触发通知。如果在2分钟的等待期间创建了新事件,则通知将考虑在该2分钟等待期间创建的所有事件。
这个问题的唯一缺点是:当添加事件时,通知不会立即发送。会有2分钟的延迟。
有没有任何设计模式或最佳解决方案可以更好地完成这项工作?

只需按照文档操作:http://developer.android.com/training/wearables/notifications/stacks.html - NSimon
@NicolasSimon 这是服务器端所必需的。 - Arslan Ali
那么最终你决定采用什么方案了? - e4c5
1个回答

1

如果您想要的是这种情况下的简单解决方案,建议您使用 可折叠消息

可折叠消息是指可以被新的消息替换的消息,只要它还没有被传递到设备上,并且包含相同的折叠键。

您只需要设置 collapse_key 参数即可。

如果这不是您真正想要的,您可能需要一个队列和发送机制。这种事情可以很容易地通过redis完成。您当前的服务器端应用程序仅将 GCM 通知推送到 redis 队列中。如果给定用户已经有一条消息,则会被替换。

然后您需要另一个线程,不断监视 redis 队列,并发送早于 n 分钟的消息。


这是与服务器相关还是客户端相关的东西? - Arslan Ali
Arsan Ali。这只是在您的GCM发送器(即服务器应用程序)中添加1行代码的问题。 - e4c5
我已经阅读了那份文件。这不是我想要的。文件中写道:它会向用户发送所有通知,但如果之前的所有通知都使用相同的collapse_key,只有最新的通知会显示在用户的手机上。 - Arslan Ali
我想要的是一种综合效果通知。collapse_key 场景非常适用于体育比赛这种情况,用户需要及时更新最新得分。用户并不关心30秒前的得分是多少,他所关心的是:最新得分是多少。 - Arslan Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接