android - Firebase 云消息传递:FCM 令牌过期
问题描述
我了解,如果发生以下情况之一,FCM 令牌会自行更新。
-应用删除Instance ID
-应用在新设备上恢复
-用户卸载/重新安装应用
-用户清除应用数据。
在App端可以使用以下来监控Token更新。
监控令牌生成
每当生成新令牌时都会触发 onTokenRefreshcallback,因此在其上下文中调用 getToken 可确保您访问的是当前可用的注册令牌。确保已将服务添加到清单中,然后在 onTokenRefresh 的上下文中调用 getToken,并记录如下所示的值:
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
// If you want to send messages to this application instance or
// manage this apps subscriptions on the server side, send the
// Instance ID token to your app server.
sendRegistrationToServer(refreshedToken);
}
我的问题是,当应用程序终止时,令牌过期并且 FCM 服务器无法知道设备的新令牌是什么(如果存在)。因此,当我向此设备发送通知/数据消息时,服务器无法将其发送到设备,因为它不知道将其发送到哪里(因为没有有效的令牌)。如何确保在这种情况下我可以通知设备?我不进行客户令牌生成。所以它似乎不时刷新令牌。如何提高我的令牌的有效性?
解决方案
您需要在发送消息时检查错误,并注意文档中列出的错误代码。如果出现错误,您应该停止使用令牌messaging/registration-token-not-registered
。
推荐阅读
- java - 如何为 Spring Boot 应用程序创建 Javadoc?
- r - 错误:“项目“path/to/file.rda”没有激活的脚本,因此无法激活”与 renv
- google-earth-engine - 将图像从 Google 地球引擎导出到 ArcMap 后出现额外的黑色区域
- python - 在破折号中单击按钮时运行python脚本
- android - 房间数据库 ID = null
- python - 您如何在约束中使用具有除法和乘法的纸浆?
- javascript - 如何将多个数据数组分组为 1 个数组
- android-recyclerview - 仅在加载时显示所有 recyclerview 内容(AsyncTask)
- css - 禁用表单时将类应用于表单元素Angular - Ionic
- google-apps-script - GmailApp.createDraft() 函数每日配额?