Уведомление Firebase не работает должным образом, если приложение находится в фоновом режиме

У меня есть класс FirebaseMessagingService для Firebase:

public class FcmMessagingService extends FirebaseMessagingService {

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    String message = remoteMessage.getNotification().getBody();

    Map<String, String> params = remoteMessage.getData();

    Bitmap remote_picture = null;
    remote_picture = BitmapFactory.decodeResource(getApplicationContext().getResources(), R.drawable.logo);

    intent = new Intent(this, HomeDrawer.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent, PendingIntent.FLAG_ONE_SHOT);
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);
    notificationBuilder.setContentTitle("Notification Title");
    notificationBuilder.setContentText(message);
    notificationBuilder.setSmallIcon(R.drawable.ic_notif);
    notificationBuilder.setLargeIcon(remote_picture);
    notificationBuilder.setAutoCancel(true);
    notificationBuilder.setContentIntent(pendingIntent);
    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    Notification noti = new Notification();
    noti = notificationBuilder.build();
    //notificationBuilder.setVibrate(new long[] { 1000, 1000});
    //notificationBuilder.setSound(Settings.System.DEFAULT_NOTIFICATION_URI);
    noti.flags |= Notification.FLAG_ONLY_ALERT_ONCE;
    notificationManager.notify(0,noti);

    super.onMessageReceived(remoteMessage);
}

Если приложение находится в фоновом режиме (не активно открыто, но в фоновом режиме, не закрыто), уведомления smallIcon и LargeIcon не появляются, вместо них появляются стандартные для Android, также если я изменил

 intent = new Intent(this, HomeDrawer.class);

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

Что я делаю не так? SmallIcon и LargeIcon не работают должным образом, если фон. Однако сообщение уведомления отображается нормально, а также remoteMessage.getData(); получает данные правильно, все дело в поведении иконок и классе намерений.

Заранее спасибо.


person MahmoudTarek    schedule 25.09.2016    source источник
comment
См. stackoverflow.com/questions/37809885/   -  person Frank van Puffelen    schedule 26.09.2016
comment
см. stackoverflow.com/a/44800598/7329597, он доступен. Вы можете найти решение и надеемся, что получите ответ.   -  person Sejal Baraiya    schedule 28.06.2017


Ответы (1)


Это происходит потому, что уведомления обрабатываются по-разному, если ваше приложение находится в фоновом режиме.

Если приложение работает на переднем плане, то ваше FcmMessagingService будет выполнено, и вы будете обрабатывать уведомления самостоятельно.

Если приложение не запущено, уведомления обрабатываются самой системой Android. FcmMessagingService никогда не выполняется. В этом случае вам необходимо правильно настроить иконку на сервере!

Я считаю, что такое поведение происходит с момента введения механизма doze.

Уведомление, отправленное с сервера, должно выглядеть примерно так

"notification" : {
  "body" : "great match!",
  "title" : "Portugal vs. Denmark",
  "icon" : "myicon", // the name of the resource
  "sound" : "mySound"
}
person Adam Fręśko    schedule 25.09.2016
comment
Понятно, как настроить иконку на сервере? Также для проблемы с классом намерений, как я могу с этим справиться? - person MahmoudTarek; 25.09.2016
comment
@MahmoudTarek эти классы должны быть действиями и должны быть зарегистрированы в файле манифеста. - person Adam Fręśko; 25.09.2016
comment
Обновлен ответ, чтобы иметь шаблон уведомления Пожалуйста, примите ответ. - person Adam Fręśko; 25.09.2016
comment
Спасибо, атрибут значка работает, но только для маленького значка, как я могу заставить работать большой значок с самого объекта? - person MahmoudTarek; 25.09.2016
comment
Кажется, нет поддержки банкомата с крупным значком. Подробнее см. здесь github.com/firebase/quickstart-android/issues/84 Пожалуйста, примите ответ - person Adam Fręśko; 25.09.2016
comment
Спасибо за вашу помощь. - person MahmoudTarek; 25.09.2016