Notification
时,我必须指定要发送到的NotificationChannel
。
如果我使用旧方法(不设置任何频道),例如NotificationCompat.Builder(this)
,则Notification
将不会显示。
同样适用于此NotificationCompat.Builder(this, "invalid")
或NotificationCompat.Builder(this, "")
的无效渠道。
当我通过 Firebase云消息传递发送通知并且我的应用程序在后台没有指定通知渠道时,它将是中的通知杂项“频道。
当我尝试在上面提到的前景中做同样的事情时,这将无效,也不会创建名称为“Miscellaneous”和id “{package} .MISCELLANEOUS”的通知频道然后通过它发送。当我这样做时会发生以下情况:
如何在没有 FCM 这样的频道的情况下发送通知,那么它是否会出现在常规“其他”频道中?
正如我上面提到的,它发生在 FCM通知中,但是 Gmail 也会使用其他渠道。 那我该如何使用呢?
我相信如果它通常无法使用,他们会删除杂项频道。
为什么此代码未向“其他”通知渠道发送通知,实际上并未发送任何通知(仅在Android O上,代码适用于较低的Android版本)。
(getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager).notify(1, NotificationCompat.Builder(this, NotificationChannel.DEFAULT_CHANNEL_ID)
.setSmallIcon(R.drawable.small_icon)
.setContentTitle(URLDecoder.decode("Title", "UTF-8"))
.setContentText(URLDecoder.decode("Text", "UTF-8"))
.setColor(ContextCompat.getColor(applicationContext, R.color.color))
.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
.setContentIntent(PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT))
.build())
答案 0 :(得分:8)
该频道的ID为fcm_fallback_notification_channel
。 firebase-messaging库在内部创建它。
答案 1 :(得分:2)
正如在之前的评论中所述,Android系统创建的默认频道的ID为fcm_fallback_notification_channel
,但要小心,因为系统不会创建频道,直到它必须管理第一次推送通知。因此,如果您管理FirebaseMessagingService
课程扩展中的所有通知,则可能会发生该频道不存在而且您遇到如下错误:
android.app.RemoteServiceException: Bad notification for startForeground: java.lang.RuntimeException: invalid channel for service notification: Notification(channel=fcm_fallback_notification_channel pri=-2 contentView=null vibrate=null sound=null defaults=0x0 flags=0x40 color=0x00000000 vis=PRIVATE)
我的建议是在创建通知之前检查默认频道是否存在,如果不存在则创建默认频道:
private void createDefaultNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationManager notificationManager = getSystemService(NotificationManager.class);
if (notificationManager.getNotificationChannel("fcm_fallback_notification_channel") != null) {
return;
}
String channelName = getString(R.string.fcm_fallback_notification_channel_label);
NotificationChannel channel = new NotificationChannel("fcm_fallback_notification_channel", channelName, NotificationManager.IMPORTANCE_HIGH);
notificationManager.createNotificationChannel(channel);
}