我知道这是一个常见的问题,我整个下午都在尝试不同的解决方案,而这些解决方案似乎无法发挥作用。
我正在尝试在SharedPreferences中存储一个布尔receiveNotifications
,但是当我发送通知时,它仍然会通过。当我检查布尔值是否在我设置的活动中设置时,它表示该值应该是它应该是什么,但是当我在我的Firebase
MessagingService中调用它时,它仍然允许通知。< / p>
这是我第一次使用它们,所以如果你看到明显的答案就是为什么。
存储布尔值:
// shared preferences
notificationsPref = mContext.getSharedPreferences("notifications", MODE_PRIVATE);
SharedPreferences.Editor editor = notificationsPref.edit();
editor.putBoolean("receiveNotifications", false);
editor.apply();
检查布尔值是否已设置:
// check if they want to receive notifications
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("notifications", MODE_PRIVATE);
Boolean areNotificationsAllowed = sharedPreferences.getBoolean("receiveNotifications", true);
if (areNotificationsAllowed){
Toast.makeText(this, "Send Notification", Toast.LENGTH_SHORT).show();
sendNotification(contentTitle, messageBody);
}
答案 0 :(得分:1)
推送消息是一个Json对象,下一个例子直接来自docs:
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"title":"Portugal vs. Denmark",
"body":"great match!"
}
}
}
有3种类型的推送消息,通知,数据和两者;
//Notification
"message":{
"notification":{
}
}
//data
"message":{
"data":{
}
}
//both
"message":{
"notification":{
},
"data":{
}
}
每个都会在应用中触发不同的行为,具体取决于应用是否开放。
通知:如果应用程序已打开,则会执行服务上的代码,否则默认情况下会显示通知
数据:始终会执行服务上的代码
两者:如果应用程序已打开,则将执行服务上的代码,否则默认情况下会显示通知,并且数据将在启动器活动中可用,因为可以从意图中获取
Firebase网络控制台将始终发送&#34;通知&#34;类型,如果您将数据添加为自定义参数,它将发送两者。
如果应用程序已关闭且通知来自Web控制台,则永远不会考虑您的布尔值。
答案 1 :(得分:0)
private SharedPreferences prefs;
private SharedPreferences.Editor editor;
prefs = getApplicationContext().getSharedPreferences("notifiactions",
MODE_PRIVATE);
editor = prefs.edit();
/////Assigning a Boolean///////////
editor.putBoolean("receiveNotifications", false);
editor.commit();
//Retrieving Boolean
prefs = getApplicationContext().getSharedPreferences("notifications",
MODE_PRIVATE);
bool = prefs.getBoolean("receiveNotifications", true);
//Try replacing this with your code also
if(bool){
}
答案 2 :(得分:0)
事实证明,无论你做什么Firebase
都必须覆盖你在应用程序中设置的内容。我发现这一点,而不是从Firebase控制台发送,我从我的网络服务器发送通知。通知已完全停止,共享首选项有效。