【问题标题】:Firebase Cloud Messaging : Expiration of FCM tokenFirebase 云消息传递:FCM 令牌过期
【发布时间】:2019-07-19 02:26:18
【问题描述】:

我了解,如果发生以下任一情况,FCM 令牌会自行更新。

-应用删除Instance ID
- 应用程序在新设备上恢复
- 用户卸载/重新安装应用程序
- 用户清除应用数据。

App端可以使用以下方式监控Token更新。

监控令牌生成

每当生成新令牌时都会触发 onTokenRefreshcallback,因此 在其上下文中调用 getToken 可确保您正在访问一个 当前可用的注册令牌。确保您已添加 服务到您的清单,然后在上下文中调用 getToken onTokenRefresh,并记录如下所示的值:

@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 服务器无法知道设备的新令牌是什么(如果存在)。因此,当我向此设备发送通知/数据消息时,服务器无法将其发送到设备,因为它不知道将其发送到哪里(因为没有有效的令牌)。如何确保在这种情况下我可以通知设备?我不进行客户令牌生成。所以它似乎不时刷新令牌。如何提高我的令牌的有效性?

【问题讨论】:

    标签: android firebase google-cloud-firestore firebase-cloud-messaging


    【解决方案1】:

    发送消息时需要检查错误,并注意错误代码,如listed in the documentation。如果收到错误 messaging/registration-token-not-registered,则应停止使用令牌。

    【讨论】:

    • 是的,如果我收到此错误,我不会尝试发送消息。我的问题是如何确保将消息传递到带有过期令牌的设备?一个简单的用例是当你想通知用户某事,比如新的报价或交易,提示用户打开应用程序。在这种情况下,该应用程序被终止了很长时间。由于服务器不知道正确的令牌,我如何联系用户?
    • 你不能 - 它已经过期了。您必须在您的应用程序中安排将刷新的令牌发送到您的后端并使用它。如果您安排尽快发生这种情况,您应该在旧令牌失效之前拥有它。最佳做法是在每次应用启动时发送它,以防万一。
    • 同意。如果应用程序长时间没有启动(可能是因为用户不经常使用它),那么应用程序就没有机会将令牌刷新到后端。在这种情况下,服务器端是否有其他方法可以找到正确的令牌?
    • 我不知道。请记住,如果用户没有积极使用您的应用,那么可能无论如何也不希望您远程调用它。
    • 我只使用 FCM 一天左右,但我仍然在玩昨天得到的令牌,比 30 分钟前要长得多。我在这里看到一些答案,这些令牌不会过期:stackoverflow.com/questions/41982619/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 2020-12-10
    • 2018-10-24
    • 2022-01-09
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多