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

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

前言

这几天调研了鸿蒙消息推送的实现方式,形成了开发设计方案,颇有体会,与各位分享。

虽然没做之前觉得很简单的小功能,貌似只需要和华为服务器通信,发送通知即可,然后做做通知栏的UI设置,应用接收关键字处理跳转or展示表现。

但是万万没想到,光是摸了一下官方文档就感觉水很深。更别说第三方厂商封装的推送SDK了。

私聊讨论的事宜

最近很多同学私聊问我开发相关的问题,我是比较喜欢和别人讨论问题,毕竟真理越辩越明,和别人讲解讨论的过程,我也在持续成长。

但是不要上班时间崔我问,这让我有点难顶。私聊问我,一般工作日只会下班看下CSDN,看到就会回复,不用着急。

如果真是特别急的开发问题,我觉得可以换个渠道去请教。像手机上这些应用,除了wx这种即时通讯的软件。

我一般都会把通知关闭。减少外界信息的打扰。各位也可以试试,这样能提升专注力。

但是APP当然是期望通知功能开启,把信息及时推送给用户,达到拉日活儿,拉流量的效果。

那鸿蒙中如何实现呢?废话不多说了,下面参见。

鸿蒙Push Kit的效果和功能表现

学习和了解一个事物,我本人喜欢先研究其背景,知其然才能知其所以然。这样我们才能有具体的事务框架思路,在细节上才能有的放矢。若一上来就看API写代码,就像打游戏不看全地图一样,效率会很低。

首先我们要知道,在鸿蒙中使用的推送服务,是华为HMS能力中的推送服务。

HMS Core - App Services - PushKit。

(1) 服务定义:
推送服务(Push Kit)是华为提供的消息推送平台,建立了从云端到终端的消息推送通道。您通过集成推送服务,可以向客户端应用实时推送消息,构筑良好的用户关系,提升用户的感知度和活跃度。

在这里插入图片描述

(2) 服务表现:
通知栏消息通过推送服务通道直接下发,在终端设备的通知中心呈现,不需要应用进程驻留后台。用户点击通知栏消息后触发相应的动作,如打开应用、打开网页等。

可以自定义通知栏消息样式(小图、按钮等)和提醒方式(锁屏、横幅和角标)来吸引用户,从而提高应用的日活跃用户数量。

服务常用场景:即时通讯消息传送、帐号动态等。

AGC平台开通推送服务,配置推送设置项

首先要去华为AGC平台去将你的应用开通推送服务,一般应用是不会有推送,必须去平台开通才行。
在这里插入图片描述
开通服务之后,点击配置tab,进去配置页面。可以看到如图所示内容,刚才我们已经完成第一步,现在需要进行第二步和第三步。
在这里插入图片描述
华为的推送包括标准默认的推送类型 和 自分类权益。如果不开通第三步,每天最多只能推送两条通知。当然自分类权益是需要申请,点击去看要求傻瓜操作即可。

代码讲解

