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 发送通知。

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

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

相关推荐
遇到困难睡大觉哈哈10 小时前
HarmonyOS —— Remote Communication Kit 拦截器(Interceptor)高阶定制能力笔记
笔记·华为·harmonyos
遇到困难睡大觉哈哈11 小时前
HarmonyOS —— Remote Communication Kit 定制处理行为(ProcessingConfiguration)速记笔记
笔记·华为·harmonyos
氤氲息11 小时前
鸿蒙 ArkTs 的WebView如何与JS交互
javascript·交互·harmonyos
遇到困难睡大觉哈哈11 小时前
HarmonyOS支付接入证书准备与生成指南
华为·harmonyos
赵浩生11 小时前
鸿蒙技术干货10:鸿蒙图形渲染基础,Canvas绘图与自定义组件实战
harmonyos
赵浩生12 小时前
鸿蒙技术干货9:deviceInfo 设备信息获取与位置提醒 APP 整合
harmonyos
BlackWolfSky12 小时前
鸿蒙暂未归类知识记录
华为·harmonyos
L、21814 小时前
Flutter 与开源鸿蒙(OpenHarmony):跨平台开发的新未来
flutter·华为·开源·harmonyos
L、21815 小时前
Flutter 与 OpenHarmony 深度融合实践:打造跨生态高性能应用(进阶篇)
javascript·flutter·华为·智能手机·harmonyos