当应用在后台时,SharedPreferences将在Firebase服务中编辑后更改值

时间:2016-08-18 04:43:08

标签: android firebase firebase-cloud-messaging

我的应用程序中的共享首选项出现了奇怪的情况。我正在使用Firebase消息传递服务,每当收到消息时,我都希望在共享首选项中将布尔值设置为true。

这是一个简单的代码我很喜欢:

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
getApplicationContext().getSharedPreferences(ApplicationConstants.SHARED_PREFRENCES_KEY, MODE_PRIVATE).edit().putBoolean(getString(R.string.badge_settings_key), true).apply();
}

我稍后在我的一个活动中访问此布尔值。如您所见,我为此方法中的布尔值设置了true。

奇怪的是,当我的应用程序处于forground(其中一个活动是可见的)时,这非常有效,每当我访问此值时,它仍然是真的。但是,当我的应用程序处于后台并收到消息时,该值仍为false,不会更改。服务将无法正确触发,或者共享首选项文件无法正确保存。

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果您的应用处于后台或被杀,并且通知是从Firebase控制台发送的,则不会调用{p> onMessageReceived

在您的情况下发生了什么,您收到了通知但是方法onMessageReceived从未被调用过,而且SharedPref会将您作为任何布尔变量的默认值给出false。

解决方案: 请勿从Firebase控制台发送通知,请使用其API。

Check this out.

修改

您不得在请求中放入json密钥“通知”,以使其在应用程序的所有三种情况下都位于onMessageReceived:前景,背景和被杀。