鸿蒙推送服务公共信息模块指南

news/2024/12/25 0:07:56/文章来源:https://www.cnblogs.com/Leoclass/p/18628940

最近公司老板又让我们去写推送,希望用户能够实时收到各种推送通知,比如新的消息、紧急通知,甚至是应用内通话的提醒。

这两天正好搞完了,所以写个博文记录一下中间的知识点,希望方便后来的同学可以直接用上。

模块简介
这次的主角是 pushCommon 模块,这个模块提供了非常方便的推送服务公共信息。

pushCommon 模块是鸿蒙系统中的推送服务模块之一,提供了丰富的功能,包括绑定账号类型、场景化消息数据、扩展通知消息、点击事件替换数据以及应用内通话消息等。简单来说,这个模块让你可以灵活地实现各种推送消息需求,从简单的通知到复杂的应用内交互都能轻松应对。它帮助开发者更高效地集成推送服务,提升用户体验。

开发环境要求
pushCommon 模块从鸿蒙 4.0.0 开始支持,开发者可以通过 import { pushCommon } from '@kit.PushKit'; 导入模块来使用它的功能。

需要注意的是,它只能在 Stage 模型下使用,并且需要具备
SystemCapability.Push.PushService 系统能力才能正常运行。只有满足这些条件,模块的所有功能才能被正常调用和使用。

绑定账号类型 (AppProfileType)
在鸿蒙推送服务中,绑定账号的类型非常重要,因为它决定了推送的消息可以绑定到哪个账号类型上。主要有两种类型:

华为账号 (PROFILE_TYPE_OS_DISTRIBUTED_ACCOUNT):用于绑定用户的华为账号,通过绑定华为账号,你可以让用户通过同一个账号在多个设备上接收推送消息,确保跨设备体验一致。
应用账号 (PROFILE_TYPE_APPLICATION_ACCOUNT):用于绑定应用内自定义的账号,这通常适用于那些有自己账号系统的应用。通过绑定应用账号,用户可以接收到属于他们的个性化消息,提升整体使用体验。
例如,如果你的应用涉及用户的个人账号系统,就需要使用应用账号类型,以便让用户接收到属于他们的个性化消息,这样能够显著提高用户对应用的依赖性和参与度。

场景化消息数据 (PushPayload)
应用可以通过 receiveMessage() 获取场景化消息数据,比如聊天消息、应用后台操作通知等。PushPayload 提供了多种场景下的推送消息支持,以下是一些常见的场景:

IM 消息:假设你的应用是一款即时通讯工具,当用户收到新消息时,可以使用 PushPayload 获取推送数据。

{"data": "extraData","header": {"token": "MA**"},"messageAction": 0,"notification": {"bigBody": "bigBodyXX","bigTitle": "bigTitleXX","body": "bodyXX","image": "https://**/image**.png","title": "titleXX"}
}

上面代码里面的 notification 包含了完整的通知数据,比如标题、内容、图片等,这些信息将直接用于在设备上展示通知。开发者可以通过这些字段自定义推送内容,使其更符合用户需求。

VoIP 通话:如果你需要应用内通话提醒(类似微信语音通话功能),可以通过 PushPayload 获取通话推送数据

{"data": "extraData","header": {"token": "MA**"}
}

上面这种数据通常比较简单,只需提供通话的必要信息即可。这种设计也能保证消息处理的简洁和快速响应。

扩展通知消息数据 (RemoteNotificationInfo)
继承了 PushPayload,用于扩展通知功能。通过这个接口,你可以给用户推送更详细的信息,并且支持在 Stage 模型中执行各种场景化操作。举个例子,如果你需要向用户推送更丰富的通知数据(例如需要显示图像、大量文本等),这个扩展通知接口可以满足这些需求。

使用 RemoteNotificationInfo 可以进一步定制化通知内容,帮助用户更加直观地获取关键信息。这个接口非常适合需要推送重要信息的场景,比如活动促销、紧急提醒等。

扩展通知替换内容 (RemoteNotificationContent)
有时候,默认的通知内容不能满足需求,比如你想给特定用户展示个性化的标题和内容。这时可以使用 RemoteNotificationContent 替换通知内容,甚至可以在通知中叠加小图标,丰富展示效果,吸引用户注意。

title:设置通知的标题。通过个性化标题,让用户对通知产生兴趣,增加打开率。
text:设置通知的内容,可以传达详细的信息。
overlayIcon:叠加图标(例如显示未读消息的小红点)。这个图标可以让用户一眼就看到应用的动态信息,提高点击的可能性。
当然啦,如果你有需要,还可以自定义角标数量 ( badgeNumber),甚至可以同时返回多个角标数量信息,来展示更多的通知详情。

点击事件替换数据 (RemoteWantAgent)
当用户点击通知时,我们希望他们能直接跳转到相关内容上,从而提升用户体验。RemoteWantAgent 允许我们自定义点击行为,可以替换要跳转的数据。例如,可以指定要打开的页面名称 ( abilityName ),也可以传递额外的参数 ( parameters),这让应用内的跳转变得更加灵活。

举个例子,如果用户点击一条活动促销通知,RemoteWantAgent 可以直接将他们带到活动详情页,提升操作的流畅性。这种灵活的跳转机制使得通知功能不仅仅是传达信息,更能引导用户深入互动。

应用内通话消息 (VoIPInfo)
如果你的应用有内置的 VoIP(网络电话)功能,那么 VoIPInfo 就是为此专门设计的。

它继承了 PushPayload,包含了通话相关的关键信息,比如唯一的通话标识符 ( callId )、通话类型 ( type ) 和数据 ( data )。

