通知渠道和群体似乎很简单。
直观地说,我希望为每个通知类别创建一个频道,然后为每个用户创建组。最后,所有通知都应根据其唯一的通道组配对进行捆绑。
然而,情况似乎并非如此;通知只能按组分隔,并且通道似乎没有效果。
目前我在应用程序生命周期中创建了所有内容:
const val NOTIF_CHANNEL_GENERAL = "general"
const val NOTIF_CHANNEL_MESSAGES = "messages"
fun setupNotificationChannels(c: Context) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) return
val manager = c.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val appName = c.string(R.string.frost_name)
val msg = c.string(R.string.messages)
manager.createNotificationChannel(NOTIF_CHANNEL_GENERAL, appName)
manager.createNotificationChannel(NOTIF_CHANNEL_MESSAGES, "$appName: $msg")
manager.deleteNotificationChannel(BuildConfig.APPLICATION_ID)
val cookies = loadFbCookiesSync()
val idMap = cookies.map { it.id.toString() to it.name }.toMap()
manager.notificationChannelGroups
.filter { !idMap.contains(it.id) }
.forEach { manager.deleteNotificationChannelGroup(it.id) }
val groups = idMap.map { (id, name) ->
NotificationChannelGroup(id, name)
}
manager.createNotificationChannelGroups(groups)
L.d { "Created notification channels: ${manager.notificationChannels.size} channels, ${manager.notificationChannelGroups.size} groups" }
}
@RequiresApi(Build.VERSION_CODES.O)
private fun NotificationManager.createNotificationChannel(id: String, name: String): NotificationChannel {
val channel = NotificationChannel("${BuildConfig.APPLICATION_ID}_$id",
name, NotificationManager.IMPORTANCE_DEFAULT)
channel.enableLights(true)
channel.lightColor = Prefs.accentColor
channel.lockscreenVisibility = Notification.VISIBILITY_PUBLIC
createNotificationChannel(channel)
return channel
}
从我的日志中,它确实显示创建了2个频道和2个组。 对于任何通知,我将为其分配一个唯一的标记ID对,然后指定一个频道和一个与我要提交的频道相对应的组。然后,我添加摘要通知以匹配相同的组 - 通道对。但是,我最终只有2个通知分组,其中每个组都有来自两个渠道的通知。
我注意到的一个问题是群组频道列表是空的,这很可能是问题所在。但是,我能看到绑定的唯一方法是在通道中调用setGroup
。每个频道只能是一个组的一部分,但频道组的说明提到:
* For example, if your application supports multiple accounts, and those accounts will
* have similar channels, you can create a group for each account with account specific
* labels instead of appending account information to each channel's label.
该文档使得通道可以成为多个(或每个)组的一部分,几乎每个实现它的文章都会使它看起来如此。
我们如何将频道与频道组相关联? 我们是否应该为每个群体建立一个新频道或重新使用它们? 如果我们应该重用它们,我们如何或何时设置通道组?