FCM迁移而不会丢失旧令牌

时间:2018-12-13 16:16:41

标签: android firebase google-cloud-messaging

我在某种程度上处于边缘情况,我们正在迁移到Firebase,但是我们的数据库很奇怪,并且在使此过渡顺利进行方面遇到了一些麻烦。我们的表曾经是[user-id, device-id],后端做select * where user-id = foo,然后循环结果并将推入发送到每个设备ID。这些ID可以是GCM或APNS令牌,后端会根据格式检查将其发送到哪里。
要迁移,我们添加了一列:firebase-id。对于我们的iOS应用,我们可以调用一种方法来获取旧的设备ID。既然我们正在使用Firebase,我们将检索此旧令牌和新的Firebase令牌,然后将它们都发送到后端,如果旧令牌已存在,我们将更新该行并将新的Firebase令牌添加到新列,如果旧令牌是新令牌,我们将忽略它,并使用firebase令牌创建新行。
对于发送,我们更改了代码以查看行是否具有firebase ID,如果存在,则将推送发送到firebase,否则我们将使用旧方法发送推送。

这里的想法是继续为用户提供旧令牌,因为有些令牌可能会在一台设备上更新应用程序,而不会在另一台设备上更新。我们可以清除一个用户具有Firebase ID的所有旧令牌,但是他们将停止在没有更新应用程序的任何设备上接收通知。我们不能简单地添加一行并保留旧的一行,因为这样用户将收到两个通知。

我们在iOS上所做的一切都很好,我们已经将其安装到位,并且一切都按计划进行。更新时,他们会注册一个新的firebase令牌,并将其添加到具有当前设备的旧设备令牌的行中。
但是我现在想在Android上实现相同的功能,而且似乎无法获得旧的令牌。 FCM指定无法在旧版GCM SDK旁边运行,我找不到通过FCM SDK检索旧令牌的函数,我们没有将其缓存在任何地方(好吧,在数据库中,但这与设备,因此我们不知道要更新哪一行)。在已经使用FCM的应用程序中,我需要旧令牌,因此我可以立即将两个令牌发送到后端,并且可以使用旧令牌更新行。

在已经使用Firebase时如何检索旧的GCM令牌?

1 个答案:

答案 0 :(得分:1)

由于它不是以前的代码库所内置的,所以我想不出一种将GCM令牌与Firebase相关联的简便方法。

但是,GCM和FCM令牌都可以从FCM端点发送到设备。假设您为GCM和Firebase使用相同的项目,则可以利用这一点。当用户更新到使用FCM的应用的新版本时,令牌刷新时,先前的GCM令牌将失效。您可以同时向GCM和FCM令牌发送消息。由于您会收到回复,告诉您令牌是否无效,因此随着用户更新GCM令牌会随着时间的推移而失效,您可以将其从数据库中删除。

我意识到这不是一个优雅的解决方案,但是它可以工作。