gpt4 book ai didi

android - 仅在重新启动应用程序后收到 Firebase 通知

转载 作者:行者123 更新时间:2023-12-05 00:01:17 26 4
gpt4 key购买 nike

我在 Android Studio 中使用 Firebase 助手设置了 Firebase。我面临一个小但恼人的问题。通知不适用于首次启动,但适用于所有后续启动。例如

  • 首次安装和打开应用:未收到通知。
  • 如果我强制停止应用程序并重新启动:通知现在可以正常工作。

我怀疑订阅请求不适用于第一个请求。以下是我在 android FirebaseInstanceIdService 中的 token 刷新代码:

 @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");
}
}

我确实在第一次启动时获得了注册 token ,并且它已成功发送到服务器。但是只有在重新启动应用程序后才会收到通知。有什么想法为什么它在首次发布时不起作用?

按照评论中的建议编辑代码。我已将新 token 保存到 sharedPrefs 并从 Activity 中调用订阅函数。但这仍然不起作用。应用仅在重新启动应用后才会收到通知。

 @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);
}
}

然后,在我的 Activity onCreate 函数中,我在延迟 5 秒后调用了订阅函数,以确保 token 已生成并保存。

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);

最佳答案

尝试将您的主题订阅移动到您的应用程序子类或您的主要 Activity 中,订阅主题的代码会在调用中发送正确的 token 后进行处理。

此外,仅在 onTokenRefresh() 中调用订阅,如果您的用户在稍后阶段取消订阅该主题,会发生什么情况?他们以后将无法重新订阅。

关于android - 仅在重新启动应用程序后收到 Firebase 通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41697607/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com