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

发布时间:2026/7/21 9:42:27
HarmonyOS掌上记账APP开发实践第48篇:notificationManager 通知管理:从本地通知到预算超支提醒 048 — notificationManager 通知管理从本地通知到预算超支提醒简介通知是应用与用户保持联系的重要方式。在 MoneyTrack 中通知系统承载着两个关键场景一是用户设置的每日记账提醒通过 reminderAgent见 044 篇二是预算超支的主动告警。当用户某个月的支出超过预设预算时通过notificationManager发布系统通知告知用户超支详情。结合通知渠道Notification Channel的划分和提醒设置页的开关控制用户可以对通知进行精细化管控。核心知识点1. NotificationRequest 构建系统通知通过NotificationRequest对象描述以下是其核心属性属性类型说明contentNotificationContent通知内容主体标题、正文、附加文本等notificationIdnumber通知唯一标识用于更新/取消指定通知slotTypeSlotType通知渠道类型决定重要等级和提醒方式wantAgentWantAgent点击通知后的跳转行为deliveryTimenumber通知下发时间毫秒时间戳groupNamestring通知分组名称用于折叠展示badgeNumbernumber角标数字显示在应用图标上2. notificationManager 完整 APInotificationManager提供了通知的完整生命周期管理发布通知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. 通知点击跳转通过设置NotificationRequest的wantAgent用户点击通知时可以跳转到应用内的指定页面。wantAgent支持携带自定义参数实现精准的页面路由。5. 通知的完整生命周期是否点击通知滑动清除系统设置应用发布通知系统通知服务用户是否开启该渠道系统栏展示通知静默丢弃用户操作通过 wantAgent 跳转到目标页面通知消失进入通知渠道设置页触发取消回调解析参数执行页面路由项目代码案例预算超支提醒import{notificationManager}fromkit.NotificationKit;import{wantAgent}fromkit.AbilityKit;exportclassBudgetNotifier{// 发布预算超支通知staticasyncpublishOverBudgetAlert(budget:number,spent:number){constwantAgentObjawaitwantAgent.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:booleantrue;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);}最佳实践合理选择 SlotType根据通知的紧急程度选择对应的渠道类型避免过量使用高优先级渠道导致用户关闭所有通知。使用唯一 notificationId为同一类型的通知分配固定 ID便于后续更新和取消不同类型的通知使用不同 ID 防止相互覆盖。携带 wantAgent 跳转参数在通知中附带路由参数用户点击后直接到达目标页面减少用户的导航层级。结合设置开关在应用内提供通知开关与系统渠道设置配合给予用户多重控制能力。及时取消无效通知当触发条件不再满足时如预算已调整及时取消对应的通知避免用户看到过时信息。监听通知状态通过subscribe监听通知的发布和取消事件用于统计通知触达率和用户行为分析。提醒设置页提供开关控制用户是否接收预算超支通知通过约束AppStorage中的配置变量来控制是否调用publishOverBudgetAlert实现了通知的可控性和灵活性。推荐参考文档通知管理指南kit.NotificationKit API 参考WantAgent API 参考