我获得了用于网络推送的Firebase云消息传递注册令牌。 然后我将它发送到我的服务器以保存在数据库中以便稍后推送。 但是,如何验证此令牌是有效还是假的?
我已经尝试了this,但我认为这适用于Auth令牌而非网络推送。
其他人可以向我的服务器发送随机假令牌的请求。我希望在保存到db之前防止这种情况。
编辑:它已经解决了,我写了一个简单的类来快速使用FCM进行Web推送。 https://github.com/emretekince/fcm-web-push
答案 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"
}
}