自定义 Firebase 推送通知未显示 Android 通知徽章点

Posted

技术标签:

【中文标题】自定义 Firebase 推送通知未显示 Android 通知徽章点【英文标题】:Android notification badge dot not showing for custom firebase push notification 【发布时间】:2020-10-09 06:49:22 【问题描述】:

我已经为 firebase 推送通知实现了自定义视图。对于自定义视图,我们需要从 push Json 中删除“通知”键,以便即使在应用程序关闭时也可以处理它,如下所示:

  
  "data": 
    "detail": 
     
  ,
  "to": "" 

为了创建自定义通知,我使用了以下代码:

private void generateNotification(String title, String message, Intent intent) 
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        String channelId = getString(R.string.default_notification_channel_id);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, notificationCount, intent,
                PendingIntent.FLAG_CANCEL_CURRENT);

        /*
        * Custom notification layout
        * */
        String notificationHeaderText = getResources().getString(R.string.app_name) + " \u2022 "
                + DateUtils.formatDateTime(this, System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME);
        RemoteViews collapsedView = new RemoteViews(getPackageName(), R.layout.view_collapsed_notification);
        collapsedView.setTextViewText(R.id.timestamp, notificationHeaderText);
        collapsedView.setTextViewText(R.id.content_title, title);
        collapsedView.setTextViewText(R.id.content_text, message);

        RemoteViews expandedView = new RemoteViews(getPackageName(), R.layout.view_expanded_notification);
        expandedView.setTextViewText(R.id.timestamp, notificationHeaderText);
        expandedView.setTextViewText(R.id.content_title, title);
        expandedView.setTextViewText(R.id.notification_message, message);

        Uri soundUri = Uri.parse(ContentResolver.SCHEME_android_RESOURCE + "://"+ getApplicationContext().getPackageName() + "/" + R.raw.footer_click);
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, channelId)
                .setSmallIcon(R.drawable.ic_inkclick_logo_colored)
                .setSound(soundUri)
                .setGroup(GROUP_KEY_INKCLICK)
                .setAutoCancel(true)
                .setGroupSummary(true)
                .setCustomContentView(collapsedView)
                .setCustomBigContentView(expandedView)
                .setContentIntent(pendingIntent);
        notificationBuilder.setPriority(Notification.PRIORITY_HIGH);

        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        if (manager != null) 
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) 
                NotificationChannel channel = new NotificationChannel(channelId,
                        getResources().getString(R.string.default_notification_channel_id), NotificationManager.IMPORTANCE_HIGH);
                channel.enableLights(true);
                channel.setLightColor(Color.MAGENTA);
                channel.setVibrationPattern(new long[]0, 1000/*, 500, 1000*/);
                channel.enableVibration(true);
                channel.setShowBadge(true);
                AudioAttributes audioAttributes = new AudioAttributes.Builder()
                        .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                        .setUsage(AudioAttributes.USAGE_NOTIFICATION)
                        .build();
                channel.setSound(soundUri, audioAttributes);
                manager.createNotificationChannel(channel);
            
            manager.notify(0, notificationBuilder.build());
        
        else 
            manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            if (manager != null) 
                manager.notify(0, notificationBuilder.build());
            

        
        notificationCount += 1;
    

在阅读官方通知徽章文档here 以及*** 上的其他答案(如this 和this)后,我添加了channel.setShowBadge(true);

我也尝试卸载应用程序并重新启动设备,但未显示徽章。 设备在 API 28(Pie) 上运行。

【问题讨论】:

你有什么运气让它工作吗?我遇到了同样的问题。通知本身显示正常,但无论我尝试什么,通知点都不会出现。 @etrado 我还没有找到任何解决方案。仍在寻找答案。 【参考方案1】:

您需要指定标题或文本(setContentTitlesetContentText)。因为 Android SDK 使用它来描述当您长按应用程序图标时出现的窗口中的通知。我不知道为什么文档中没有指定,但它是这样工作的。

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。【参考方案2】:

您可以像这样设置 Android 通知徽章的样式:

.setStyle(new NotificationCompat.DecoratedCustomViewStyle())

整体代码可以是这样的:

  NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, channelId)
                .setSmallIcon(R.drawable.ic_inkclick_logo_colored)
                .setSound(soundUri)
                .setGroup(GROUP_KEY_INKCLICK)
                .setAutoCancel(true)
                .setGroupSummary(true)
                .setCustomContentView(collapsedView)
                .setCustomBigContentView(expandedView)
                .setStyle(new NotificationCompat.DecoratedCustomViewStyle())
                .setContentIntent(pendingIntent);
        notificationBuilder.setPriority(Notification.PRIORITY_HIGH);

【讨论】:

纯代码答案是低质量的答案。 哦,好吧......希望你能得到你的答案,如果没有,请告诉我......我会向你解释 我已编辑您的答案,使其更清晰。下次请注意,如果您要粘贴一些代码,请务必添加一些上下文。【参考方案3】:

您可以通过添加以下行来设置样式

.setStyle(new NotificationCompat.DecoratedCustomViewStyle())

添加此代码

NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, channelId)
                .setSmallIcon(R.drawable.ic_inkclick_logo_colored)
                .setSound(soundUri)
                .setGroup(GROUP_KEY_INKCLICK)
                .setAutoCancel(true)
                .setGroupSummary(true)
                .setStyle(new NotificationCompat.DecoratedCustomViewStyle()) 
                .setCustomContentView(collapsedView)
                .setCustomBigContentView(expandedView)
                .setContentIntent(pendingIntent);
        notificationBuilder.setPriority(Notification.PRIORITY_HIGH);

【讨论】:

以上是关于自定义 Firebase 推送通知未显示 Android 通知徽章点的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Firebase 消息传递 - 应用打开时未显示推送通知

iOS Firebase 推送通知未出现

Flutter Firebase前台推送通知未显示但后台正在运行

如何从 C# 发送 FireBase 自定义推送通知?

Angular 8,Firebase 推送通知:无法在推送通知上获取调试器或自定义逻辑

我们可以使用 Firebase 向独立用户发送自定义推送通知吗?