用户接到 VoIP 通话请求时,可以通过这些数据将通话信息推送给用户,从而实现类似微信、钉钉的语音/视频通话功能。这样用户可以快速响应,接听或拒绝通话,提高了应用内交流的效率。

✨ 一个小的代码示例:集成推送服务
为了帮助大家更好地理解,来整一个简单的代码示例,看看如何将推送服务集成到鸿蒙应用中。

首先呢,咱先导入模块:

import { pushCommon } from '@kit.PushKit';

然后,创建一个推送场景化消息的处理方法:

function handlePushMessage(message: pushCommon.PushPayload) {if (message.type === 'IM') {console.log(` 收到即时消息: ${message.data}`);} else if (message.type === 'VoIP') {console.log(` 收到通话请求: ${message.data}`);} else {console.log(` 收到其他类型的通知: ${message.type}`);}
}

上面代码中呢,我们根据消息类型来区分处理逻辑,IM 处理即时消息,VoIP 处理通话请求,其他类型则统一处理。

通过这种方式,可以确保所有推送消息都能及时且正确地进行处理。

此外,我们还可以对消息的不同类型进行进一步处理,比如在收到消息后显示特定的 UI 提示,或者触发应用内的某些功能。这些定制化的处理逻辑可以极大提升用户的使用体验。

最后小总结
介个 pushCommon 模块为鸿蒙应用提供了强大的推送服务支持,无论是消息推送、应用内通话,还是复杂的点击事件处理,它都能轻松应对。
总之又完成了老板的一个需求,希望大家不踩坑~~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/858429.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

产品发展的六阶段

一个成熟的互联网产品从最初的创意到完全成熟,通常需要经历以下几个主要阶段。每个阶段都有特定的目标、核心任务和关键成果,以下是详细的解析。 一、创意阶段 1、创意阶段的核心目标 1.1 识别用户需求 创意阶段的首要任务是发现并明确目标用户的痛点和需求。通过市场调研、…

【unity]学习制作类银河恶魔城游戏-2-

导入新资产切割新资产切割完成修改大小和清晰度球体已经设置了刚体和碰撞体积,直接应用给人物,改名circle为player中心点问题 因为切割的原因,碰撞模型的中心点和人物的中心点不相吻合解决:在子路径下渲染人物图片,将二者的中心点手动对齐手动对齐保存更改更改碰撞体模型运…

DevNow x Notion

DevNow x Notion: DevNow 支持了 Notion 作为其文档系统,可以帮助用户在 Notion 更高效地管理文档,实现文档的集中管理和协作。前言 Notion 应该是目前用户量比较大的一个在线笔记软件,它的文档系统也非常完善,支持多种文档格式,如 Markdown、富文本、表格、公式等。 早期…

平安夜吃苹果

祝大家平安夜快乐 有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果。在第 i 天,树上会长出 apples[i] 个苹果,这些苹果将会在 days[i] 天后(也就是说,第 i + days[i] 天时)腐烂,变得无法食用。也可能有那么几天,树上不会长出新的苹果,此时用 apples[i] == 0 …

基于Three.js的大屏3D地图(一)

依赖安装 yarn add three yarn add @types/three yarn add d3-geothree库安装后在node_modules下其还包含核心three/src和插件three/example/jsm的源码,在开发调试时可以直接查阅。使用Three.js过程中会涉及到许多的类、方法及参数配置,所以建议安装@types/three库;不仅能提…

Java 变量和运算符

Java 变量和运算符1. 变量(Variable)1.1 何为变量 1.2 数据类型(Data Types)1.2.1 整型:byte、short、int、long 1.2.2 浮点类型:float、double 1.2.3 字符类型:char 1.2.4 布尔类型:boolean1.3 变量的使用1.3.1 步骤1:变量的声明 1.3.2 步骤2:变量的赋值1.4. 基本数…

k8s阶段10 k8s指标流水线, 自定义流水线和HPA

1 Kubernetes指标流水线 资源指标Kubernetes有一些依赖于指标数据的组件,例如HPA和VPA等Kubernetes使用Metrics API暴露系统指标给这些组件 #只暴露nodes和pods上的内存,CPU指标该API仅提供CPU和内存相关的指标数据负责支撑Metrics API、生成并提供指标数据的组件,成为核心指标…

目标检测数据集标注工具 CVAT 使用方法【转载】

目标检测数据集标注工具 CVAT 使用方法 原文地址,RSMX-Blog www.cnblogs.com/rsmx/CVAT在线网站(上传下载较慢,数据集较大时不建议使用):https://cvat.org/ CVAT本地部署方法(Linux):https://zhuanlan.zhihu.com/p/388477205官网地址:https://www.cvat.ai/ 1. 使用邮…

浏览器基础知识点(二)

一、浏览器输入一个URL并enter时,发生了什么?用户在浏览器输入一个URL,并按下enter键时,里面包含了非常多的技术细节。 第一,DNS解析: 用户输入的URL通常会是一个域名地址,直接通过域名是无法找到服务器的,因为服务器的本质上是一台拥有IP地址的主机。 需要通过DNS服务…

Gamma阶段——第14周Scrum Meeting记录

Gamma阶段——第14周Scrum Meeting记录 1.目前进度: (1)完成沙盒模式开发,在此基础上加入了笔记,背景音乐,操作说明等辅助功能; (2)完成关卡模式的开发,可以对玩家搭建的电路进行真值表检测; (3)完整游戏系统的整体开发,可以初步实现面向玩家的使用; (4)撰写游…

CPU的实现

CPU实现CPU的数据通路module CPU(input[15:0] inM, // M value input (M = contents of RAM[A])instruction, // Instruction for executioninput clock, reset, // Signals whether to re-start the current// program (reset==1) or continue executing// th…