【问题标题】:Update Firebase Instance ID on app update在应用更新时更新 Firebase 实例 ID
【发布时间】:2017-02-05 03:21:32
【问题描述】:

在 GCM 时代,建议每次发布应用更新时都应检查是否提供了新的注册 ID(因为不能保证更新后相同)应用程序启动。

FCM 仍然是这种情况吗?我找不到任何关于此的文档

【问题讨论】:

    标签: android firebase firebase-cloud-messaging


    【解决方案1】:

    您应该在应用运行时检查当前令牌并监控onTokenRefresh()以检测令牌何时更改。

    通过调用FirebaseInstanceID.getToken()检查应用/主活动启动时的当前令牌:

    public class MainActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ...
            String token = FirebaseInstanceId.getInstance().getToken();
            if (token != null) {
                sendRegistrationToServer(refreshedToken);
            }
        }
        ...
    

    在这个 sn-p 中调用的 sendRegistrationToServer() 方法是您实现将注册令牌发送到您自己的服务器(或 Firebase 数据库等无服务器解决方案)的方法。

    通过继承 FirebaseInstanceIdService 并覆盖 onTokenRefresh() 来监控令牌的更改:

    @Override
    public void onTokenRefresh() {
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    
        // 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);
    }
    

    在此处查看文档:https://firebase.google.com/docs/cloud-messaging/android/client#sample-register

    【讨论】:

    • 我会在文档中描述的第一种情况下为 getToken() 添加一个空检查。我已经看到它过去发生过,或者这不再是@Frank 的担忧?
    • 是的,好电话。在这种情况下,getToken 可以返回 null,因为令牌可能尚未生成。我将更新示例以处理该问题。
    • 另外,根据文档getToken() 可以阻塞,所以从另一个线程调用它,而不是直接从onCreate()
    • 是的,我对此有点困惑。我从来没有见过它阻塞。而且我肯定得到了null 的回复。
    • GCM 客户端中的 getToken 阻塞,无法在 UI 线程上调用。但是 FCM 客户端不会,如果令牌尚不可用,则调用 getToken 将返回 null 否则令牌将在没有阻塞的情况下返回,并且在 UI 线程上调用是安全的。
    【解决方案2】:

    您不需要检查令牌是否是最新的。方法 如果生成了新令牌,则始终调用onTokenRefresh()。

    您需要做的是在调用onTokenRefresh() 时检查您的令牌是否已发送到您的服务器。

    【讨论】:

      猜你喜欢
      • 2019-07-27
      • 1970-01-01
      • 2020-04-19
      • 2022-12-18
      • 1970-01-01
      • 2021-10-27
      • 1970-01-01
      • 2017-03-11
      • 1970-01-01
      相关资源
      最近更新 更多