Android-приложение работает в фоновом режиме. Создано уведомление в консоли Firebase с полезной нагрузкой в дополнительных параметрах. После получения уведомления и его отображения на панели задач устройства нажатие на уведомление просто возвращает в приложение, а полезные данные не были доставлены в дополнительных функциях с целью активности средства запуска. Уведомление не открывает средство запуска приложений по умолчанию, как указано в документации. Почему уведомление в системном трее устройства запускает действие, но иногда оно просто переходит в приложение, когда обычно щелкает значок приложения?
Уведомление FCM с полезной нагрузкой в системном трее устройства не передается в приложение
Ответы (3)
Что вы используете в MainActivity, если вы отправляете уведомление, а приложение находится на переднем плане, оно приведет вас на эту конкретную страницу. Но если ваше приложение работает в фоновом режиме, то нажатие на панель уведомлений просто запустит ваше приложение. Здесь, если вы хотите, чтобы при нажатии на уведомление оно приводило вас к определенной странице, вам нужно использовать этот фрагмент кода в своей MainActivity.
if (getIntent().getExtras() != null) {
Intent intent = new Intent(MainActivity.this, NotificationActivity.class);
startActivity(intent);
}
Проверьте, есть ли в вашей активности запуска android:launchMode="singleTop" в манифесте, и вы пытаетесь прочитать дополнительные сведения в методе onCreate().
Если это ваш случай, будет создан только 1 экземпляр этого класса, поэтому, если действие находится в фоновом режиме, когда пользователь касается уведомления в трее, вызывается метод onNewIntent(). В этом методе вы можете получить дополнительные функции и поместить их в общее намерение следующим образом:
@Override
public void onNewIntent(Intent intent){
super.onNewIntent(intent);
setIntent(intent);
}
а затем onResume() вы можете получить доступ к дополнительным функциям с помощью getIntent().getExtras() .
Удачного кодирования!
Вы получите все данные в виде пакета в своей активности запуска, когда ваше приложение находится в фоновом режиме. Чтобы получить эти значения, обязательно переопределите 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);
}
}
}