《HarmonyOSNext全链路通知开发指南:从基础通知到智能跳转的超详细实战》

举报
Turing_010 发表于 2025/06/14 13:30:26 2025/06/14
【摘要】 《HarmonyOSNext全链路通知开发指南:从基础通知到智能跳转的超详细实战》##Harmony OS Next ##Ark Ts ##教育本文适用于教育科普行业进行学习,有错误之处请指出我会修改。 🚀 1. 通知是个啥?为啥需要它?通知就是让用户在合适的时间用最舒服的方式收到有用信息的神器!举个栗子🌰:收到闺蜜消息💬立刻弹窗提示游戏版本更新🆕在通知栏温柔提醒文件下载进度📥实...

《HarmonyOSNext全链路通知开发指南:从基础通知到智能跳转的超详细实战》

##Harmony OS Next ##Ark Ts ##教育

本文适用于教育科普行业进行学习,有错误之处请指出我会修改。


🚀 1. 通知是个啥?为啥需要它?

通知就是让用户在合适的时间最舒服的方式收到有用信息的神器!举个栗子🌰:

  • 收到闺蜜消息💬立刻弹窗提示
  • 游戏版本更新🆕在通知栏温柔提醒
  • 文件下载进度📥实时显示在状态栏

💡 核心价值:帮用户高效处理任务,不错过任何重要信息!

⚡️ 三大使用场景

场景类型 典型案例 用户收益
即时通讯 微信消息/短信 秒回重要信息
应用推送 版本更新/促销广告 获取最新资讯
进程跟踪 文件下载/视频转码 实时掌握进度

🎨 2. 通知的百变造型

通知会根据场景自动切换皮肤哦~

📍 不同位置的颜值展示

graph LR
    A[状态栏] -->|显示为小图标| B(📱微信)
    C[通知栏] -->|展示详细信息| D(您有3条新消息)
    E[横幅通知] -->|浮动在屏幕顶部| F(⚠️ 系统警告!)

设计心法

  1. 重要通知用霸屏横幅(比如来电提醒)
  2. 普通通知进通知栏集合(比如软件更新)
  3. 长期进程放状态栏(比如音乐播放)

🧩 3. 通知的解剖图(文本通知为例)

graph TB
    1[① 通知小图标] --> 类型标识
    2[② 应用名称] --> 微信
    3[③ 时间戳] --> 系统自动生成
    4[④ 展开箭头] --> 折叠内容开关
    5[⑤ 内容标题] -->“今晚聚餐!”
    6[⑥ 内容详情] -->“海底捞7点见”

🚨 重点注意

  • 展开箭头只在有折叠内容时显示
  • 时间戳无需手动设置,系统自动生成

👩‍💻 4. 手把手创建通知

第一步:召唤通知模块

// 必须加载的核心装备!
import { notificationManager } from '@kit.NotificationKit';

📝 场景一:发个普通文本通知

@Entry 
@Component 
struct NotificationDemo { 
  publishNotification() { 
    // 配置通知参数
    let notificationRequest: notificationManager.NotificationRequest = { 
      id: 1,  // 通知身份证号(必须唯一!)
      content: { 
        notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, 
        normal: { 
          title: '今晚有暴雨⛈️',  // 标题要抓眼球!
          text: '记得收衣服啦~'   // 正文说人话
        } 
      } 
    } 
    
    // 发射通知!
    notificationManager.publish(notificationRequest).then(() => { 
      console.info('通知发射成功🎉'); 
    }).catch((err: Error) => { 
      console.error(`翻车啦!原因:${err}`); 
    }); 
  } 
 
  build() { 
    Column() { 
      Button('点我发通知🚀')
        .onClick(() => { this.publishNotification() }) 
    } 
    .width('100%') 
  } 
}

💡 实用小技巧

  • id相当于通知的身份证,重复使用会覆盖旧通知
  • 想让通知更醒目?试试长文本类型多行文本类型

📈 场景二:进度条通知(下载场景)

关键操作流程

graph TB
    A[检查系统支持] --> B{支持进度条?}
    B -->|Yes| C[创建模板]
    B -->|No| D[弹窗提示]
    C --> E[发布通知]

完整代码示例

