HarmonyOS 推送通知开发实战:从权限申请到多场景应用的完整指南

摘要

在日常应用开发中,通知功能几乎是必不可少的。不管是聊天消息、系统提醒,还是任务进度更新,都需要通过通知来触达用户。对于开发者来说,如何在鸿蒙(HarmonyOS)应用中实现推送通知,是一个绕不开的问题。本文将带你从基础配置到实战代码,再到实际场景应用,完整地走一遍流程。

引言

目前的移动应用几乎都离不开通知:微信的消息提醒、支付宝的到账提醒、外卖平台的派送提醒......这些都是通知系统在背后支撑的。

在鸿蒙系统里,通知的实现主要依赖 通知服务(Notification Service)。它既支持本地通知(应用自己发出,比如闹钟提醒),也支持远程推送(服务端通过 Push 下发,比如系统更新提醒)。

接下来,我们会先走一遍最基础的流程:申请权限、构建通知、发送通知。之后再通过实际场景来看看通知功能是怎么用到真实应用里的。

鸿蒙通知开发全流程

申请权限

要想在鸿蒙里发送通知,必须先申请权限。在 module.json5 里声明:

json 复制代码
{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.NOTIFICATION_CONTROLLER"
      }
    ]
  }
}

这一行配置就相当于告诉系统:"我的应用需要发通知"。如果你忘记写,应用运行时是没有权限发通知的。

构建通知并发送

通知分两部分:一个是 通知渠道(NotificationSlot) ,另一个是 通知内容(NotificationRequest)

下面是一个最基础的 ArkTS 示例:

ts 复制代码
import notificationManager from '@ohos.notificationManager';

async function sendNotification() {
  // 1. 创建通知渠道(通常在应用启动时配置一次)
  let slot: notificationManager.NotificationSlot = {
    type: notificationManager.SlotType.SOCIAL_COMMUNICATION,
    id: "default_slot",
    name: "消息通知"
  };
  await notificationManager.addSlot(slot);

  // 2. 构建通知内容
  let notificationRequest: notificationManager.NotificationRequest = {
    id: 1,
    slotId: "default_slot",
    content: {
      contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC,
      normal: {
        title: "鸿蒙推送通知",
        text: "这是一条测试通知"
      }
    }
  };

  // 3. 发送通知
  await notificationManager.publish(notificationRequest);
}

如果你把这段代码放到按钮点击事件里,就能直接在真机上跑起来,通知会显示在系统通知栏。

三个典型应用场景

本地提醒(比如闹钟/待办事项)

有时候应用需要在特定时间提醒用户,比如闹钟响起、待办任务到期。这时候就可以结合定时器和本地通知。

ts 复制代码
import common from '@ohos.app.ability.common';

function scheduleLocalNotification() {
  let context = getContext(this) as common.UIAbilityContext;

  setTimeout(async () => {
    await sendNotification(); // 调用前面写的 sendNotification()
  }, 5000); // 5 秒后触发
}

这样,当用户设置了一个待办提醒,你就可以在指定的时间触发本地通知。

聊天消息(即时通讯场景)

在聊天类应用里,最常见的就是"新消息提醒"。通常服务端会通过 远程推送(Push Kit 或三方推送服务) 把消息推送到用户设备,客户端收到消息后,再通过通知栏提醒用户。

伪代码大概是这样的:

ts 复制代码
// 收到服务器下发的推送消息
async function onPushMessageReceived(message: any) {
  let notificationRequest: notificationManager.NotificationRequest = {
    id: Date.now(), // 用时间戳避免重复
    slotId: "default_slot",
    content: {
      contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC,
      normal: {
        title: "新消息",
        text: message.text
      }
    }
  };
  await notificationManager.publish(notificationRequest);
}

这样就能在系统通知栏里展示聊天消息,用户点击后可以直接进入对应的聊天界面。

系统级提醒(比如更新/后台任务完成)

有些时候应用需要在后台提醒用户,比如"下载完成"、"系统更新"。这类通知一般不会频繁触发,但对用户体验很重要。

ts 复制代码
async function showUpdateNotification() {
  let notificationRequest: notificationManager.NotificationRequest = {
    id: 99,
    slotId: "default_slot",
    content: {
      contentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC,
      normal: {
        title: "系统更新",
        text: "新版本已下载完成,点击安装"
      }
    }
  };
  await notificationManager.publish(notificationRequest);
}

这里的关键是:即便应用退到后台,通知依然能触发,让用户不会错过重要消息。

QA 环节

Q1:通知和弹窗有什么区别?

通知是系统层面的,用户可以在通知栏集中查看,适合长期提醒;而弹窗(Dialog/Toast)通常是临时展示的,用户关掉就没了。

Q2:通知能否带动作?

可以。通知支持设置点击事件,用户点击后可以打开应用的特定页面(比如跳到聊天详情页)。

Q3:远程推送和本地通知有什么关系?

远程推送只是消息来源的一种,本地通知是最终展示的方式。一般流程是:服务端推送消息 → 客户端接收 → 调用本地通知 API 展示。

总结

在鸿蒙应用开发中,推送通知是一个很常见的功能点。它的实现流程其实并不复杂,分成三步就能搞定:

module.json5 里申请权限。

定义通知渠道和通知内容。

调用 notificationManager.publish 发送通知。

同时,不同的场景下,通知的使用方式也有所区别:闹钟提醒用定时+本地通知,聊天消息用远程推送+本地通知,系统更新用后台任务+本地通知。

只要你掌握了基础用法,就可以很容易扩展到各种业务场景中。

相关推荐
HarmonyOS_SDK4 小时前
打破场景边界,支付宝联合实况窗提供全新出行服务体验
harmonyos
安卓开发者4 小时前
鸿蒙NEXT应用数据持久化全面解析:从用户首选项到分布式数据库
数据库·分布式·harmonyos
森之鸟4 小时前
开发中使用——鸿蒙播放本地mp3文件
华为·harmonyos
前端世界5 小时前
HarmonyOS 数据处理性能优化:算法 + 异步 + 分布式实战
算法·性能优化·harmonyos
HarmonyOS小助手7 小时前
【案例+1】HarmonyOS官方模板优秀案例 第7期:金融理财 · 记账应用
harmonyos·鸿蒙·鸿蒙生态
爱笑的眼睛118 小时前
HarmonyOS 应用开发深入浅出:基于 Stage 模型与声明式 UI 的现代化状态管理实践
华为·harmonyos
爱笑的眼睛119 小时前
HarmonyOS 应用开发深度解析:掌握 ArkTS 声明式 UI 与现代化状态管理
华为·harmonyos
爱笑的眼睛119 小时前
HarmonyOS 应用开发深度解析:基于 ArkTS 的跨组件状态管理最佳实践
华为·harmonyos
前端世界9 小时前
鸿蒙系统下的智能设备故障检测实战:从监控到自愈的全流程实现
华为·harmonyos
2501_919749039 小时前
flutter鸿蒙:使用flutter_local_notifications实现本地通知
flutter·华为·harmonyos