我们是否需要针对GCM / FCM的复杂发送策略?

时间:2017-01-09 12:08:29

标签: algorithm google-cloud-messaging message-queue firebase-cloud-messaging

目前,我正在开发SaaS,支持多个租户,可以为其用户群启用推送通知。 我正在考虑使用消息队列来存储所有推送并使用单独的服务发送它们。该新服务需要从队列中读取并发送推送通知。

我现在的问题是:我是否需要提出复杂的发送策略?我知道GCM每个请求限制为1000个设备,因此需要考虑这一点。我也不能等待x推进,因为这可能会延迟先前的推送。我的下一个想法是创建一个全局数组,并从队列中推送它。然后循环将每隔1秒获取该数组并发送推送。这种推送方式肯定会被发送,我不会超过1000个设备限制。

所以......虽然这可能有用,但我不确定无限循环是否是最好的方法。我想知道GCM / FCM是否有请求限制?如果没有,我不需要首先聚合推送,我可以放弃循环。我可以简单地发出从队列中拉出的每个推送的请求。

对这个主题的任何启示或我的原型算法的改进都会很棒!

1 个答案:

答案 0 :(得分:1)

  

我是否需要提出复杂的发送策略?

不是真的。 GCM / FCM非常简单。只需将消息发送到GCM / FCM服务器,然后将其自行排队,然后(根据其行为)尽快发送。

  

我知道GCM每个请求限制为1000个设备,因此需要考虑这一点。

我认为你对每个请求限制的1000个设备感到困惑。 1000个设备限制是指使用registration_ids参数时在列表中添加的注册令牌数:

  

此参数指定接收多播消息的设备列表(注册令牌或ID)。它必须包含至少1个,最多1000个注册令牌

这意味着您只能在一个请求中发送具有相同消息有效负载的1000个设备(如果需要,您可以执行批处理请求(每个请求1000个)。

  

我想知道GCM / FCM是否有请求限制?

AFAIK,没有这样的限制。抛弃循环。无论何时成功向GCM / FCM服务器发送消息,它都会将消息入队并保留,直到可以发送消息为止。