Firebase通知白色圆圈问题

时间:2016-06-24 07:15:09

标签: java android firebase firebase-cloud-messaging

我遇到了Firebase Notification的问题,如果我在屏幕上运行应用时发送通知,则通知显示如下:

enter image description here

enter image description here

如果我在应用程序在后台运行时发送通知,则通知显示如下:

enter image description here

enter image description here

这是我的FirebaseMessagingService班级

    public class AppFirebaseMessagingService extends FirebaseMessagingService {

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        sendNotification(remoteMessage);
    }

    private void sendNotification(RemoteMessage remoteMessage) {
        Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        int icon = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? R.drawable.ic_video_label_white_24dp: R.drawable.ic_launcher;
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);
        notificationBuilder.setWhen(System.currentTimeMillis());
        notificationBuilder.setColor(ContextCompat.getColor(this, R.color.colorPrimary));
        notificationBuilder.setSmallIcon(icon);
        notificationBuilder.setContentTitle(remoteMessage.getNotification().getTitle());
        notificationBuilder.setContentText(remoteMessage.getNotification().getBody());
        notificationBuilder.setAutoCancel(true);
        notificationBuilder.setSound(defaultSoundUri);
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            Intent resultIntent = new Intent(this, MainActivity.class);
            TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
            stackBuilder.addParentStack(MainActivity.class);
            stackBuilder.addNextIntent(resultIntent);
            PendingIntent pendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);
            notificationBuilder.setContentIntent(pendingIntent);
            notificationBuilder.setPriority(Notification.PRIORITY_HIGH);
        }

        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0, notificationBuilder.build());
    }
}

为什么会这样?

2 个答案:

答案 0 :(得分:4)

这是Firebase中尚未解决的错误。点击此处:https://stackoverflow.com/a/37332514/1507602

另一种方法是不使用Firebase控制台发送通知,而是使用POST API,这样您的通知就会直接发送到onMessageReceived(),您可以在其中创建自己的通知。

要发送数据有效负载消息,您必须发出卷曲请求:

HTTP POST请求

https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

{ "data": {
    "score": "5x1",
    "time": "15:10"
  },
  "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."
}

您可以从firebase控制台获取服务器密钥(AIzaSyZ-1u ... 0GBYzPu7Udno5aA):您的项目 - >设置 - >项目设置 - >云消息传递 - >服务器密钥

答案 1 :(得分:3)

原因,为什么会发生这种情况是Firebase Notifications的工作方式,以及不同的行为,当应用程序处于前台时和后台时不同:

  1. 前景 - 这里是兼容性,有了这个,过去的事情和GCM - 你完全控制,你的AppFirebaseMessagingService代码被执行
  2. 背景 - 在这种情况下,系统/库负责显示消息,并用于此app的主图标。如果您在数据节点中有任何数据,则会将其作为意图传递到您应用的主要活动(在用户按下通知后)
  3. 由于这个原因 - 我决定在我的应用程序中不使用它:      我无法控制它      2.使用app的默认图标(在我的情况下也看起来像你的 - 圆形      3.我无法使用此功能(在我的情况下,我还显示了图像+添加操作,以及Firebase通知 - 我     当app在后台时,无法做到这一点