I use the code below to obtain a token from firebase :
const messaging = firebase.messaging();
messaging.requestPermission()
.then(() =>{
return firebase.messaging().getToken();
}).then(token => {
saveTokentoServer(user.uid, token);
})
the problem is that i receive the same token for different users. I am not able to send out targetted messages.
Does anyone know how I can obtain different token for different users ?
I have spent two days search for answers. Why is my web application not receiving unique token ?
I use the code below to obtain a token from firebase :
const messaging = firebase.messaging();
messaging.requestPermission()
.then(() =>{
return firebase.messaging().getToken();
}).then(token => {
saveTokentoServer(user.uid, token);
})
the problem is that i receive the same token for different users. I am not able to send out targetted messages.
Does anyone know how I can obtain different token for different users ?
I have spent two days search for answers. Why is my web application not receiving unique token ?
Share Improve this question edited Jul 21, 2017 at 23:54 Frank van Puffelen 599k85 gold badges888 silver badges858 bronze badges asked Jul 21, 2017 at 22:54 Bubble TroubleBubble Trouble 6391 gold badge9 silver badges17 bronze badges 1- 2 I'm not the downvoter, but gave you a counter-upvote to compensate. ;-) – Frank van Puffelen Commented Jul 21, 2017 at 23:50
3 Answers
Reset to default 12Firebase Cloud Messaging tokens identify an installation of an app in a specific device. They do not identify a specific user. So in your case, if multiple users access your app in the same browser profile, they will get the same token.
I haven't tried this myself, but I think you can delete the token (typically when the user signs out). Then request permission and get the new token for the new user, as usual.
I have an alternate solution to your problem,
You can use topics for receiving notifications,
1.) Subscribe topic for your registration_token, let the topic name unique for every user like user id.
https://iid.googleapis.com/iid/v1/<REGISTRATION_TOKEN>/rel/topics/<TOPIC_NAME>
Example:
https://iid.googleapis.com/iid/v1/nKctODamlM4:CKrh_PC8kIb7O...clJONHoA/rel/topics/movies
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA
2.) Send Notification to topic
https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA
{
"to" : "/topics/movies",
"priority" : "high",
"notification" : {
"body" : "This is a Firebase Cloud Messaging Topic Message!",
"title" : "FCM Message",
}
}
3.) Remove registration_id from the topic on logout
https://iid.googleapis.com/iid/v1:batchRemove
Content-Type:application/json
Authorization:key=API_KEY
{
"to": "/topics/movies",
"registration_tokens": ["nKctODamlM4:CKrh_PC8kIb7O..."],
}
Replace topic name "movies" with the unique user id or email etc
Another possible solution to the problem is to add a field called userId
in your data that you send as a notification. And at client side, only show notification if the userId == FirebaseAuth.user.id
or similar in case you are not using FirebaseAuth.