【发布时间】: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