使用firebase消息传递时为不同用户接收相同的令牌

时间:2017-07-21 22:54:07

标签: javascript firebase firebase-cloud-messaging

我使用下面的代码从firebase获取令牌:

const messaging = firebase.messaging();

messaging.requestPermission()
  .then(() =>{
    return firebase.messaging().getToken();
  }).then(token => {
     saveTokentoServer(user.uid, token);
  })

问题是我收到了不同用户的相同令牌。我无法发送目标消息。

有谁知道如何为不同的用户获取不同的令牌?

我花了两天时间寻找答案。为什么我的Web应用程序没有收到唯一令牌?

3 个答案:

答案 0 :(得分:2)

Firebase云消息传递令牌可识别特定设备中的应用安装。他们没有识别特定用户。因此,在您的情况下,如果多个用户在同一个浏览器配置文件中访问您的应用,他们将获得相同的令牌。

我自己没试过,但我认为你可以delete the token(通常在用户退出时)。然后像往常一样为新用户request permissionget the new token

答案 1 :(得分:1)

对于您的问题,我有另一种解决方法,

您可以使用主题来接收通知,

1。)为您的registration_token订阅主题,让每个用户的主题名称都唯一,例如用户ID。

https://iid.googleapis.com/iid/v1/<REGISTRATION_TOKEN>/rel/topics/<TOPIC_NAME>

示例:

https://iid.googleapis.com/iid/v1/nKctODamlM4:CKrh_PC8kIb7O...clJONHoA/rel/topics/movies
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

2。)向主题发送通知

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。)在注销时从主题中删除registration_id

https://iid.googleapis.com/iid/v1:batchRemove
Content-Type:application/json
Authorization:key=API_KEY
{
   "to": "/topics/movies",
   "registration_tokens": ["nKctODamlM4:CKrh_PC8kIb7O..."],
}

用唯一的用户ID或电子邮件等替换主题名称“电影”

答案 2 :(得分:0)

该问题的另一种可能的解决方法是在您作为通知发送的数据中添加一个名为userId的字段。并且在客户端,仅在userId == FirebaseAuth.user.id或类似的情况下才显示通知,以防您不使用FirebaseAuth。