Сохранить приложение Wide Boolean в SharedPreference - PullRequest
0 голосов
/ 14 мая 2018

Я знаю, что это часто задаваемый вопрос, и я провел весь день, пытаясь найти разные решения, которые, похоже, не работают.

Я пытаюсь сохранить логическое значение receiveNotifications в SharedPreferences, но когдаЯ отправляю уведомление, оно все еще приходит.Когда я проверяю, установлено ли логическое значение в задании, в котором я его установил, он говорит, что значение должно быть таким, каким оно должно быть, но когда я вызываю это в моем Firebase MessagingService, оно все же позволяет уведомлению проходить.

Я впервые использую их, поэтому, если вы видите очевидный ответ, вот почему.

Сохранение логического значения:

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

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

Оказывается, что независимо от того, что вы делаете, Firebase должен переопределять то, что вы установили в приложении. Я узнал об этом, отправив уведомление с моего веб-сервера вместо отправки с консоли Firebase. Уведомление было остановлено, и общая настройка сработала.

0 голосов
/ 14 мая 2018

Push-сообщение - это объект Json, следующий пример - непосредственно из документов:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    }
  }
}

Существует 3 типа push-сообщений, уведомления, данные и оба;

  //Notification
  "message":{
    "notification":{
    }
  }

  //data
  "message":{
    "data":{
    }
  }

  //both
  "message":{
    "notification":{
    },
    "data":{
    }
  }

Каждый из них будет вызывать различное поведение в приложении в зависимости от того, открыто приложение или нет.

  • Уведомление: если приложение открыто, код службы будет выполнен, если уведомление не отображается по умолчанию

  • Данные: всегда будет выполняться код службы

  • Оба: если приложение открыто, код службы будет выполнен, если уведомление по умолчанию не отображается, а данные будут доступны в действии средства запуска как дополнительные, доступные из намерения

Веб-консоль Firebase всегда будет отправлять уведомления типа, а если вы добавите данные в качестве пользовательских параметров, они будут отправлять оба.

Ваш логический тип никогда не будет учитываться, если приложение закрыто и уведомление поступает из веб-консоли.

0 голосов
/ 14 мая 2018
 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){

     }
...