Обработка фонового уведомления - PullRequest
0 голосов
/ 03 сентября 2018

Я создаю приложение и решил использовать облачные сообщения Firebase. У меня проблема в том, что я понятия не имею, как обрабатывать получаемые мной уведомления. Насколько я знаю, когда вы открываете уведомление из фона, вы получаете намерение с данными, отправленными с сервера в активности запуска. Итак, у меня есть что-то подобное в моей деятельности по запуску:

Intent intentOpen;
    String message = getIntent().getStringExtra("message");

    if(message != null) {
            intentOpen = new Intent(this, MainActivity.class);
            if (message.equals(this.getResources().getString(R.string.new_shared_file))) {
                intentOpen.putExtra(MainActivity.nType, "SHARING");
            } else {
                intentOpen.putExtra(MainActivity.nType, "SERVICES");
            }
        }
    }

И в своей основной деятельности я хочу получить nType, чтобы определить, какой фрагмент должен открыть приложение:

public static String nType = "notification_type";

if (getIntent().hasExtra(nType)) {
        String notification = getIntent().getStringExtra(nType);
        if (notification.equals("SHARING")) {
            displayView(R.id.nav_shared_files);
        } else {
            displayView(R.id.nav_account);
        }
    } else if (savedInstanceState == null) {
        displayView(R.id.nav_online_files);
    }

Итак, как мне перенести строку в основное занятие (которое я получаю после двух других занятий). Или есть какой-то другой способ (например, со стороны сервера), чтобы получить строку для основного действия?

Спасибо за ваши ответы заранее.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Конечно, например, вы можете создать класс enum с экземпляром:

public enum DataManager {
        INSTANCE;
        private String data;

        public void setData(String data) {
            this.data = data;
        }

        public String getData() {
            return data;
        }
    }

Итак, в первом упражнении, когда вы получаете данные, вы звоните:

DataManager.INSTANCE.setData("whateverdata");

А в действии вам нужны данные, которые вы просто вызываете:

String savedData = DataManager.INSTANCE.getData();
0 голосов
/ 03 сентября 2018

В вашей деятельности по запуску вы получите сообщение, подобное этому, если вы отправите сообщение из консоли в качестве дополнительной опции в консоли Firebase: enter image description here

Что касается изображения вверх, вы получите изображение в качестве поля пользовательских данных, в противном случае вы не получите сообщение в вашем случае. Если ваше приложение находится на переднем плане, вы получите данные уведомления в методе onReceiveMessage внутри FirebaseNotificationService.

Intent intentOpen; String image = getIntent (). GetStringExtra ("image"); // или imageUrl

Отправка данных другим действиям должна осуществляться с помощью намеренных аргументов. Если вы хотите пойти по этому пути, вы всегда должны указывать любые аргументы, которые вам нужны, при запуске следующего действия. И, конечно, вы можете выбрать другие способы передачи данных другим действиям.

...