Уведомления Firebase при закрытии приложения

я реализовал уведомление Firebase в своем приложении для Android. Когда мое приложение запущено, уведомление отображается с моим пользовательским макетом, но когда приложение не запущено, уведомление отображается с макетом по умолчанию. Как изменить макет уведомления на мой макет, когда приложение не запущено. Кроме того, я храню общие настройки, чтобы пользователь мог переключать уведомления. Но когда приложение не работает, уведомление отображается в любом случае. Как можно достичь это?

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    if(SettingsFragment.getReceiceNotification()){ //if user wants to receive notification

    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    RemoteViews remoteViews = new RemoteViews(getPackageName(),R.layout.push_notification_layout);

    remoteViews.setImageViewResource(R.id.push_notif_icon,R.mipmap.ic_bird_black);

    Intent intent = new Intent(this,MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_ONE_SHOT);


    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);
    notificationBuilder.setContent(remoteViews);
    notificationBuilder.setContentTitle("Radyo Türkkuşu");
    notificationBuilder.setContentText(remoteMessage.getNotification().getBody());

    notificationBuilder.setAutoCancel(true);
    notificationBuilder.setSmallIcon(R.mipmap.ic_launcher);
    notificationBuilder.setContentIntent(pendingIntent);
    remoteViews.setTextViewText(R.id.push_title, "Radyo Türkkuşu");
    remoteViews.setTextViewText(R.id.push_context, remoteMessage.getNotification().getBody());
    //notificationBuilder.setLights (ContextCompat.getColor(MainActivity.context, R.color.pushColor), 5000, 5000);
    notificationManager.notify(0,notificationBuilder.build());
    }

}

3 ответов


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

посмотреть этот ссылке

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

если вы используете {data:"something"}(data-message) с {notification:"something"}(display-message) в то время как ваше приложение находится в фоновом режиме данных будет доставлен статистам намерения, но не onMessageReceived() метод.Я предполагаю, что вы реализуете свой код для показа уведомлений, когда приложение находится на переднем плане onMessageReceived() является триггером, и он отображает уведомление о желании, которое вы хотите, но когда это не onMessageReceived() нет получить триггер вместо android система будет обрабатывать его с полезной нагрузкой уведомления. Вы просто удалить {notification:"something"}(display-message/notification tray) С вашего кода на стороне сервера, чтобы всегда обеспечивать onMessageReceived().

для тех, кто держит упоминание onMessageReceived() всегда срабатывает независимо от того, что это не передний план или фон, пожалуйста, посетите это ссылке


существует два типа сообщений FCM

  1. уведомления
  2. информационное сообщение

сообщения, которые отправляются с консоли Firebase, являются уведомления. Чтобы получить сообщение в onMessageReceived () используйте Информационное Сообщение. Используйте код ниже на стороне сервера для отправки сообщения уведомления данных

{
   "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
   "data" : {
     "Nick" : "Mario",
     "body" : "great match!",
     "Room" : "PortugalVSDenmark"
   },
 }

ссылка https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages


ваш код не будет срабатывать, когда ваше приложение закрыто или работает в фоновом режиме. Смотри: Firebase Уведомление

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