Логотип уведомления не отображается, когда приложение не запущено (FCM)

Итак, я реализовал FCM для уведомлений. Таким образом, мы также можем отправить некоторые данные вместе с уведомлением, используя Firebase Cloud Messaging. Здесь я создал канал и зарегистрировал устройство в "общей" теме.

Вот мой код:

пакет com.femindharamshi.fcmtrial;

import android.app.NotificationManager;
import android.content.Context;
import android.content.SharedPreferences;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationManagerCompat;
import android.util.Log;

import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;

import java.util.Map;

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
        Map m = remoteMessage.getData();
        showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody(), m);

        Class me = remoteMessage.getClass();
        Log.d("MessageDateRecieved", ""+me.toString());

    }

    public void showNotification(String title, String message, Map m) {

        NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "MyNotifications")
                .setContentTitle(title)
                .setSmallIcon(R.drawable.small_logo)
                .setAutoCancel(true)
                .setContentText(message);

        NotificationManagerCompat manager = NotificationManagerCompat.from(this);
        manager.notify(999, builder.build());

    }
}

Теперь у меня есть следующие 2 проблемы:

  1. Когда приложение не запущено/не убито, логотип уведомления (R.drawable.small_logo), находящийся в моей папке res/drawable, не отображается, вместо этого отображается серый кружок. Как мне решить эту проблему.
  2. Если я передам данные через это сообщение, я смогу зафиксировать их на карте. Теперь изображение приложения не запущено, и я хочу сохранить эти данные в SharedPreferences, тогда как это возможно?

person Femin Dharamshi    schedule 23.05.2019    source источник
comment
Серый значок отображается из-за формы вашего значка. Попробуйте использовать значок другой формы, и он будет работать. А что касается сохранения данных при нажатии на уведомление, значения, которые были отправлены с ним, будут переданы вашей активности запуска как намерение, и вы можете извлечь их, используя getextra   -  person Rahulrr2602    schedule 23.05.2019
comment
Ваша служба не вызывается, если приложение не запущено, поэтому вы не можете создать собственное уведомление.   -  person Rahulrr2602    schedule 23.05.2019


Ответы (1)


Значок, отображаемый для уведомления, когда ваше приложение не запущено, может быть только монохромным, поэтому значок с прозрачностью следует использовать, так как форма и цвет для него могут быть предоставлены отдельно. Похоже, эти строки внутри тега application в AndroidManifest.xml.

    <meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@drawable/icon_notification_shape" />
    <meta-data
        android:name="com.google.firebase.messaging.default_notification_color"
        android:resource="@color/color_notification" />
person AlexanderShirshov    schedule 23.05.2019
comment
Потрясающий! таким образом, я могу получать уведомления с моим логотипом, даже когда приложение не запущено? и цвет, который я предоставляю, может быть любым? - person Femin Dharamshi; 26.05.2019
comment
Да, вы получите собственный монохромный логотип для уведомлений, когда ваше приложение не запущено. Он будет использовать цвет по умолчанию в строке состояния, но когда вы развернете логотип уведомлений, он будет окрашен так, как вы указали. - person AlexanderShirshov; 27.05.2019