自学HarmonyOS API 13记录:实现推送服务

简介: 老板突然要求我为新上线的App开发实时推送通知功能,使用HarmonyOS最新的API 13。尽管这是我首次接触HarmonyOS 13,我还是决定迎难而上。通过研究华为开发者官网的文档,我了解了PushCommon和PushService模块,并逐步实现了环境准备、推送注册、消息接收、自定义推送行为和资源清理等功能。最终,我成功开发了一个简单的推送通知Demo,不仅满足了需求,还深入掌握了HarmonyOS推送服务的架构。这次经历让我深刻体会到HarmonyOS API 13在推送服务上的改进,也感受到了现代服务架构的灵活性和高效性。希望这篇文章能帮助到更多学习HarmonyOS的开发者。

马上年底了,我刚进公司坐下,还没来得及喝一口咖啡,老板就发来一个任务:“我们新上线的App需要一个实时推送通知功能,你来负责开发吧!用HarmonyOS最新的API 13实现,顺便学一下新的推送服务架构。”

当时我有点发懵,因为推送我之前用过,但是HarmonyOS 13的我孩是第一次接触。心里想着:“能不能给点时间让我熟悉一下?”可转念一想,这是个很好的机会,可以深入学习HarmonyOS最新特性。于是,我一边默默祈祷文档能清晰易懂,一边开始了这段探索之旅。


初步研究:了解Push服务

根据老板的需求,我打开了华为开发者官网,找到了PushCommonPushService的文档。大致了解了这两个模块:

  • PushCommon提供了基本的推送消息数据结构和管理方法。
  • PushService负责实际的推送服务实现,包括消息订阅、接收和分发。

API 13增强了对推送消息处理的灵活性,提供了异步消息回调机制,更适合现代应用的高并发场景。


我的开发历程

1. 环境准备

首先,我根据文档,确保开发环境已经配置好。HarmonyOS的ArkTS框架是基础,我使用的IDE是DevEco Studio。

# 安装必要依赖
npm install @ohos/pushservice

image.gif

然后,在项目中引入推送服务模块:

import pushService from '@ohos.push.pushservice';

image.gif

2. 实现推送注册

要实现推送,第一步就是注册设备获取推送令牌。这个令牌是服务端用来标识设备的。

代码实现:

// 初始化推送服务
pushService.getPushToken({
    success: (data) => {
        console.info(`Push Token: ${data.token}`);
    },
    fail: (err) => {
        console.error(`Failed to get push token: ${JSON.stringify(err)}`);
    }
});

image.gif

这段代码会异步返回一个推送令牌,我在控制台验证了令牌的生成。

我的思考:

文档中提到的异步回调是非常重要的设计。推送服务的注册需要网络连接,异步可以避免阻塞UI线程,同时提高用户体验。

3. 实现消息接收

推送服务的核心是消息接收。当服务端发送消息到设备时,App需要能够捕获并显示消息。

代码实现:

pushService.on('receiveMessage', (message) => {
    console.info(`Received message: ${JSON.stringify(message)}`);
    // 自定义逻辑处理消息
    if (message.type === 'notification') {
        showNotification(message);
    }
});
function showNotification(message: any) {
    console.info(`Notification Title: ${message.title}`);
    console.info(`Notification Content: ${message.content}`);
}

image.gif

我的思考:

我发现消息接收是基于事件回调的模式,这种设计让我联想到Node.js的事件监听机制,非常简洁灵活。

4. 自定义推送行为

在开发过程中,老板要求我们自定义推送的行为,比如分类存储消息或根据不同类型消息触发不同操作。

代码实现:

pushService.on('receiveMessage', (message) => {
    switch (message.category) {
        case 'alert':
            handleAlert(message);
            break;
        case 'update':
            handleUpdate(message);
            break;
        default:
            console.warn(`Unhandled message category: ${message.category}`);
    }
});
function handleAlert(message: any) {
    console.info(`Alert: ${message.content}`);
}
function handleUpdate(message: any) {
    console.info(`Update Info: ${message.content}`);
}

