当前位置: 首页 > news >正文

HarmonyOS掌上记账APP开发实践第48篇:notificationManager 通知管理:从本地通知到预算超支提醒

048 — notificationManager 通知管理:从本地通知到预算超支提醒

简介

通知是应用与用户保持联系的重要方式。在 MoneyTrack 中,通知系统承载着两个关键场景:一是用户设置的每日记账提醒(通过 reminderAgent,见 044 篇),二是预算超支的主动告警。当用户某个月的支出超过预设预算时,通过notificationManager发布系统通知,告知用户超支详情。结合通知渠道(Notification Channel)的划分和提醒设置页的开关控制,用户可以对通知进行精细化管控。

核心知识点

1. NotificationRequest 构建

系统通知通过NotificationRequest对象描述,以下是其核心属性:

属性类型说明
contentNotificationContent通知内容主体(标题、正文、附加文本等)
notificationIdnumber通知唯一标识,用于更新/取消指定通知
slotTypeSlotType通知渠道类型(决定重要等级和提醒方式)
wantAgentWantAgent点击通知后的跳转行为
deliveryTimenumber通知下发时间(毫秒时间戳)
groupNamestring通知分组名称,用于折叠展示
badgeNumbernumber角标数字,显示在应用图标上

2. notificationManager 完整 API

notificationManager提供了通知的完整生命周期管理:

  • 发布通知notificationManager.publish(request)发布一条通知,需要传入 NotificationRequest。
  • 取消通知notificationManager.cancel(notificationId)取消指定 ID 的通知。
  • 取消所有notificationManager.cancelAll()取消当前应用的所有通知。
  • 订阅通知notificationManager.subscribe(subscriber, info)订阅系统通知事件,可监听通知的发布、删除等操作。
  • 取消订阅notificationManager.unsubscribe(subscriber)取消通知订阅。

3. 通知渠道管理

鸿蒙通知系统要求所有通知归属于某个渠道(Slot),渠道定义了通知的语义类别和系统行为。用户可以在系统设置中为每个渠道独立开启/关闭通知,实现精细化控制。

渠道类型说明重要等级
SOCIAL_COMMUNICATION0社交通信类高(响铃+振动)
SERVICE_INFORMATION1服务信息类中(振动)
CONTENT_INFORMATION2内容资讯类低(静音)
LIVE_VIEW3实况通知类高(响铃+振动)
CUSTOMER_SERVICE4客服消息类中(振动)

4. 通知点击跳转

通过设置NotificationRequestwantAgent,用户点击通知时可以跳转到应用内的指定页面。wantAgent支持携带自定义参数,实现精准的页面路由。

5. 通知的完整生命周期

点击通知

滑动清除

系统设置

应用发布通知

系统通知服务

用户是否开启该渠道

系统栏展示通知

静默丢弃

用户操作

通过 wantAgent 跳转
到目标页面

通知消失

进入通知渠道设置页

触发取消回调

解析参数
执行页面路由

项目代码案例

预算超支提醒