在这里插入图片描述

    "metadata": [{"name": "client_id","value": "xxxxxx" // AGC平台上的clientid},],

然后我们需要获取Push Kit提供的Token,用于后续推送处理。然后推送,当然有唯一标识来进行推送。我们自己的APP有用户id作为唯一标识,设备也有自己id。这时我们就需要将设备id和用户id进行绑定,用于华为的PushKit 顺利推送给用户。

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';
import { AAID, pushCommon, pushService } from '@kit.PushKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');try {// 获取应用匿名标识符(AAID,Anonymous Application Identifier)的能力。AAID用于标识应用身份。AAID.getAAID((err: BusinessError, data: string) => {if (err) {hilog.error(0x0000, 'testTag', 'Failed to get AAID: %{public}d %{public}s', err.code, err.message);} else {hilog.info(0x0000, 'testTag', 'Succeeded in getting AAID');}});} catch (err) {let e: BusinessError = err as BusinessError;hilog.error(0x0000, 'testTag', 'Failed to get AAID: %{public}d %{public}s', e.code, e.message);}try {// 获取推送服务的TokenpushService.getToken((err: BusinessError, data: string) => {if (err) {hilog.error(0x0000, 'testTag', 'Failed to get push token: %{public}d %{public}s', err.code, err.message);} else {// 成功获取到Token 说明AGC平台设置相关操作都OKhilog.info(0x0000, 'testTag', 'Succeeded in getting push token');}});} catch (err) {let e: BusinessError = err as BusinessError;hilog.error(0x0000, 'testTag', 'Failed to get push token: %{public}d %{public}s', e.code, e.message);}// 定义需要绑定的profileId// 帐号匿名标识,不可为空字符串。不建议使用真实的帐号id,推荐使用帐号id自行生成对应的匿名标识,能与该账号id建立唯一映射关系即可,生成算法无限制。const profileId: string = '1****9';try {// pushCommon.AppProfileType 应用内帐号类型,分为华为帐号和应用帐号。我这里选择后者,根据业务需求选择的。pushService.bindAppProfileId(pushCommon.AppProfileType.PROFILE_TYPE_APPLICATION_ACCOUNT, profileId, (err: BusinessError) => {if (err) {hilog.error(0x0000, 'testTag', 'Failed to bind app profile id: %{public}d %{public}s', err.code, err.message);} else {hilog.info(0x0000, 'testTag', 'Succeeded in binding app profile id.');}});} catch (err) {let e: BusinessError = err as BusinessError;hilog.error(0x0000, 'testTag', 'Failed to bind app profile id: %{public}d %{public}s', e.code, e.message);}}onDestroy(): void {hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');}onWindowStageCreate(windowStage: window.WindowStage): void {// Main window is created, set main page for this abilityhilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');windowStage.loadContent('pages/Index', (err) => {if (err.code) {hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');return;}hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');});}onWindowStageDestroy(): void {// Main window is destroyed, release UI related resourceshilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');}onForeground(): void {// Ability has brought to foregroundhilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');}onBackground(): void {// Ability has back to backgroundhilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');}
}

Push Kit API下沉HarmonyOS,应用可免SDK集成。通过提供系统级长链接,即使应用进程不在也能实时推送消息。
Push Kit API下沉HarmonyOS,应用可免SDK集成。通过提供系统级长链接,即使应用进程不在也能实时推送消息。
Push Kit API下沉HarmonyOS,应用可免SDK集成。通过提供系统级长链接,即使应用进程不在也能实时推送消息。

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

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

相关文章

Unity XR Interaction Toolkit的安装(二)

提示:文章有错误的地方,还望诸位大神不吝指教! 文章目录 前言一、安装1.打开unity项目2.打开包管理器(PackageManage)3.导入Input System依赖包4.Interaction Layers unity设置总结 前言 安装前请注意:需要…

科技论文在线--适合练习期刊写作和快速发表科技成果论文投稿网站

中国科技论文在线这个平台可以作为练手的一个渠道,至少可以锻炼一下中文写作,或者写一些科研方向的简单综述性文章。当然,如果你的老师期末要求也是交一份科技论文在线的刊载证明的话,这篇文章可以给你提供一些经验。 中国科技论…

什么是分布式事务?有哪些实现方案?

在分布式系统中,一次业务处理可能需要多个应用来实现,比如用户发送一次下单请求,就涉及到订单系统创建订单、库存系统减库存,而对于次下单,订单创建与减库存应该是要同时成功或同时失败的,但在分布式系统中…

Vue进阶之Vue无代码可视化项目(七)

Vue无代码可视化项目 右侧栏配置——配置面板components/RightPanel.vueviews/LayoutView.vue装import-sort插件package.json.eslintrc.cjspnpm i安装修复import问题进一步的:components/RightPanel.vue初始化其次editor.ts进一步的:views/LayoutView.vue右侧栏配置——配置面…

【Linux服务器Java环境搭建】011在linux中安装Nginx,以及停止或启动Nginx服务

系列文章目录 【Linux服务器Java环境搭建】 前言 又到了周五晚上了,最近工作上有些忙,忙于一个需求频繁变更的项目,都快吐血了,懂得都懂,哈哈,正好有时间了,继续写系列【Linux服务器Java环境搭…

linux远程主机和windows互传

一.winscp 最简单,但有时候会出现连不上 二 .MobaXterm 可以选择多种连接方式 二. 配置samba服务器 1. 新增samba用户 sudo pdbedit -L -v 查看当前samba用户 sudo smbpasswd -a guoziyi 添加samba用户 sudo smbpasswd -x guoziyi 删除samba用户 2. 编辑/etc…

SpringBoot如何限制请求访问次数

在Spring Boot应用中限制请求访问次数可以通过几种不同的方法实现,如使用Rate Limiting中间件或自定义拦截器。以下是一些常见的实现方法: 方法1:使用Spring Boot内置的Rate Limiting工具 1.1 使用Bucket4j Bucket4j是一个Java库&#xff…

matlab实现绘制矢量图

在MATLAB中绘制矢量图(Vector Field)主要涉及到使用箭头来表示向量的大小和方向。这可以通过quiver函数(注意:MATLAB的官方函数是quiver,但请注意它可能是quiver3的误写,因为quiver3用于三维矢量场&#xf…

ArcGIS Pro SDK (九)几何 6 包络

ArcGIS Pro SDK (九)几何 6 包络 文章目录 ArcGIS Pro SDK (九)几何 6 包络1 构造包络2 构造包络 - 从 JSON 字符串3 合并两个包络4 与两个包络相交5 展开包络6 更新包络的坐标 环境:Visual Studio 2022 .NET6 ArcGI…

加油卡APP系统开发:在线优惠加油,拓展市场

目前,我国汽车行业发展迅速,用车群体逐年扩大,因此,汽车加油市场规模呈现出了快速增长趋势。不过近年来,油价不断上涨,增加了居民的生活成本,为了节省汽车加油的支出,很多人都开始选…

使用idea创建Javaweb项目(步骤)

第一步创建Javaweb项目 File>New>Project 第二步 勾选Web Application >Next 然后就是进行起名,完成。 完成创建项目,检查是否文件齐全 配置tomcat 配置好,就能启动tomcat,显示首页 导入jar包。导入进项目&#xf…

【力扣】最小栈

🔥博客主页: 我要成为C领域大神🎥系列专栏:【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 设计一个支持 push…

数仓工具—Hive语法之替换函数和示例

Hive 替换函数和示例 默认情况下,并没有可用的 Hive 替换函数。如果在处理字符串时需要替换特定值,例如垃圾值,字符串操作函数替换是非常需要的。在本文中,我们将检查 Hive 替换函数 的替代方法,以便在需要时使用。 如前所述,Apache Hive 不提供替换函数的支持。但是,…

信息系统是一个社会技术系统

一.管理信息系统定义 (1) 技术视角 信息系统是: ——由若干相互连接的部件组成的; ——对组织中的信息进行收集、处理、储存和传递的系统; ——用以支持组织制定决策和管理控制; ——还可以协助管理者与员工分析问题、可视…

PLC中的高低字节如何理解?

双字(Double Word,通常是32位整数)的高低字节定义可能会因具体的PLC型号和通信协议而有所不同。通常,双字可以被划分为两个16位字,每个16位字又分为高字节和低字节。 以下是一般定义: 双字(32…

【异常解决】Unable to start embedded Tomcat Nacos 启动报错

Unable to start embedded Tomcat Nacos 启动报错解决方案 一、背景描述二、原因分析三、解决方案 一、背景描述 Windows 本地启动 Nacos(2.2.0) 服务,控制台报错 Unable to start embedded Tomcat。 报错信息:Unable to start …

《JavaScript语言精粹》学习笔记——数组

JavaScript中并没有像数组一样的数据结构。而是提供了一种拥有一些类数组特性的对象。 数组字面量 var numbers[one,two,three,four,izero,seven,eight]//对象字面量 var numbers object{1:"one",2:"two" };numbers继承自Array.prototype,而n…

HarmonyOS Next原生应用开发-从TS到ArkTS的适配规则(六)

一、仅支持一个静态块 规则:arkts-no-multiple-static-blocks 级别:错误 ArkTS不允许类中有多个静态块,如果存在多个静态块语句,请合并到一个静态块中。 TypeScript class C {static s: stringstatic {C.s aa}static {C.s C.s …

nginx负载均衡实例

实现效果 浏览器输入地址http://nginx服务器ip(:80)/edu/a.html,实现负债均衡效果,平均分配到 服务器ip:8080和 服务器ip:8081进程中。 准备工作 准备两个tomcat,一个监听在8080端口,一个监听在8081端口。也可以准备多个tomcat。…

数据结构小测试:排序算法

目录 1、请简述数据结构八大排序算法的思路。 2、常用排序算法手写 冒泡排序: 选择排序: 快速排序: 归并排序: 堆排序: 3、额外再加一个二分查找吧 1、请简述数据结构八大排序算法的思路。 冒泡排序&#xff…