当前位置: 首页 > 知识库问答 >
问题:

Firebase通知白圈问题[重复]

杜河
2023-03-14

我对Firebase通知有问题,如果我在应用程序在屏幕上运行时发送通知,通知会正确显示如下:

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

这是我的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个答案

贝洲
2023-03-14

发生这种情况的原因是Firebase通知的工作方式,以及应用程序在前台和后台时的不同行为:

  1. 前台-这里是兼容性,与此,过去和GCM-您完全控制并且执行来自AppFirebase MessagingService的代码
  2. 背景-在这种情况下,系统/库负责显示消息,并用于应用程序的这个主图标。如果您的数据节点中有任何数据,则将其作为意图传递给您的应用程序的主要活动(用户将按通知后)

因此,我决定在我的应用程序中不使用它作为:1。我无法控制它2。是应用程序的默认图标(在我的例子中,它看起来也像你的-四舍五入3。我不能用它做其他事情(在我的例子中,我还显示了图像添加操作,并且有Firebase通知-当应用程序在后台时,我不能这样做)

柳灿
2023-03-14

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

另一种选择是不使用Firebase控制台发送通知,而是使用POST API,这样您的通知将直接发送到onMessageReceived(),您可以在那里创建自己的通知。

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

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):您的项目-

 类似资料:
  • 我今天的通知图标有一个奇怪的问题。 我做了什么坏事吗? 这是我的图标图片(刚从这里下载https://material.io/icons/#ic_photo) : http://image.noelshack.com/fichiers/2016/44/1478185219-icon-notification.png 我错过什么了吗? 作为记录,我使用的是SDK 24,目前只创建了hdpi资源文件夹

  • 我正在使用Firebase通知作为我的应用程序的推送通知。一切正常,但应用程序未运行时通知图标会显示白色圆圈。我的目标是SDK版本23,我还使用Roman Nurik的通知图标生成器生成透明白色图标。 当应用程序处于前台并运行时,通知图标显示正确。img 但当应用程序处于后台或被删除时,图标会被替换为通用的白色圆圈。img公司 这是我的通知生成器方法:

  • 我们使用的是Firebase云消息。有时,当Android或iOS应用程序处于睡眠模式时,手机会收到相同(重复)的通知信息。对于设备标识,使用FIRInstanceID令牌。node.js上的一个外部服务器用于向Firebase服务发送通知。我们的服务器日志文件中没有出现重复的内容。

  • 我有一个web应用程序,它为每个用户保留一个用户ID和firebase通知令牌。用户和令牌在Android设备上创建并发送到服务器,因此服务器知道在哪里发送通知(因为令牌)。 这里的问题是,一个用户可以登录多个设备。如果用户在两台设备上,那么我应该向这两台设备发送通知。web应用程序知道一个用户ID有两个令牌。这没关系。 但是如果我在同一台设备上卸载并安装应用程序会怎么样呢。我为用户获得了一个新的

  • 我正在使用以下脚本向特定用户发送通知: 脚本工作正常,但我如何向安装我的应用程序的所有用户发送通知。我在我的应用程序中创建了一个主题(警报),我可以通过Firebase控制台向所有用户发送通知。有人可以指导我更新上面的主题脚本吗?

  • 我有一个奇怪的问题。我有两种方式在我的Android应用程序中发送通知;一种来自Android服务,另一种通过FCM。 场景如下: 无论应用程序是否正在运行,Android服务发送的通知图标都会正确显示 我在FCMService中的代码: