写点什么

【HarmonyOS】关于鸿蒙消息推送的心得体会(二)

作者:GeorgeGcs
  • 2025-06-25
    上海
  • 本文字数:2496 字

    阅读完需:约 8 分钟

##鸿蒙开发能力 ##HarmonyOS SDK 应用服务 ##鸿蒙金融类应用 (金融理财 #


前言

推送功能的开发与传统功能开发还是有很大区别。首先最大的区别点就在于需要多部门之间的协同,作为鸿蒙客户端开发,你需要和产品,运营,以及后台开发一起协作,这个事儿才能做好。


上一篇,【HarmonyOS】关于鸿蒙消息推送的心得体会 (一)之中,AGC 平台开通推送服务,配置推送设置项 ,这个任务在公司里主要是运营来负责。毕竟公司的华为 AGC 平台帐号,也不是开发人员可以随意使用。


但是目前推送集成的文档,不管是华为官方还是第三方推送 SDK 服务提供商,文档中的操作内容都是糅合在一起,华为官方最多只是对后台的 REST API 进行了小拆分。有些是开发需要操作,有些则是产品,运营需要去做,甚至推送发起后台要去处理的内容也在文档里。


综上所述,鸿蒙客户端开发人员就需要辛苦一些,把整个文档浏览过之后,再根据步骤实操,使用 demo 验证推送功能,再将正式集成推送时的工作内容进行划分,与其他部门一起完成配置项和处理项。


由此可见,应用开发人员其实需要一套授权可操作的测试应用帐号,来进行这种多部门沟通前的验证集成工作。否则你只能等待前置条件的完成,很浪费时间。


其实我是建议此种类型的文档根据角色来进行内容划分,这样操作起来大家也能各司其职。

推送功能的分工

作为已经踩过坑的鸿蒙应用开发人员,我将鸿蒙推送的角色分工梳理了下。


当然这仅供参考,主要根据你们公司的部门职责的实际情况来决定。如果你们公司产品不管事儿,和项目经理似的,活儿都是运营干,你也没有必要拿着我这篇文档 Diss 人家,实在是大动肝火啊好兄弟。


在我这里当然是有产品,运营,后台开发➕应用开发,UI 设计主要是推送通知的一些图标和交互,关联不大就不展开说了。如果你那没有对应的角色。那你就需要授权去操作了。切记不要自己吭吭哧哧一顿操作。


不出事儿还好,出事了人家就会问你,为什么擅自操作?你懂得。


废话不多说咯,下面就是工作内容角色拆解,仅供参考:



1.运营人员需要在华为 AGC 平台进行推送服务的开通,以及推送类型的处理。你要知道图上这些信息,Push Kit 将通知消息分类为服务与通讯、资讯营销两大类别。说人话环节,这个事儿其实就是华为官方根据推送的内容场景,进行了梳理分类,来严格控制消息的展示位置,推送数量和提醒方式。说白了就是一堆对应关系表,运营耐心阅读这些内容,根据自己应用的推送场景进行对号入座处理即可。详细内容请移步 Push Kit 下的(申请推送场景化消息权益)文档进行阅读。


2.产品人员需要参与的工作,主要是确认运营的场景分类,还有开发的通知交互,以及 UI 设计的事宜。


3.鸿蒙应用开发人员需要,通知开关需由用户授权允许,应用首次启动时需弹窗询问用户是否允许通知。因为应用的通知开关默认为关闭状态。你不去做申请授权,推送了你也不会展示。若返回的错误码为 1600004,即为拒绝授权。


有个点需要注意,如果用户曾经居然过授权,你就算再次调用该 API 也不会再显示授权模态弹框。所以根据这种错误类型需要自己新增提示,告知用户拒绝过授权,需要手动去设置界面,开启应用的通知开关。


import { notificationManager } from '@kit.NotificationKit';import { common } from '@kit.AbilityKit';    /**   * 请求打开通知   */  public requestEnableNotificationByUser(context: common.UIAbilityContext){    let requestEnableNotificationCallback = (err: BusinessError): void => {      if (err) {        console.error(`requestEnableNotification failed, code is ${err.code}, message is ${err.message}`);      } else {        console.info("requestEnableNotification success");      }    };    notificationManager.requestEnableNotification(context, requestEnableNotificationCallback);  }
复制代码



然后就是上篇文档一中提到,获取 Push Token 的操作。拿到之后你需要将 Token 发送给后台服务器,他那边做推送需要用。


最后就是处理通知点击的动作,如果业务需要你处理点击通知,跳转到你应用首页里做处理,你需要在:


import { UIAbility, Want } from '@kit.AbilityKit';import { hilog } from '@kit.PerformanceAnalysisKit';
export default class MainAbility extends UIAbility { onCreate(want: Want): void { // 获取消息中传递的data数据 const data = want.parameters; hilog.info(0x0000, 'testTag', 'Succeeded in getting message data'); // 根据实际业务场景对data进行处理 }}
复制代码


如果你的 ability 是单例(singleton)模式,需要在 onNewWant()方法再处理一次。当点击消息首次进入应用首页时,会在 onCreate()方法中获取消息 data 数据,当前应用进程存在时,点击新消息进入首页会在 onNewWant()方法中获取消息数据。当你的 ability 设置了 url 或者 action 就可以跳到应用内某个页面的处理了。


4.后台开发人员需要阅读 REST API 文档,对推送消息的结构体,消息回执,撤回,推送,实况窗,VoIP 等接口的开发。应用服务端调用 REST API 推送通知消息,通知消息示例如下:


// Request URLPOST https://push-api.cloud.huawei.com/v3/[projectId]/messages:send
// Request HeaderContent-Type: application/json// JWT格式字符串,可参见Authorization获取。Authorization: Bearer eyJr*****OiIx---****.eyJh*****iJodHR--***.QRod*****4Gp---****push-type: 0 // 0表示通知消息场景。
// Request Body{ "payload": { "notification": { "category": "MARKETING",// 资讯营销类型,一天2条 "title": "普通通知标题", "body": "普通通知内容", "profileId": "111***222", // 应用帐号和token进行绑定得到的唯一标识id "clickAction": { "actionType": 0 // 0表示点击消息打开应用首页。 } } }, "target": { "token": ["IQAAAA**********4Tw"] // 客户端发给服务器后台的用户推送token }}
复制代码


以上整个流程都完成,你的应用就可以实现推送功能了。当然这只是最基本的玩法,还有实况窗,VoIP 等玩法就不展开说了,感兴趣的可以去看官方 API 详细研究下。



用户头像

GeorgeGcs

关注

路漫漫其修远兮,吾将上下而求索。 2024-12-24 加入

鸿蒙创作先锋,华为HDE专家,鸿蒙讲师,作者。 目前任职鸿蒙应用架构师。历经腾讯,宝马,研究所,金融。 待过私企,外企,央企。 深耕大应用开发领域十年。 OpenHarmony,HarmonyOS,Flutter,H5,Android,IOS。

评论

发布
暂无评论
【HarmonyOS】关于鸿蒙消息推送的心得体会(二)_GeorgeGcs_InfoQ写作社区