0

Я новичок с уведомлениями, поэтому, пожалуйста, не будьте строги ...Намерение от уведомления является недействительным

Я получаю сообщение от ТСМ, и сделать уведомление:

int requestID = (int) System.currentTimeMillis(); 

Intent intent = new Intent(this, MainActivity.class); 
intent.putExtra(ConstantsUtil.Firebase.TOPIC_UPDATE, ConstantsUtil.Firebase.TOPIC_UPDATE); 
intent.setAction(ConstantsUtil.Firebase.TOPIC_UPDATE); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
     Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
PendingIntent pendingIntent = PendingIntent.getActivity(this, requestID, intent, 
     PendingIntent.FLAG_ONE_SHOT); 

Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
     .setSmallIcon(R.mipmap.ic_launcher) 
     .setContentTitle(title) 
     .setContentText(messageBody) 
     .setAutoCancel(false) 
     .setSound(defaultSoundUri) 
     .setContentIntent(pendingIntent); 

NotificationManager notificationManager = 
     (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

notificationManager.notify(requestID, notificationBuilder.build()); 

Если приложение работает когда устройство получает уведомление - оно отлично работает, открывают новую активность, и я могу получитьExtras и getAction.

Но если приложение закрыто и получено уведомление, а затем пользователь нажимает на него - чем открытие нового действия, но намерение.getExtraString равно null, то же самое с getAction.

Как я могу получитьAction и getExtras из уведомления Намерение, когда приложение закрыто?

+0

Как вы отправляете уведомление? –

+0

делает это метр? с системой сообщений firebase –

+0

Да, это имеет значение, тип отправленного сообщения (уведомление или сообщение данных) может быть определен методом отправки. Например: если вы отправляете с консоли Firebase, сообщение всегда будет уведомляющим сообщением, которое может потребовать, чтобы сообщение обрабатывалось определенными способами. –

ответ

0

С Firebase вы не можете настроить уведомление, когда приложение закрыто. Поэтому вы не можете настроить намерение этого уведомления. Возможно, со следующей версией Firebase они добавят эту функцию.

+1

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

0

Я предполагаю, что вы отправляете уведомления с консоли Firebase или из API REST FCM.

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

Когда приложение находится на переднем плане, вы получите обратный вызов onMessageReceived, и вы можете создать собственное уведомление, как вы делаете в своем вопросе, там вы добавляете дополнительные функции в намерение уведомления. Это объясняет, почему, когда ваше приложение находится на переднем плане, у уведомления есть дополнительные функции, но когда вы находитесь в фоновом режиме, уведомление не содержит дополнительных функций.

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

@Stan Malcolm, вы не единственный человек, смущенный этим, и мы обновляем документацию, чтобы сделать это более понятным.

+0

Спасибо за ваш ответ! , но мой пример ядро ​​находится внутри onMessageReceived ... так что теперь я запутался еще больше ... –

+0

onMessageReceived не вызывается для всех сообщений. –

+0

Привет, Я тоже сталкиваюсь с той же проблемой. Уведомляющее сообщение имеет две полезной нагрузки, 1) уведомление и 2) данные. , и я отправляю данные, которые мне нужно добавить в дополнение к полезной нагрузке данных. Так что согласно ответу, он должен работать. Но когда я получаю getExtras(), он дает мне null. Я также пытался использовать метод getExtra(), но результат тот же. –

Смежные вопросы