在Firebase云消息中发送重复消息



在我们的项目中,我们使用Firebase云消息进行推送通知,并遇到了消息重复的问题。我们的流程如下:

  • 我们的客户端基于iOS设备,我们使用follow-sdk

Xamarin。Firebase.iOS.CloudMessaging 3.1.2

Xamarin。Firebase.iOS.InstanceID 3.2.1

Xamarin。Firebase.iOS.Core 5.1.3

  • 当用户登录时,应用程序请求令牌
  • 应用程序将此令牌发送到服务器,服务器将此令牌订阅到主题

为用户订阅主题Reqest

POST https://iid.googleapis.com/iid/v1:batchAdd
request body   
{
"to" : "/topics/test",
"registration_tokens" : ["..user_registration_token.."]
}
  • 服务器定期向主题发送通知

发送主题订阅者请求通知

POST https://fcm.googleapis.com/v1/projects/our_project_id/messages:send
request body
{
"message":
{
"topic":"test",
"notification":
{
"title":"test-6",
"body":"test-6"
}
}
}
  • 当用户从应用程序注销时,服务器执行取消订阅主题中的用户令牌
POST https://iid.googleapis.com/iid/v1:batchRemove
{
"to": "/topics/test",
"registration_tokens" : ["..user_registration_token.."]
}

但是,当用户再次登录并请求全新的令牌时,设备仍然收到发送到旧令牌的推送通知,如果我们按主题发送通知,这些用户会收到重复的推送消息。

如果我们尝试从api方法获取旧令牌的信息

GET https://iid.googleapis.com/iid/info/token.....

我们得到的响应

<HTML>
<HEAD>
<TITLE>Internal Server Error</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Internal Server Error</H1>
<H2>Error 500</H2>
</BODY>
</HTML>

是否尝试添加?details=true添加到您的uri。请确保在标头中使用授权密钥。预期输出为

{"错误":"没有找到有关此实例id的信息

{
"application": "com.chrome.windows",
"subtype": "wp:http://localhost:8089/#xxx-xx-xx-xx-xx-x",
"scope": "*",
"authorizedEntity": "xxxx",
"rel": {
"topics": {
}
}
},
"platform": "BROWSER"
}

相关内容

  • 没有找到相关文章

最新更新