简体   繁体   English

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

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

I have implemented custom view for firebase push notification.我已经为 firebase 推送通知实现了自定义视图。 For custom view we need to remove "notification" key from push Json so that it can be handled even when app is closed like below:对于自定义视图,我们需要从 push Json 中删除“通知”键,以便即使在应用程序关闭时也可以处理它,如下所示:

{  
  "data": {
    "detail": {
     }
  },
  "to": "" 
}

For creating custom notification I used below code:为了创建自定义通知,我使用了以下代码:

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;
    }

I have added channel.setShowBadge(true);我添加了channel.setShowBadge(true); after reading the official notification badge documentation here as well as other answers on stackoverflow like this and this .在阅读了 此处的官方通知徽章文档以及像这样这样的stackoverflow 上的其他答案之后。

I have also tried uninstalling the app and restarting the device but the badge is not showing.我也试过卸载应用程序并重新启动设备,但没有显示徽章。 Device is running on API 28(Pie).设备在 API 28(Pie) 上运行。

You can set the style of the Android notification badge like this:您可以像这样设置 Android 通知徽章的样式:

.setStyle(new NotificationCompat.DecoratedCustomViewStyle())

The overall code can look like this:整体代码如下所示:

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

You can set style by adding below line您可以通过添加以下行来设置样式

.setStyle(new NotificationCompat.DecoratedCustomViewStyle())

add this code添加此代码

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

You need to specify the title or text (setContentTitle or setContentText).您需要指定标题或文本(setContentTitle 或 setContentText)。 Because android SDK uses it to describe notification in the window which appears when you long-click to the app icon.因为android SDK使用它来描述当您长按应用程序图标时出现的窗口中的通知。 I don't know why this is not specified in the documentation, but it works this way.我不知道为什么文档中没有指定这一点,但它是这样工作的。

Lon-click notification window长按通知窗口

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

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