image.gif

通过分类处理,我们实现了对不同消息类型的精准控制。

5. 清理资源

推送服务占用资源,当用户注销或退出应用时,需要释放相关资源以提高系统性能。

代码实现:

pushService.unsubscribe({
    success: () => {
        console.info('Successfully unsubscribed from push service.');
    },
    fail: (err) => {
        console.error(`Failed to unsubscribe: ${JSON.stringify(err)}`);
    }
});

image.gif

我的总结:

及时释放资源不仅是良好的开发习惯,也是提升系统性能的重要手段。


最终成果:实时推送Demo

经过一天的开发和测试,我成功实现了一个简单的推送通知功能,并根据不同消息类型展示不同的处理逻辑。效果如下:

  1. 收到“警报”消息时,显示警告通知。
  2. 收到“更新”消息时,触发更新逻辑。

推送服务Demo不仅满足了老板的要求,还让我对HarmonyOS推送服务的架构有了更深的理解。

结语:开发感悟

通过这次任务,我深刻体会到HarmonyOS API 13在推送服务上的改进。文档虽然详细,但真正开发时仍需要多试、多思考。

推送服务的异步回调、分类管理和资源清理让我感受到现代服务架构的灵活性和高效性。未来,我计划进一步研究如何优化推送服务性能,并探索更多HarmonyOS的高级特性。

希望这篇文章能帮助到和我一样学习HarmonyOS的开发者们!

