Уведомление FCM с полезной нагрузкой в ​​системном трее устройства не передается в приложение

Android-приложение работает в фоновом режиме. Создано уведомление в консоли Firebase с полезной нагрузкой в ​​дополнительных параметрах. После получения уведомления и его отображения на панели задач устройства нажатие на уведомление просто возвращает в приложение, а полезные данные не были доставлены в дополнительных функциях с целью активности средства запуска. Уведомление не открывает средство запуска приложений по умолчанию, как указано в документации. Почему уведомление в системном трее устройства запускает действие, но иногда оно просто переходит в приложение, когда обычно щелкает значок приложения?


person Wilson    schedule 20.01.2017    source источник


Ответы (3)


Что вы используете в MainActivity, если вы отправляете уведомление, а приложение находится на переднем плане, оно приведет вас на эту конкретную страницу. Но если ваше приложение работает в фоновом режиме, то нажатие на панель уведомлений просто запустит ваше приложение. Здесь, если вы хотите, чтобы при нажатии на уведомление оно приводило вас к определенной странице, вам нужно использовать этот фрагмент кода в своей MainActivity.

 if (getIntent().getExtras() != null) { 
        Intent intent = new Intent(MainActivity.this, NotificationActivity.class); 
        startActivity(intent); 
    } 
person Aman Shekhar    schedule 20.01.2017
comment
Это то, что у меня есть, проблема в том, что намерение никогда не передавалось в MainActivity из панели уведомлений. Он просто открывает приложение в обычном режиме, как если бы вы щелкнули значок приложения. - person Wilson; 23.01.2017

Проверьте, есть ли в вашей активности запуска android:launchMode="singleTop" в манифесте, и вы пытаетесь прочитать дополнительные сведения в методе onCreate().

Если это ваш случай, будет создан только 1 экземпляр этого класса, поэтому, если действие находится в фоновом режиме, когда пользователь касается уведомления в трее, вызывается метод onNewIntent(). В этом методе вы можете получить дополнительные функции и поместить их в общее намерение следующим образом:

@Override
public void onNewIntent(Intent intent){
    super.onNewIntent(intent);
    setIntent(intent);
}

а затем onResume() вы можете получить доступ к дополнительным функциям с помощью getIntent().getExtras() .

Удачного кодирования!

person alvaro    schedule 23.07.2019

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

@Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        if (intent.getExtras() != null) {
            for (String key : intent.getExtras().keySet()) {
                Object value = intent.getExtras().get(key);
                Log.d("data ", "Key: " + key + " Value: " + value);
            }
        }
    }
person akshaysahai    schedule 12.08.2019