// 先检测设备能力
notificationManager.isSupportTemplate('downloadTemplate').then(isSupport => {
  if (!isSupport) {
    // 优雅降级方案
    promptAction.showToast({ message: '设备不支持进度条😭' })
    return
  }
  
  // 配置进度条模板
  let template: notificationManager.NotificationTemplate = { 
    name: 'downloadTemplate',  // 必须用这个名称!
    data: { 
      progressValue: 75,       // 当前进度(0-100) 
      progressMaxValue: 100    // 总进度
    } 
  } 
  
  // 组装通知
  let notificationRequest: notificationManager.NotificationRequest = { 
    content: { 
      normal: { 
        title: '正在下载:猫猫表情包.zip', 
        text: '剩余5分钟',
        additionalText: '75%'  // 右上角百分比
      } 
    },
    template: template   // 注入进度条
  } 
  
  // 发射!
  notificationManager.publish(notificationRequest)
})

🔄 动态更新通知

只需相同ID+新内容就能刷新通知:

// 更新下载进度到90%
template.data.progressValue = 90
notificationRequest.content.normal.additionalText = "90%"

// 还是用同一个ID发布
notificationManager.publish(notificationRequest)  

🗑️ 删除通知的两种姿势

// 精准打击(按ID删除)
notificationManager.cancel(1)  

// 核弹打击(清空所有通知)
notificationManager.cancelAll()  

🔧 5. 通知的高级装备

🎛️ 通知通道设置(给通知分类)

// 创建社交类通知通道(带横幅+提示音)
notificationManager.addSlot(notificationManager.SlotType.SOCIAL_COMMUNICATION)

通道类型对比表

通道类型 状态栏图标 横幅提示 提示音 适用场景
SOCIAL_COMMUNICATION 微信/钉钉消息
SERVICE_INFORMATION 系统更新提示
CONTENT_INFORMATION 新闻资讯
OTHER_TYPES 后台静默通知

💡 省电流打法:非重要通知用CONTENT_INFORMATION省电又安静~


🧶 通知分组功能

把同类型通知打包处理:

// 聊天消息组
let chatRequest = {  
  id: 1001, 
  groupName: 'ChatGroup',  // 组名就是分类标识
  content: { title: '老王:在吗?' } 
};

// 商品促销组 
let productRequest = {  
  id: 2001,
  groupName: 'PromotionGroup', 
  content: { title: '奶茶买一送一!' } 
};

分组的好处:超过5条自动折叠,避免通知栏变垃圾场🗑️


🔗 6. 通知的智能跳转(WantAgent)

让通知变身超链接!点击通知可跳转页面或触发事件

🎯 场景一:点击跳转指定页面

import { wantAgent } from '@kit.AbilityKit';

// 配置跳转参数
const wantAgentInfo = { 
  wants: [{ 
    bundleName: "com.example.app", 
    abilityName: "MainAbility"  // 目标页面
  }],
  operationType: wantAgent.OperationType.START_ABILITY
}

// 绑定到通知
notificationRequest.wantAgent = await wantAgent.getWantAgent(wantAgentInfo)

📡 场景二:点击触发系统事件

// 配置公共事件
const eventConfig = {
  wants: [{ 
    action: 'LAUNCH_CAMERA',  // 自定义事件名
  }],
  operationType: wantAgent.OperationType.SEND_COMMON_EVENT
}

⚙️ 完整工作流

sequenceDiagram
    用户->>通知: 点击
    通知->>WantAgent: 触发指令
    WantAgent->>应用: 跳转页面
    应用->>系统: 执行事件

🧾 终极总结表

功能 核心API 使用场景 必做事项
发文本通知 publish() 消息提醒 设置唯一ID
进度条通知 downloadTemplate 下载/安装 检查设备支持
通知更新 同ID发布 进度更新 更新progressValue
通知分组 groupName 分类管理 组名保持一致
智能跳转 WantAgent 页面跳转 配置operationType

🚦 避坑指南

  1. 进度值超过100%会闪退💥
  2. 社交类通知必须设置SOCIAL_COMMUNICATION通道
  3. WantAgent需要在manifest.json声明权限

最后的小彩蛋🎉
试试在横幅通知里加emoji,用户点击率提升37%!(例如:您收到一个红包🎁)

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。