Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to handle multiple Firebase FCM tokens per user?

Tags:

From the official documentation I understand that the way it works is something like this:

  1. User installs app, FCM token is generated
  2. Sending token to app server
  3. Server uses token to send push-notifications to this device.

What if at the same time this user installs app on the other device - should I store multiple tokens per user on the app server? If yes - that means there should be something like checking for which ones are expired?

like image 980
Graykos Avatar asked Jun 12 '17 10:06

Graykos


People also ask

Is FCM token unique per device?

When the time comes to send a message, the token is read from the datastore and a data payload is sent via FCM to the specific device with the token assigned. A messaging token is unique per device and application.


2 Answers

I also came across the exact challenge and had to resolve to a solution: Storing each token for the user against the device id. It's interesting enough to know that this function in fact exists in the firebase messaging method. But more surprising is the fact that there's no documentation to handle such scenario. https://firebase.google.com/docs/reference/android/com/google/firebase/iid/FirebaseInstanceId.html#getId()

Summarily, while sending the new token to the server, also send along the device id returned by the getId() method and use it to enforce uniqueness of token per device.

And to also apply this solution while taking advantage of device grouping feature of FCM, you can make a server request on the FCM group, in order to delete the old token on that device-id before replacing it with the new.

like image 105
tormuto Avatar answered Sep 23 '22 01:09

tormuto


What if at the same time this user installs app on the other device - should I store multiple tokens per user on the app server?

Yes. A user could have multiple devices, a case where Device Groups are commonly used.

If yes - that means there should be something like checking for which ones are expired?

If a token expires, a callback is triggered (onTokenRefresh() for Android), from where you'll have to send the new token to your App Server and delete the old one corresponding to the user/device.

like image 27
AL. Avatar answered Sep 22 '22 01:09

AL.