Receiving the same token for different users when using firebase messaging

三世轮回 提交于 2020-04-06 03:19:25

问题


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 ?


回答1:


Firebase 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.




回答2:


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




回答3:


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.



来源:https://stackoverflow.com/questions/45247847/receiving-the-same-token-for-different-users-when-using-firebase-messaging

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!