当前位置: 首页 > news >正文

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

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

在这里插入图片描述

前言

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

上一篇,【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 URL
POST https://push-api.cloud.huawei.com/v3/[projectId]/messages:send// Request Header
Content-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详细研究下。

在这里插入图片描述

相关文章:

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

【HarmonyOS】关于鸿蒙消息推送的心得体会(二) 前言 推送功能的开发与传统功能开发还是有很大区别。首先最大的区别点就在于需要多部门之间的协同,作为鸿蒙客户端开发,你需要和产品,运营,以及后台开发一起…...

零基础入门:创建一个简单的Python爬虫管理系统

摘要: 本文将手把手教你,从零开始构建一个简易的Python爬虫管理系统,无需编程基础,轻松掌握数据抓取技巧。通过实战演练,你将学会设置项目、编写基本爬虫代码、管理爬取任务与数据,为个人研究或企业需求奠…...

【Node.js基础04】node.js模块化

一:什么是模块化 在Node.js中,每个文件都可视为一个独立的模块。模块化提高了代码的复用性,按需加载,具有独立的作用域 二:如何实现多个文件间导入和导出 1 CommonJS标准(默认)-导入和导出 …...

数据库——单表查询

一、建立数据库mydb8_worker mysql> use mydb8_worker; 二、建立表 1.创建表 mysql> create table t_worker(department_id int(11) not null comment 部门号,-> worder_id int(11) primary key not null comment 职工号,-> worker_date date not null comment…...

dsa加训

refs: OI Wiki - OI Wiki (oi-wiki.org) 1. 枚举 POJ 2811 熄灯问题 refs : OpenJudge - 2811:熄灯问题 如果要枚举每个灯开或者不开的情况,总计2^30种情况,显然T。 不过我们可以发现:若第i行的某个灯亮了,那么有且仅有第i行和第…...

SpringBoot源码(1)ApplicationContext和BeanFactory

1、调用getBean方法 SpringBootApplication public class SpringBootDemoApplication {public static void main(String[] args) {ConfigurableApplicationContext applicationContext SpringApplication.run(SpringBootDemoApplication.class, args);applicationContext.get…...

CANoe编程实例--TCP/IP通信

1、简介 本实例将使用目前常用的开发工具C#来开发服务器端,以CANoe端作为客户端。服务器端和客户端,通过TCP/IP连接,实现数据交换。 首先在服务器端建立一个监听Socket,自动创建一个监听线程,随时监听是否有客户端的连…...

Neuron协议网关的北向应用插件开发

目录 概述 指令处理层开发​ 应用层开发​ .open​ .close​ .init​ .uninit​ .start​ .stop​ .setting​ .request​ 插件设置文件​ 适配华为的思路 概述 最近研究了一段时间的Neuron协议网关,前面的博文也提到它虽然能够把数据发到华为的IoT平台上…...

【BUG】已解决:You are using pip version 10.0.1, however version 21.3.1 is available.

You are using pip version 10.0.1, however version 21.3.1 is available. 目录 You are using pip version 10.0.1, however version 21.3.1 is available. 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#…...

electron-builder打包vue2项目不显示element-ui图标

1、使用版本 vue ^2.6.14element-ui ^2.15.14vue-cli-plugin-electron-builder 2.1.1 2、解决办法 1) 如果是简单的图标可以使用图片代替(这种对于elementui组件的图标还是不会显示) 2)在vue.config.js配置 const { defineCon…...

controller层-请求格式为json-请求方法为get

前置条件 get请求映射,内容和PostMapping一致,需要请求参数更换为get数据 请求过程:用户请求--初始化DispatcherServlet及对接和分发用户请求--controller--service 用户请求:http://ip:port/user/getinfo 请求方法:ge…...

【Linux】网络通信基础:应用层协议、HTTP、序列化与会话管理

文章目录 前言1. 应用层自定义协议与序列化1.1 什么是应用层?1.2 再谈 "协议"1.3 序列化 和 反序列化 2. HTTP 协议3. 认识 URL(统一资源定位符)4. urlencode和urldecode5. HTTP 协议请求与响应格式5.1 HTTP 请求5.2 HTTP 响应 6. HTTP 的方法6.1 GET 方法…...

@NotNull、@NotEmpty 和 @NotBlank 区别

NotNull、NotEmpty 和 NotBlank 是 Java Bean Validation (JSR 380) 规范中定义的注解,通常用于验证对象的属性是否满足特定的条件。这些注解常用于后端验证,确保接收到的数据符合预期。 NotNull 用途:验证一个对象是否不为null。 注意&#…...

大模型应用—大模型赋能网络爬虫

大模型赋能网络爬虫 简单来说,网页抓取就是从网站抓取数据和内容,然后将这些数据保存为XML、Excel或SQL格式。除了用于生成潜在客户、监控竞争对手和市场研究外,网页抓取工具还可以用于自动化你的数据收集过程。 借助AI网页抓取工具,可以解决手动或纯基于代码的抓取工具的…...

在 Qt 中获取 MouseMove 事件

在编写 Qt 程序时,我希望在鼠标移动时(即使鼠标在另一个窗口上)能够调用 mouseMoveEvent(QMouseEvent* event) 方法。目前,在我的 mainwindow.cpp 文件中,我有如下代码: void MainWindow::mouseMoveEvent(…...

自动驾驶系列—智能巡航辅助功能中的路口通行功能介绍

自动驾驶系列—智能巡航辅助功能中的车道中央保持功能介绍 自动驾驶系列—智能巡航辅助功能中的车道变换功能介绍 自动驾驶系列—智能巡航辅助功能中的横向避让功能介绍 自动驾驶系列—智能巡航辅助功能中的路口通行功能介绍 文章目录 2. 功能定义3. 功能原理4. 传感器架构5. 实…...

如何为WordPress网站设置多语言站点

随着全球化的发展,拥有一个支持多语言的站点已成为提升用户体验、扩大受众范围的重要手段。本文将详细介绍如何为WordPress网站设置多语言站点,提供两种最佳方案详解,帮助您轻松实现多语言站点的搭建与管理。无论您是选择在同一站点内发布多语…...

【RHCE】综合真机实验(shell完成)

目录 题目: 需求描述 实操 一、服务端(servera) 1.ip配置 2.更改主机名 3.创建本地仓库 4.DNS服务 1.下载软件包和防火墙允许 2.配置主配置文件 3.配置区域文件 1.named.exam 2.named.fangxiang 4.重启服务 5.验证结果&#x…...

【Python】成功解决conda创建虚拟环境时出现的CondaHTTPError: HTTP 000 CONNECTION FAILED错误

【Python】成功解决conda创建虚拟环境时出现的CondaHTTPError: HTTP 000 CONNECTION FAILED错误 🌈 欢迎莅临我的个人主页👈这里是我深耕Python编程、机器学习和自然语言处理(NLP)领域,并乐于分享知识与经验的小天地&a…...

苹果笔记本电脑如何优化系统 苹果电脑系统优化软件哪个好 cleanmymac x怎么用

随着时间的推移,你可能会发现你的MacBook运行速度变慢,甚至在执行一些基本任务时也会感觉到卡顿。这不仅影响了工作效率,也大大降低了使用体验。但别担心,优化你的Mac系统比做早餐还简单。本文将用一种轻松的风格向你介绍7种简单易…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

C++使用 new 来创建动态数组

问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

SQL注入篇-sqlmap的配置和使用

在之前的皮卡丘靶场第五期SQL注入的内容中我们谈到了sqlmap,但是由于很多朋友看不了解命令行格式,所以是纯手动获取数据库信息的 接下来我们就用sqlmap来进行皮卡丘靶场的sql注入学习,链接:https://wwhc.lanzoue.com/ifJY32ybh6vc…...