Firebase 通知消息未显示在托盘图标上?

Posted

技术标签:

【中文标题】Firebase 通知消息未显示在托盘图标上?【英文标题】:Firebase notification message is not displayed on tray icon? 【发布时间】:2017-07-26 06:45:17 【问题描述】:

我正在使用 this example 将 Firebase 云消息传递与我的应用程序集成。 通过 Firebase 控制台发送消息,目标是 user segmenttopic(主题是 news)都有效。我的应用程序将显示一个包含该消息的 toast。

我想要的是通知消息,它会自动显示在 android 通知托盘中,而不是 toast。阅读FCM concept后,我用curl尝试了这个:

curl -H "Content-type: application/json" -H "Authorization:key=AAAA....ahjkdkhajksd"  -X POST -d ' "to": "/topics/news", "notification":  "body":"foo", "title":"bar", "icon":""' https://fcm.googleapis.com/fcm/send

它通过Toast 显示,而不是Android 通知托盘。这里可能出了什么问题?

【问题讨论】:

发布您的 onMessageReceived 方法,如果您的应用已打开,通知将传递给它,否则直接显示在通知托盘中。 好的。请看看我的MyFirebaseMessagingService.java 和NotificationUtil.java 您的代码进入“if (remoteMessage.getNotification() != null)”条件并显示数据? 在调试时,我发现:07-27 14:42:12.652 21985-22283/studio.emcorp.monitoringsiswa E/MyFirebaseMessagingService: From: /topics/news07-27 14:42:12.652 21985-22283/studio.emcorp.monitoringsiswa E/MyFirebaseMessagingService: Notification Body: foo 是的,已到达该块,我收到了带有 Toast 的消息 那么问题出在哪里?如果您能够在 toast 中显示数据,则改为在通知中显示相同的数据。 【参考方案1】:

如果您的应用在前台,通知不会自动显示到通知栏。如果您希望即使您的应用在前台也能显示通知,您需要添加以下代码。

MyFirebaseMessagingService.java

public class MyFirebaseMessagingService extends FirebaseMessagingService 

@Override
public void onMessageReceived(RemoteMessage remoteMessage) 
    JSONObject object = new JSONObject(remoteMessage.getData());
    try 
        String title = object.getString("title");
        String message = object.getString("message");

        Intent intent = new Intent(getBaseContext(), MainActivity.class);
        PendingIntent contentIntent = PendingIntent.getActivity(getBaseContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        NotificationCompat.Builder b = new NotificationCompat.Builder(getBaseContext());

        b.setAutoCancel(true)
                .setDefaults(Notification.DEFAULT_ALL)
                .setWhen(System.currentTimeMillis())
                .setSmallIcon(R.drawable.ic_launcher)
                .setTicker("Ticker")
                .setContentTitle(title)
                .setContentText(message)
                .setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_SOUND)
                .setContentIntent(contentIntent)
                .setContentInfo("Info");

        Random r = new Random();
        int randomNo = r.nextInt(100000000 + 1);

        NotificationManager notificationManager = (NotificationManager) getBaseContext().getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(randomNo, b.build());
     catch (JSONException e) 
        e.printStackTrace();
    
    super.onMessageReceived(remoteMessage);


【讨论】:

我试过这个。不过,通知托盘上没有显示新通知。

以上是关于Firebase 通知消息未显示在托盘图标上?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 应用程序的 FCM 通知未显示在 iOS 系统托盘中

Flutter Firebase:抬头通知未在后台显示

当应用程序从多任务托盘停止时,Android 应用程序未收到 Firebase 通知

新的 Firebase 通知替换现有的未读 Firebase 通知

Winforms 通知图标在系统托盘中重复

android firebase reg id recived但通知未显示在手机显示屏中