我在FCM(Firestore云消息传递)中有这种奇怪的行为。
我正在谈论的奇怪行为是,当我向手机发送通知并且该应用当前处于打开状态时,我会收到正确样式的好消息(有封面图片)
当我发送相同的通知并且我的应用程序在后台运行时,我没有得到正确的样式(没有封面图片)
这可能是什么问题? (Android开发确实让我很难受)
这是我的代码,用于处理FCM中即将收到的通知
public class MyFirebaseInstanceService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody(), remoteMessage.getData());
}
private void showNotification(String title, String body, Map<String, String> data) {
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
String NOTIFICATION_CHANNEL_ID = "com.my.app.alarm";
// Build cover url
String coverURL = "";
if (data.containsKey("cover")) {
coverURL = "https://localhost" + data.get("cover") + ".jpg";
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "Notification", NotificationManager.IMPORTANCE_DEFAULT);
notificationChannel.setDescription("Reminder Channel");
notificationChannel.enableLights(true);
notificationChannel.setLightColor(Color.BLUE);
notificationManager.createNotificationChannel(notificationChannel);
}
// TO open New added Games fragment
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.putExtra("FragmentFromNotification", "NewAddedReleases");
PendingIntent notificationIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_ONE_SHOT);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);
notificationBuilder.setAutoCancel(true)
.setSmallIcon(R.mipmap.ic_launcher)
.setDefaults(Notification.DEFAULT_ALL)
.setWhen(System.currentTimeMillis())
.setContentTitle(title)
.setContentText(body)
.setContentIntent(notificationIntent)
.setContentInfo("Info");
// Load new game cover here
if (!coverURL.isEmpty()) {
Bitmap bmp = null;
try {
bmp = Picasso.with(getApplicationContext()).load(coverURL).get();
NotificationCompat.BigPictureStyle bps = new NotificationCompat.BigPictureStyle().bigPicture(bmp);
notificationBuilder.setStyle(bps);
} catch (IOException e) {
e.printStackTrace();
}
}
notificationManager.notify(new Random().nextInt(), notificationBuilder.build());
}
@Override
public void onNewToken(String s) {
super.onNewToken(s);
}
}
答案 0 :(得分:0)
onMessageReceived
,但以下情况除外:
当您的应用位于background
中时发送的通知消息。在这种情况下,通知将传递到设备的系统托盘。用户点击通知会默认打开应用启动器。
在background
中收到的同时具有通知和数据有效负载的消息。在这种情况下,通知将传递到设备的系统托盘,数据有效载荷将在启动器活动的意图范围内传递。
简而言之,当您的应用处于后台通知状态时,将由system tray
处理。
在application
标签内添加以下行以设置自定义默认图标和自定义颜色:
设置自定义默认图标。未为传入设置图标时使用 通知消息。
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/ic_stat_ic_notification" />
设置用于传入通知消息的颜色。在以下情况下使用 没有为传入的通知消息设置颜色。
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/colorAccent" />