【问题标题】:FCM onTokenRefresh() sometimes not called [duplicate]FCM onTokenRefresh() 有时不被调用 [重复]
【发布时间】:2017-02-26 19:53:24
【问题描述】:

我多次尝试重新安装我的应用程序,我注意到 onTokenRefresh() 被调用的 10 次中只有大约 4 次(日志输出)

public class MyFirebaseInstanceIDService  extends FirebaseInstanceIdService {


@Override
public void onTokenRefresh() {
    // Get updated InstanceID token.
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    Log.d(TAG, "Refreshed token: " + refreshedToken);

        sendRegistrationToServer(refreshedToken);
    }
}

有什么方法可以保证调用 onTokenRefresh() 以便应用程序在互联网连接良好时订阅主题,例如启动每次检查是否应用程序已订阅主题,如果没有,则重新启动 firebase 服务。

在 onCreate() 函数中我做了:

mRegistrationBroadcastReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {

                // checking for type intent filter
                if (intent.getAction().equals(Config.REGISTRATION_COMPLETE)) {
                    // gcm successfully registered
                    // now subscribe to `global` topic to receive app wide notifications
                    FirebaseMessaging.getInstance().subscribeToTopic(Config.TOPIC_GLOBAL);



                } else if (intent.getAction().equals(Config.PUSH_NOTIFICATION)) {
                    // new push notification is received


                }
            }
        };

【问题讨论】:

  • onTokenRefresh() 方法仅在令牌更改时被调用。如果您重新安装该应用程序,令牌显然不会更改。因此,您应该在应用的常规启动流程中确定令牌。见stackoverflow.com/questions/37451395/…
  • 有什么方法可以保证应用程序会订阅一个主题?如果没有,很多用户将不会收到从服务器发送的推送通知!
  • @HZDI 在您的初始活动的onCreate() 中调用subscribeToTopic()
  • @AL 我编辑了我的问题。

标签: android firebase firebase-cloud-messaging


【解决方案1】:

根据docs

注册令牌可能会在以下情况下发生变化:

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

因此,当这些事件发生时,您应该将新令牌发送到此服务器!

【讨论】:

  • 所以我们等待其中一个事件完成,我们等待奇迹,如果有 100 万用户安装了该应用程序,大约 400 000 将不会被订阅。我从来没有遇到过 GCM 的这个问题。
  • 冷静下来想一想!我自己在处理我的一个项目时,我必须只在涵盖上述所有要点的某个单一事件中发送 FCM 令牌!那是因为我的应用程序的工作方式[详细说明,如果发生上述任何事件,那么用户肯定必须经历那个特定的事件]。您还必须考虑何时应该将令牌发送到您的服务器并涵盖所有这些要点,最有可能在应用启动时发送它!
猜你喜欢
  • 1970-01-01
  • 2016-09-24
  • 2016-09-23
  • 1970-01-01
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-29
相关资源
最近更新 更多