通知为什么要渠道
安卓 8.0 以后,发通知必须先建"渠道"。渠道把通知分类:聊天、推送、营销各自一个通道,用户可以单独开关。没有渠道,通知发不出去。
先建渠道,再发通知。
这篇从建渠道到发一条可点击的通知走一遍。
通知是用户对你 App 的第一印象:太频繁被关掉,太少又被忘掉。正确做法是按场景分渠道,聊天消息设高优先级带声音,营销推送设低优先级静默,用户可以在设置里分别调。一个 App 最好别全塞进一个默认渠道,否则一被关掉,所有提醒都没了。
建一个通知渠道
val ch = NotificationChannel("msg", "消息", NotificationManager.IMPORTANCE_HIGH)
manager.createNotificationChannel(ch)
- channelId渠道唯一标识。
- IMPORTANCE决定打扰程度。
- createNotificationChannel注册渠道。
渠道一旦建好就不能改它的重要级别,改了也不会生效,所以新建时想清楚再建。名字和描述要写给用户看,他们会在系统设置里看到。
从 Android 13 起还要在运行时请求通知权限,用户允许了才能真正弹出来。
发一条通知
val n = NotificationCompat.Builder(this, "msg")
.setSmallIcon(R.drawable.ic_msg)
.setContentTitle("新消息")
.setContentText("你有一条新私信")
.build()
manager.notify(1, n)
第一个参数是通知 id,相同 id 的通知会互相覆盖。想在通知栏叠着多条,就给每条不同的 id。发完通知可以设自动消失时间,也可以加个进度条显示下载或同步进度。
点击通知跳转
用 PendingIntent 包装一个启动页,挂到通知上,点通知就打开对应页面。
PendingIntent 分三种:getActivity 开 Activity、getBroadcast 发广播、getForegroundService 起服务。点通知跳详情页用 getActivity。记得给 PendingIntent 传唯一的 requestCode 和 Intent 里的 extra,否则多个通知可能跳同一个页面。通知里的 action 按钮也是挂一个 PendingIntent,点一下直接触发对应动作。
权限与用户设置
安卓 13 起要请求 POST_NOTIFICATIONS 权限。用户可在设置里关渠道,代码里给个引导入口。
实战:消息提醒
收到底层推送后,建消息渠道、发通知、点通知跳到聊天页。整条提醒链路就通了。
小结
安卓通知三步:建渠道、Builder 组装、notify 发出。记得请求权限、用 PendingIntent 绑跳转。