android - 当 uid 更改时,为用户订阅 Firebase 中的主题
问题描述
我的问题是:当我为用户订阅聊天时,假设聊天的 id 为“xDs50Yss70”,用户保持订阅状态,而用户的 Firebase uid 没有更改。但是,当用户的 Firebase uid 发生变化时,例如当用户删除应用并再次下载时,用户将不再订阅聊天以及他/她可能拥有的其他订阅。
首次创建聊天时,我使用此功能为用户订阅聊天
function subscribeUserToATopic(registrationTokens, chatId) {
return admin.messaging().subscribeToTopic(registrationTokens, chatId)
}
正如我们所看到的,我们使用注册令牌为用户订阅chatId
,我使用从这段代码中获得的注册令牌(在客户端):
@Override
public void onNewToken(String newToken) {
super.onNewToken(newToken);
// Send the new token to Firestore
sendTokenToDatabase(newToken);
}
我使用 将令牌发送到 Firestore 数据库sendTokenToDatabase()
,但是当用户删除应用程序并重新安装它时,令牌会更改...并且我不再可以使用此代码发送推送通知,因为用户的令牌已更改:
admin.messaging().sendToTopic(chatId, payload, options).then(() => {
console.log(`Push notification sent to the user(s) subscribed to the ${chatId}`)
}).
解决方案
我可以想到两种可能的解决方案。他们都喜欢在调用onNewToken方法时再次设置订阅,或者对于以前版本的 FCM,onTokenRefresh方法。
所以你需要做的是获取用户订阅的主题列表,然后为每个主题再次订阅主题。如果您的服务器上有它们,您可以从那里获取它们,或者您可以将它们本地存储在用户的设备上(即 SharedPreferences、数据库等)检索它们并再次设置它们。
推荐阅读
- java - 是否可以在设备上保留已部署的应用程序?
- python - flask-socketio 服务器发送而不先接收
- ios - tvOS 的 UICollectionView 中的错误(iOS 中不存在)
- python - 如何限制字符出现在python字符串中的次数?
- android - 哪个更适合开发服务应用程序(本机或混合)?
- python - 我需要过滤我的文本文件的内容
- maven - 有没有办法列出依赖 jar 来自哪些存储库?
- javascript - 在两个变量之间随机选择,并将其中一个变量设为 true
- angular - Angular filereader onloadend 返回结果
- python - 仅打印来自 .groups() 的匹配正则表达式模式