import{notificationManager}from'@kit.NotificationKit';import{wantAgent}from'@kit.AbilityKit';exportclassBudgetNotifier{// 发布预算超支通知staticasyncpublishOverBudgetAlert(budget:number,spent:number){constwantAgentObj=awaitwantAgent.getWantAgent({wants:[{bundleName:'com.moneytrack',abilityName:'BillListAbility',parameters:{filter:'current_month',fromNotification:true}}],operationType:wantAgent.OperationType.START_ABILITY});constrequest:notificationManager.NotificationRequest={content:{contentType:notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,text:`本月已支出 ¥${spent},已超预算 ¥${budget}`,title:'预算超支提醒',additionalText:'点击查看本月账单详情'},notificationId:1001,slotType:notificationManager.SlotType.SERVICE_INFORMATION,wantAgent:wantAgentObj,deliveryTime:Date.now(),badgeNumber:1};awaitnotificationManager.publish(request);}// 取消预算超支通知staticasynccancelOverBudgetAlert(){awaitnotificationManager.cancel(1001);}// 订阅通知事件(如统计通知点击率)staticsubscribeNotificationEvents(){constsubscriber={onConsume:(data)=>{console.info(`通知被消费:${JSON.stringify(data.request.content)}`);},onCancel:(data)=>{console.info(`通知被取消:${data.request.notificationId}`);}};notificationManager.subscribe(subscriber);returnsubscriber;// 保留引用以便后续取消订阅}}

提醒设置页控制通知开关

@Componentstruct NotificationSettings{@StorageProp('budgetAlertEnabled')budgetAlertEnabled:boolean=true;build(){Column(){Toggle({type:ToggleType.Switch,isOn:this.budgetAlertEnabled}).onChange((isOn)=>{AppStorage.set('budgetAlertEnabled',isOn);if(!isOn){BudgetNotifier.cancelOverBudgetAlert();}})}}}

通知渠道管理

用户可以通过系统设置 > 应用 > MoneyTrack > 通知管理,对每个通知渠道独立进行开关控制:

  • 服务信息(SERVICE_INFORMATION):管控预算超支等应用服务通知。
  • 社交通信(SOCIAL_COMMUNICATION):管控好友互动等社交类通知。
  • 内容资讯(CONTENT_INFORMATION):管控推荐内容等资讯通知。

开发者需要通过notificationManager.addSlot()在应用启动时注册渠道,用户此后即可在系统设置中操作。

// 应用启动时注册通知渠道asyncfunctioninitNotificationChannels(){awaitnotificationManager.addSlot(notificationManager.SlotType.SERVICE_INFORMATION);awaitnotificationManager.addSlot(notificationManager.SlotType.SOCIAL_COMMUNICATION);}

最佳实践

  1. 合理选择 SlotType:根据通知的紧急程度选择对应的渠道类型,避免过量使用高优先级渠道导致用户关闭所有通知。
  2. 使用唯一 notificationId:为同一类型的通知分配固定 ID,便于后续更新和取消;不同类型的通知使用不同 ID 防止相互覆盖。
  3. 携带 wantAgent 跳转参数:在通知中附带路由参数,用户点击后直接到达目标页面,减少用户的导航层级。
  4. 结合设置开关:在应用内提供通知开关,与系统渠道设置配合,给予用户多重控制能力。
  5. 及时取消无效通知:当触发条件不再满足时(如预算已调整),及时取消对应的通知,避免用户看到过时信息。
  6. 监听通知状态:通过subscribe监听通知的发布和取消事件,用于统计通知触达率和用户行为分析。

提醒设置页提供开关控制用户是否接收预算超支通知,通过约束AppStorage中的配置变量来控制是否调用publishOverBudgetAlert,实现了通知的可控性和灵活性。

推荐参考文档

  • 通知管理指南
  • @kit.NotificationKit API 参考
  • WantAgent API 参考
http://www.cnnetsun.cn/news/3556502.html

相关文章:

  • UnblockNeteaseMusic完整指南:一键解锁网易云灰色歌曲的终极解决方案
  • python3从入门到精通(十三): tempfile模块
  • 高级爵士舞《Take My Hand》模块化学习与工程化训练指南
  • 护脊床垫选购指南:科学支撑脊椎健康
  • 终极Windows Defender移除指南:深度解析完全卸载Windows安全组件的专业方案
  • Unlock Music Electron:打破音乐枷锁,让加密音频重获自由
  • NomNom存档编辑器终极指南:解锁《无人深空》无限可能
  • 3步合并B站缓存视频:Android离线观看完整解决方案
  • JumpServer开源堡垒机:4A安全体系与分布式架构解析
  • AI销售工具中,客户阶段划分的原则应该怎么设定?
  • 最大熵原理:贝叶斯推理的认知地基与约束工程
  • 深入解析McBSP接收配置:帧同步、数据延迟与压扩技术实战
  • # 软考软件设计师题目总结 2026-07-21 05:58
  • WaveTools终极指南:如何用开源工具一键解锁鸣潮120帧并深度分析抽卡数据
  • 如何让小爱音箱变身智能音乐中心:XiaoMusic完整指南
  • 3分钟上手!Video-subtitle-extractor:本地化视频硬字幕提取终极指南
  • 威廉·欧奈尔这套七个字母的选股法,我在A股测了一遍(附源代码)
  • 古诗词知识图谱与智能分析系统开发实践
  • 错题补题解1
  • 电脑中病毒后的应急响应:从排查到预防的全链路安全实践
  • C++ IO流实战:从基础到高效文件读写与格式化输出
  • Spring Boot 3与Vue 3企业级博客后台实战:从零构建全栈项目
  • 安卓端到端测试_android-e2e-testing
  • 算一笔账要跑4个部门:年度TOP客户采购占比,本体语义怎么算出来
  • 如何快速美化Mac微信界面:5大主题模式终极个性化指南
  • 响应式编程与Kafka结合实现高并发消息处理
  • 哔咔漫画下载器终极指南:5个简单步骤打造个人离线漫画图书馆
  • Vue+SpringBoot健身房管理系统实战:前后端分离项目从零搭建到部署
  • 中美AI发展路径差异与本土化创新思考
  • S7-1200以太网通信配置与优化实战指南