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

How to show the accumulative push notification instead of showing multiple notifications that tend to appear at the same time?

每当添加新事件时,都会向用户发送推送通知。如果连续添加十个事件,将向用户发送十个推送通知,这种行为会很烦人。

我想这样:如果十个事件被添加到一行中,或者在时间上彼此非常接近,则只会向每个用户发送一个推送通知,说:"#{event.name} and 19 others events added that match your interests.".

这是我目前所做的:

users table 中添加了字段 last_sent_notification。每次添加新事件时,都会检查创建的事件是否在 last_sent_notification 的 2 分钟半径内,并触发通知。

如果新创建的事件在 last_sent_notification 的 2 分钟半径内,则会创建一个后台作业,它将为任何其他即将发生的事件等待 2 分钟,并在 2 分钟后触发。如果在 2 分钟等待期间创建了新事件,通知将考虑在该 2 分钟等待期间创建的所有事件。

这个问题唯一的缺点是:添加事件后,不会立即发送通知。会有2分钟的延迟。

有没有设计模式或优化方案可以更好地完成这项工作?

你使用Collapsible messages会简单很多,它就是为这种场景设计的

A collapsible message is a message that may be replaced by a new message containing the same collapse key if it has yet to be delivered to the device.

您只需设置collapse_key参数即可。

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

那你需要另外一个线程,不断的监控redis队列,发送超过n分钟的消息