Firebase 通知消息未显示在托盘图标上?
Posted
技术标签:
【中文标题】Firebase 通知消息未显示在托盘图标上?【英文标题】:Firebase notification message is not displayed on tray icon? 【发布时间】:2017-07-26 06:45:17 【问题描述】:我正在使用 this example 将 Firebase 云消息传递与我的应用程序集成。 通过 Firebase 控制台发送消息,目标是 user segment 和 topic(主题是 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/news
07-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 系统托盘中
当应用程序从多任务托盘停止时,Android 应用程序未收到 Firebase 通知