7

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

@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()); 
    } 

} 
+0

где ваш код? –

+0

Я прошу технической информации, не хочу внедрения – orkun

+0

Пожалуйста, проверьте мой ответ сэр. –

ответ

16

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

Смотреть это link

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

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

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

+0

Вы используете консоль firebase для отправки сообщения? –

+0

Да, я использую консоль. – orkun

+3

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

7

Есть два типа сообщений ТСМ

  1. Уведомление сообщение
  2. сообщение данных

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

{ 
    "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

0

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

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