如果应用已卸载,Firebase 将从数据库中删除相关行



我正在使用Cloud Firestore来保留应用程序令牌以发送推送通知。但是,当用户卸载并重新安装应用时,Firestore 会收到同一用户的不同令牌。当用户卸载应用时,如何删除上一个令牌的相关行?

提前谢谢。

通常,您需要检测令牌何时无效,并在那时将其删除。 例如,当令牌被循环时(在用户安装应用程序时每隔几周发生一次(,您需要利用该时刻从数据库中删除旧令牌并添加新令牌。这样做可以最大程度地减少数据库中过期令牌的数量。

因此,分步意味着onTokenRefresh()

  1. 检查本地存储中是否有令牌(例如共享首选项(。如果是这样,请从数据库和本地存储中删除该令牌。

  2. 将新令牌存储在数据库和本地存储中。

但在您的情况下,这是不可能的,因为在卸载应用程序时不会调用onTokenRefresh,并且在重新安装时您将不知道以前的令牌。

处理以这种方式和其他方式留下的过时令牌的最简单方法是在发送到该令牌失败时删除它们。使用云函数发送 FCM 通知的示例有一个很好的例子:

admin
.messaging()
.sendToDevice(tokens, payload)
.then((response) => {
// For each message check if there was an error.
const tokensToRemove = [];
response.results.forEach((result, index) => {
const error = result.error;
if (error) {
console.error('Failure sending notification to', tokens[index], error);
// Cleanup the tokens who are not registered anymore.
if (error.code === 'messaging/invalid-registration-token' ||
error.code === 'messaging/registration-token-not-registered') {
tokensSnapshot.ref.child(tokens[index]).remove();
}
}
});
});

这很简单,当用户重新安装应用程序并再次登录时,只需用新令牌覆盖旧令牌即可。如果在生成新令牌后还需要删除其他内容,只需使用新令牌检查现有令牌即可。如果令牌不同,您可以删除所有不必要的内容。

相关内容

  • 没有找到相关文章

最新更新