0

Currently I'm working on a SaaS with support for multiple tenants that can enable push notifications for their user-bases. I'm thinking of using a message queue to store all pushes and send them with a separate service. That new service would need to read from the queue and send the push notifications.

My question now is: Do I need to come up with a complex sending strategy? I know that with GCM has a limit of 1000 devices per request, so this needs to be considered. I also can't wait for x pushes to fly in as this might delay a previous push from being sent. My next thought was to create a global array and fill it with pushes from the queue. A loop would then fetch that array every say 1 second and send pushes. This way pushes would get sent for sure and I wouldn't exceed the 1000 devices limit.

So ... although this might work I'm not sure if an infinite loop is the best way to go. I'm wondering if GCM / FCM even has a request limit? If not, I wouldn't need to aggregate the pushes in the first place and I could ditch the loop. I could simply fire a request for each push that gets pulled from the queue.

Any enlightenment on this topic or improvement of my prototypical algorithm would be great!

1 Answers1

0

Do I need to come up with a complex sending strategy?

Not really. GCM/FCM is pretty simple enough. Just send the message towards the GCM/FCM server and it would queue it on it's own, then (as per it's behavior) send it as soon as possible.

I know that with GCM has a limit of 1000 devices per request, so this needs to be considered.

I think you're confusing the 1000 devices per request limit. The 1000 devices limit refers to the number of registration tokens you add in the list when using the registration_ids parameter:

This parameter specifies a list of devices (registration tokens, or IDs) receiving a multicast message. It must contain at least 1 and at most 1000 registration tokens.

This means you can only send to 1000 devices with the same message payload in a single request (you can then do a batch request (1000/each request) if you need to).

I'm wondering if GCM / FCM even has a request limit?

AFAIK, there is no such limit. Ditch the loop. Whenever you successfully send a message towards the GCM/FCM server, it will enqueue and keep the message until such time that it is available to send.

AL.
  • 36,815
  • 10
  • 142
  • 281
  • I did mean the limit of registration tokens per message! But knowing that no request limit exists is great. I thought there was some limitation to prevent DOS like bombarding when sending pushes, therefore my forced aggregation... –  Jan 10 '17 at 08:33
  • @codepushr There was a mention about [Throttling](http://stackoverflow.com/a/39658639/4625829) before. But that was way, way, waaay back and is no longer mentioned in the official documentation. So I think it's already been scrapped. Cheers! – AL. Jan 10 '17 at 08:50