【发布时间】:2016-12-28 11:46:49
【问题描述】:
我对在 FCM(或以前的 GCM)中生成的令牌有疑问。
我们刚刚在我们的 Android 应用中从 GCM 迁移到 FCM,所有用户似乎都会在更新后的应用启动时获得一个新令牌。 这会导致一些麻烦,因为我们将令牌存储在我们的服务器上以供用户使用所有设备,并且由于我们在迁移时获得了新令牌,因此将其存储为该特定用户的新设备。
问题在于旧的 GCM 令牌似乎仍然有效,并且所有用户现在都在同一设备上收到双重推送通知。
这是一个用例:
- 用户在 1 部手机和 1 台平板电脑上安装了应用程序(应用程序的 GCM 版本) 服务器现在包含用户的这些令牌:
平板电脑:evWLQAq2yXw:APA91bH4GlHPSi[...]
电话:fnLVyZy_ICE:APA91bHopxcL1ckHl[...]
- 用户在手机上升级到新版本(生成新令牌的应用程序的 FCM 版本) 服务器现在包含用户的这些令牌:
平板电脑:evWLQAq2yXw:APA91bH4GlHPSi[...]
电话:fnLVyZy_ICE:APA91bHopxcL1ckHl[...]
电话:fnLVyZy_ICE:CTVj02MDxjZq7rIYSi[...]
- 服务器推送通知,用户现在在平板电脑上收到 1 个通知,在手机上收到 2 个通知。
应该如何处理?我不可能是唯一一个遇到这个问题的人
当我从我们的服务器向 FCM (https://fcm.googleapis.com/fcm/send) 发布通知时,我从谷歌得到的响应是这样的:
{
"multicast_id": 8013823232923765460,
"success": 1,
"failure": 0,
"canonical_ids": 0,
"results": [
{
"message_id": "0:1482923896059583%2bb227d2f9fd7ecd"
}
]
}
上述回复适用于旧 GCM 令牌和发布的新 FCM 令牌。响应中没有设置错误或 canonical_ids,以便我们的服务器可以相应地更新。
【问题讨论】:
-
我想知道您为什么要为一台设备保留多个令牌。确实,即使更新了令牌,旧令牌也会在一段时间内有效。但在我看来,您可以更新设备令牌而不是跟踪令牌,对吧?
-
我们为用户保存多个令牌的原因是他或她可能在多个设备上拥有该应用程序@AkramShokri。当服务器发送推送并从 GCM/FCM 获取无效令牌时,它将从数据库中删除它。我确信 GCM 生成的一个会在用户在 FCM 中生成一个新的之后在第一次推送时返回无效,但事实并非如此。
-
你解决过这个问题吗?我们有同样的问题。我们将 GCM 表单更新为 FCM,但我们也更改了 google 项目,现在旧项目上的旧 GCM 令牌似乎仍然有效。
-
@Xzya。我们还没有以适当的方式解决这个问题。我们现在已经完成了一个解决方法,我们比较冒号 (:) 之前的令牌的第一部分,用于用户的新令牌和旧令牌,如果第一部分相同,则删除旧令牌。这是一个我不喜欢的丑陋的解决方法,并且在任何地方都没有记录它总是有效的,但是我们看到了这个“模式”并且现在就去做了。仍在为此寻找合适的解决方案..
标签: android ios google-cloud-messaging firebase-cloud-messaging