目录
相关文章
|
7月前
|
IDE 开发工具 数据安全/隐私保护
鸿蒙开发:应用上架第三篇,配置签名信息打出上架包
可以说,所有的签名信息文件,我们都已经完成了,正所谓,万事俱备只欠东风,这篇文章,我们着重概述一下,如何配置签名信息以及如何打出签名包。
279 4
鸿蒙开发:应用上架第三篇,配置签名信息打出上架包
|
9月前
|
API 开发者
HarmonyOS 之 @Require 装饰器自学指南
在 HarmonyOS 应用开发中,组件初始化传参校验是常见难题。本文深入探讨了 `@Require` 装饰器的使用方法,它能在编译阶段严格校验组件构造传参,提升代码健壮性与开发效率。文章涵盖装饰器定义、版本支持、限制条件及典型使用场景(如父子组件传参校验和 `@ComponentV2` 初始化),并通过错误示例分析常见问题。总结中强调了 `@Require` 的重要性,助力开发者编写更稳定高效的代码。适合鸿蒙开发者学习参考!
242 28
HarmonyOS 之 @Require 装饰器自学指南
|
9月前
|
数据管理 API 开发者
HarmonyOS:ArkTS RowSplit 组件自学指南
在 ArkTS 开发中,复杂界面布局需求常见,尤其需要灵活调整子组件宽度时,传统方式难以满足动态交互需求。`RowSplit` 组件解决了这一问题,支持横向布局并插入可拖动的分割线,让用户轻松调整子组件宽度,提升体验。本文详细介绍了 `RowSplit` 的功能、接口、属性及使用示例,帮助开发者掌握其用法,并总结了注意事项。通过合理配置,可实现灵活美观的布局效果。希望对您有帮助,欢迎关注、点赞和收藏!
187 31
|
9月前
|
容器
鸿蒙开发:信息标记组件
使用信息标记组件Badge,不需要我们在关注位置问题,我们通过position属性进行控制即可,而且针对信息的显示和隐藏,也不用过多的条件判断,可以说是非常的简单。
154 9
鸿蒙开发:信息标记组件
|
9月前
|
API 开发者 UED
HarmonyOS:ArkTS 多态样式自学指南
本文介绍了 ArkTS 多态样式功能,帮助开发者为组件设置不同状态(如点击、按下、禁用等)下的样式。从 API Version 8 开始支持,API Version 11 引入 `attributeModifier` 动态设置属性。核心接口 `stateStyles` 支持多种状态,如 `normal`、`pressed`、`disabled` 等。文章通过示例代码展示了如何为 `Text` 和 `Radio` 组件设置多态样式,结合状态控制实现动态视觉反馈。掌握此功能可提升用户体验,推荐开发者根据需求灵活运用。
324 27
|
9月前
|
索引
鸿蒙开发:了解应用级配置信息
在实际的开发中,如果有共用的资源,建议大家都放到AppScope目录下,对于一些应用级别的信息,比如应用的名字,还有应用的图标,虽然说在Moulde下也可以配置,但是为了更方便的管理,这里比较推荐以AppScope目录下的app.json5为主,当然了,只是推荐,实际当中,两者都可以实现,大家选择其中一种方式即可。
218 12
鸿蒙开发:了解应用级配置信息
|
9月前
|
API 开发者
HarmonyOS:ArkTS Path 组件自学指南
在鸿蒙应用开发中,绘制复杂图形常面临传统布局方式难以满足需求的问题。ArkTS 的 Path 组件提供了解决方案,如同一把“神奇画笔”,支持通过灵活的命令和属性绘制直线、曲线、椭圆弧等多样图形。本文详细介绍了 Path 组件从 API Version 7 起的功能特性,包括 `commands`、`fill`、`stroke` 等核心属性,以及各类绘图命令如 `M`(移动)、`L`(直线)、`C`(贝塞尔曲线)等。结合示例代码,展示了如何绘制简单直线到复杂曲线图形,并拓展了颜色、透明度和线条样式的自定义方法。掌握 Path 组件,可为应用带来更丰富生动的视觉体验,助力开发者实现创意绘图需求。
318 21
|
9月前
|
API 开发者
HarmonyOS:@AnimatableExtend 装饰器自学指南
本文详细介绍了 `@AnimatableExtend` 装饰器的使用方法与应用场景,帮助开发者实现复杂动画效果。从 API Version 10 开始支持的该装饰器,可通过自定义动画属性对不同类型数据进行处理。文章通过改变 Text 组件宽度和实现折线动画两个示例,展示了装饰器的强大功能。同时解析了 `AnimatableArithmetic<T>` 接口的加减乘除及相等判断规则,为非 number 类型数据动画提供解决方案。总结中强调了装饰器的灵活性,鼓励开发者在项目中实践,提升应用动画体验。
188 15
|
9月前
|
API 开发者 UED
HarmonyOS:ComposeTitleBar 组件自学指南
本文详解了鸿蒙开发中 ComposeTitleBar 组件的使用方法与技巧,从基础导入到属性配置,再到实际代码示例,帮助开发者构建美观实用的标题栏。组件自 API Version 10 起支持,具备独立功能结构,核心属性包括 `title`(必填)、`subtitle`(可选)和 `menuItems`(右侧菜单列表)。文章通过具体示例展示了如何配置标题、副标题及菜单项,并提供了交互优化、样式定制与多设备适配的建议。掌握这些内容,可显著提升应用界面体验。如果你有所收获,别忘了点赞收藏!
224 8
|
9月前
|
编解码 搜索推荐 API
鸿蒙栅格布局组件 GridRow 自学指南
在鸿蒙应用开发中,布局设计常因设备分辨率差异而面临挑战。传统固定布局可能导致组件挤压或显示错乱,而 GridRow 组件提供了灵活解决方案。它从 API Version 9 起支持栅格布局,搭配 GridCol 子组件实现强大适配能力。本文详解 GridRow 的参数、属性与事件,如 `columns`、`gutter`、`breakpoints` 等,并通过实战示例展示其应用。掌握 GridRow,助你轻松应对多尺寸设备布局需求,打造精美界面。
352 7

热门文章

最新文章