繁体   English   中英

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

[英]Android notification badge dot not showing for custom firebase push notification

我已经为 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;
    }

我添加了channel.setShowBadge(true); 在阅读了 此处的官方通知徽章文档以及像这样这样的stackoverflow 上的其他答案之后。

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

您可以像这样设置 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);

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

.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);

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

长按通知窗口

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM