Уведомления не отображаются, когда приложение находится на переднем плане и вызывается onMessageReceived - PullRequest
0 голосов
/ 08 февраля 2019

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

Вот код

public void onMessageReceived(RemoteMessage remoteMessage) {
        Log.d(GlobalVar.TAG, "From: " + remoteMessage.getFrom());
        super.onMessageReceived(remoteMessage);


        String channelId = getString(R.string.notification_channel_id);
        NotificationCompat.Builder builder = new  NotificationCompat.Builder(this, channelId)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle(remoteMessage.getNotification().getTitle())
                .setContentText(remoteMessage.getNotification().getBody()).setAutoCancel(true);
        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        manager.notify(0, builder.build());

    }

Я знаю, что это вызывается, потому что я получаю журнал.Если приложение находится в фоновом режиме, то FCM отображает уведомления.Это код выше, который не отображается, когда приложение находится на переднем плане. Любые предложения?

PS: я создал канал в классе приложения

Я не получаю ошибки в журнале cat,Я также устанавливаю все настройки уведомлений в соответствии с кодом ниже.Обратите внимание, что мое устройство получает и отображает уведомления уже от FCM, когда оно находится в фоновом режиме.Но когда он находится на переднем плане и «Я» управляет отображением уведомления, тогда это не работает

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Если вы не используете свой собственный сервер, вы не сможете этого добиться.Вам нужно использовать свой собственный сервер, чтобы изменить формат JSON из этого:

{
 "to" : "YOUR_FCM_TOKEN_WILL_BE_HERE",
 "collapse_key" : "type_a",
 "notification" : {
     "body" : "Body of Your Notification in Data",
     "title": "Title of Your Notification in Title",
     "key_1" : "Value for key_1",
     "key_2" : "Value for key_2"
 }
}

на:

{
 "to" : "YOUR_FCM_TOKEN_WILL_BE_HERE",
 "collapse_key" : "type_a",
 "data" : {
     "body" : "Body of Your Notification in Data",
     "title": "Title of Your Notification in Title",
     "key_1" : "Value for key_1",
     "key_2" : "Value for key_2"
 }
}

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

0 голосов
/ 08 февраля 2019

Надеюсь, ваш сервер отправляет вам уведомление в ключе data.

Здесь, как я увидел ваш код, вы получаете данные уведомления, используя remoteMessage.getNotification()

Теперь вам нужно внести изменения в ваш серверный скрипт, который они отправляют в ключе data, как указано ниже ( Вы можете проверить временное состояние перед изменением кода сервера ) :

{
 "to" : "YOUR_FCM_TOKEN_WILL_BE_HERE",
 "collapse_key" : "type_a",
 "data" : {
     "body" : "Body of Your Notification in Data",
     "title": "Title of Your Notification in Title",
     "key_1" : "Value for key_1",
     "key_2" : "Value for key_2"
 }
}

и после этого вы можете получить вот так:

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);

    Log.d(TAG, "From: " + remoteMessage.getFrom());

    // Check if message contains a data payload.
    if (remoteMessage.getData().size() > 0) {
        Log.d(TAG, "Message data payload: " + remoteMessage.getData());
    }
}

Чтобы узнать больше об этом:

enter image description here

Надеюсь на васполучит помощь в этом.Дайте мне знать, если у вас возникнут проблемы.

...