EDIT3: Хорошо, я обнаружил проблему: если приложение убито, отправка data
и notification
не вызовет onMessageReceived
. notification
необходимо установить значение null, если целевым устройством является Android.
Это действительно глупое поведение.
Исходное сообщение:
Я могу успешно получить пакет из намерения, переданного notificationBuilder
, в действие при запуске приложения.
Однако, если я убью приложение, уведомление все равно будет работать, но GetExtras()
из намерения будет нулевым.
В моем дочернем классе FirebaseMessagingService
:
@Override
public void onMessageReceived(RemoteMessage remoteMessage)
{
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("key_1","value");
PendingIntent pendingIntent = PendingIntent.getActivity(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
//also tried with PendingIntent.FLAG_CANCEL_CURRENT
Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("title")
.setContentText("messageBody")
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notificationBuilder.build());
}
Когда приложение убито, firebaseMessagingService
не может даже записать файл. Он не падает, строится и показывает уведомление, но все, что делается с диском, не работает.
EDIT: я заменил содержимое метода onMessageReceived
следующим образом:
@Override
public void onMessageReceived(RemoteMessage remoteMessage)
{
// Do nothing
}
Когда приложение работает, ничего не происходит, как и ожидалось, но когда приложение закрывается, отображается уведомление с именем приложения в качестве заголовка и remoteMessage.getNotification().getBody()
в качестве текста содержимого.
Кажется, onMessageReceived
не уволен. Вместо этого вызывается другая магическая функция...
EDIT2: В соответствии с запросом, это то, что отправляется с сервера:
{
"data":
{
"form_id":"33882606580812",
"recipientUserId":10500
}
,
"to":"e0bU2jIVO9g:APA91bHsS-s3G1gQLcTFtRUC77pJUWcZvD7h9NfUgFLD-bFam1S0dddngVcmrQlXR5i6DfTsc69T8JbIrSuzyF1iv0c4ac1gmkwvGVMwZo_yA4KwOh82Nx-weYeL79r79si4qH3QBEgs",
"notification":
{
"body":"you have a new notification",
"badge":"1",
"sound":"default"
},
"delay_while_idle":false
}
// Check if message contains a data payload. if (remoteMessage.getData().size() > 0) { Log.d(TAG, "Message data payload: " + remoteMessage.getData()); //and your other code i.e intents and all }
- person Nishant Dubey   schedule 29.09.2016