我已使用Android Studio中的Firebase助手设置Firebase。我面临着一个小而令人烦恼的问题。这些通知在首次发布时不起作用,但会处理所有后续发布。例如仅在重新启动应用后才会收到Firebase通知
- 应用程序安装并首次打开:未收到通知。
- 如果我强制停止应用程序并重新启动:通知正在工作。
我怀疑订阅请求不适用于第一个请求。 下面是Android FirebaseInstanceIdService我令牌刷新代码:
@Override
public void onTokenRefresh() {
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
if(refreshedToken != null){
Log.d(TAG, "Refreshed token: " + refreshedToken);
FirebaseMessaging.getInstance().unsubscribeFromTopic("news");
sendTokenToServer(refreshedToken);
FirebaseMessaging.getInstance().subscribeToTopic("news");
}
}
我得到的第一个推出了注册标记,它是成功发送到服务器。但是只有在重新启动应用程序后才会收到通知。 任何想法,为什么它不是在第一次启动工作?
按照注释中的建议编辑代码。我已将新标记保存到sharedPrefs并从活动调用了订阅功能。但这仍然不起作用。仅在重新启动应用程序后才能获取通知。
@Override
public void onTokenRefresh() {
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
if(refreshedToken != null){
Log.d("FCGM", "Refreshed token: " + refreshedToken);
sendTokenToServer(refreshedToken);
myPrefs settings = new myPrefs(); //my class to handle prefs, working fine
settings.putBool("isNewToken",true);
settings.putString("token",refreshedToken);
}
}
然后,在我的活动onCreate函数中,我在5秒延迟后调用订阅函数,以确保令牌生成并保存。
new Timer().schedule(new TimerTask() {
@Override
public void run() {
myPrefs settings = new myPrefs();
if (settings.getBool("isNewToken")){
Log.d(TAG,"new token found"); //this is reaching
FirebaseMessaging.getInstance().unsubscribeFromTopic("news");
FirebaseMessaging.getInstance().subscribeToTopic("news");
settings.putBool("isNewToken",false);
}
}
}, 5000);
好的,会尝试它并让你知道。 – Ranhot
我已经将令牌保存到sharedPrefs并从活动中调用了主题订阅,但该应用仍然只从第二次启动开始才会收到通知。 – Ranhot
您现在可以显示您的当前代码用于订阅吗?排除代码中的任何敏感内容。 – FrankR