如何验证服务器上的FCM注册令牌?

时间:2017-01-09 16:33:57

标签: node.js firebase firebase-cloud-messaging

我获得了用于网络推送的Firebase云消息传递注册令牌。 然后我将它发送到我的服务器以保存在数据库中以便稍后推送。 但是,如何验证此令牌是有效还是假的?

我已经尝试了this,但我认为这适用于Auth令牌而非网络推送。

其他人可以向我的服务器发送随机假令牌的请求。我希望在保存到db之前防止这种情况。

编辑:它已经解决了,我写了一个简单的类来快速使用FCM进行Web推送。 https://github.com/emretekince/fcm-web-push

5 个答案:

答案 0 :(得分:5)

发送到无效注册令牌时,您应该会收到200 + error:InvalidRegistration

  

检查传递给服务器的注册令牌的格式。确保它与客户端应用程序通过Firebase Notifications注册时收到的注册令牌相匹配。不要截断或添加其他字符。

当您尝试发送一个简单的cURL请求时,这是响应,其中注册令牌是随机发生的:

curl --header "Authorization: key=$[your_server_key_here]" \
       --header Content-Type:"application/json" \
       https://fcm.googleapis.com/fcm/send \
       -d "{\"registration_ids\":[\"ABC\"]}"

请注意,我在"ABC"参数中添加了registration_ids。如果它是有效的注册令牌,但与您的项目无关,您可能会收到200 + error:NotRegistered

您可以尝试从服务器发送测试消息以查看响应,而无需使用dry_run参数向设备发送实际消息:

  

此参数设置为true时,允许开发人员在不实际发送消息的情况下测试请求。

答案 1 :(得分:3)

一种方法是发送带有dry_run option = true的消息,如AL所述。在另一个答案中。

另一种方法是使用InstanceId服务器API:
https://developers.google.com/instance-id/reference/server

答案 2 :(得分:1)

如果有人将Firebase Admin SDK 用于 node.js ,则无需使用server_key明确地手动发送请求。 管理SDK 提供发送dry_run推送消息以验证fcm_token

function verifyFCMToken (fcmToken) => {
    return admin.messaging().send({
        token: fcmToken
    }, true)
}

像下面这样使用这种方法

verifyFCMToken("YOUR_FCM_TOKEN_HERE")
.then(result => {
    // YOUR TOKEN IS VALID
})
.catch(err => {
    // YOUR TOKEN IS INVALID
})

答案 3 :(得分:0)

根据文档,您可以使用validate_only测试请求,而无需实际传递消息。

https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages/send

答案 4 :(得分:0)

firebase 端点 URL 的 HTTP v1 使用可参考 doc

之后,您可以使用此请求正文和 "validate_only": true 来测试请求,而无需实际传递消息。

{
    "validate_only": true,
    "message": {
        "token": "your fcm token"
    }
}