android - 不丢失旧 token 的 FCM 迁移

标签 android firebase google-cloud-messaging

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

这里的想法是继续支持旧 token 的用户,因为有些人可能会在一台设备上更新应用程序,但不会在另一台设备上更新。当一个用户拥有 firebase id 时,我们本可以清除他们的所有旧 token ,但是他们将停止在任何没有更新应用程序的设备上接收通知。我们不能简单地添加一行并保留旧的,因为那样用户会收到两个通知。

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

如何在已经使用 Firebase 的情况下检索旧的 GCM token ?

最佳答案

由于它没有内置到您之前的代码库中,我想不出将 GCM token 与 Firebase 相关联的简单方法。

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

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

关于android - 不丢失旧 token 的 FCM 迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53765988/

相关文章:

java - 其他用户如何使用我的 GCM 应用程序?

android - 什么时候创建端点?

java - 如何通过 Activity 的上下文获取类中的 TextView

android - 为什么我不能在 Fragment 中调用方法

java - 为什么这个 Activity 没有开始?

node.js - 在 Angular 2 应用程序中从 Cloud Functions for Firebase 发送 mailgun 电子邮件

android - 更改分屏扩展颜色 Android

javascript - 我对这个异步函数做错了什么?

firebase - FCM flutter 启用通知振动

google-cloud-messaging - Google Developer Console 的凭证端许可