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

news2024/9/23 21:30:17

【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详细研究下。

在这里插入图片描述

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

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

相关文章

linux 部署flask项目

linux python环境安装: https://blog.csdn.net/weixin_41934979/article/details/140528410 1.创建虚拟环境 python3.12 -m venv .venv 2.激活环境 . .venv/bin/activate 3.安装依赖包(pip3.12 install -r requirements.txt) pip3.12 install -r requirements.txt 4.测试启…

Windows安装Visual Studio2022 + QT5.15开发环境

最近,把系统换成了Windows11,想重新安装QT5.12,结果发现下载不了离线安装包。 最后索性安装QT5.15了,特此记录下。 预祝大家:不论是何时安装,都可以安装到指定版本的QT。 一、VS2022安装 VS2022官网下…

推荐一款基于 SpringBoot2 的后台管理系统脚手架,非常轻量简单(附源码)

前言 在现代软件开发中,后台管理系统是企业数字化转型的关键组成部分。然而,现有软件常常存在一些痛点,如复杂的权限管理、缺乏灵活的工作流配置、监控和日志功能不完善等。此外,许多系统study 成本高,依赖关系复杂&a…

Pycharm软件Win 64位安装包+详细安装步骤 百度云

如大家所掌握的,Pycharm是一款集成开发环境(IDE),专门用于python语言开发的工具。作为一款功能强大的IDE,Pycharm提供了丰富的功能和工具,使得python开发变得更加高效和便捷。 Pycharm常用场景如下&#x…

Unity发布XR中用于worldbuilding的全新电子书

通过身临其境的虚拟领域开始旅程,在维度之间传送,或将数字奇迹与现实世界融合——虚拟现实(VR)和混合现实(MR)的千万种可能性将邀请创作者把他们的想象力带入生活。 Unity发布的最新版综合指南将帮助有抱负的创作者和经验丰富的开发者深入研究和理解构建…

LLM模型与实践之基于 MindSpore 实现 BERT 对话情绪识别

安装环境 # 该案例在 mindnlp 0.3.1 版本完成适配,如果发现案例跑不通,可以指定mindnlp版本,执行!pip install mindnlp0.3.1 !pip install mindnlp 模型简介 BERT是一种由Google于2018年发布的新型语言模型,它是基于Transforme…

云计算核心算法(二)

目录 二、DHT算法(一)DHT原理介绍(二)Chord中DHT的具体实现(三)Pastry中DHT的具体实现(四)CAN中DHT的具体实现(五)Tapestry中DHT的具体实现 三、Gossip协议&a…

数据结构之栈详解

1. 栈的概念以及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈…

HDU1032——The 3n + 1 problem,HDU1033——Edge,HDU1034——Candy Sharing Game

目录 HDU1032——The 3n 1 problem 题目描述 运行代码 代码思路 HDU1033——Edge 题目描述 运行代码 代码思路 HDU1034——Candy Sharing Game 题目描述 运行代码 代码思路 HDU1032——The 3n 1 problem 题目描述 Problem - 1032 运行代码 #include <iostr…

H3CNE(路由基础、直连路由与静态路由)

目录 6.1 直连路由 6.2 静态路由理解性实验 6.2.1 配置直连路由 6.2.2 配置静态路由 6.3 路由表的参数与比较 6.3.1 优先级的比较 6.3.2 开销的比较 6.4 路由器中的等价路由、浮动路由、默认路由 6.4.1 等价路由 6.4.2 浮动路由 6.4.3 默认路由(缺省路由) 6.1 直连路…

Golang | Leetcode Golang题解之第278题第一个错误的版本

题目&#xff1a; 题解&#xff1a; func firstBadVersion(n int) int {return sort.Search(n, func(version int) bool { return isBadVersion(version) }) }

宿舍生活新升级:智能指纹锁的便捷体验(嘉立创EDA设计)

宿舍生活新升级&#xff1a;智能指纹锁的便捷体验 引言 宿舍生活总是充满挑战和乐趣&#xff0c;但有时也会因为一些小事情而变得复杂。比如&#xff0c;忘记带钥匙或者需要频繁地给室友开门。随着科技的发展&#xff0c;智能设备逐渐走进我们的生活&#xff0c;为日常带来便…

iPhone能运行Windows了 iOS正在被逼加速开放

用iPhone来运行Windows 11&#xff1f;是的&#xff0c;两个八竿子打不着的设备和系统&#xff0c;居然还有融合的一天。虽然不管从哪个方向来看&#xff0c;这都是一个很奇葩的玩法&#xff0c;但是背后却代表着iOS生态的进一步松绑&#xff0c;iOSAndroid化似乎不再仅限于功能…

【iOS】进程与多线程

目录 前言进程和线程进程和线程的区别多线程的意义时间片概念 线程的生命周期线程池的运行策略自旋锁和互斥锁自旋锁互斥锁自旋锁和互斥锁区别原子属性 iOS多线程技术方案 前言 学习此文&#xff1a;iOS多线程 在平时的iOS开发中&#xff0c;多线程是我们常会遇到的&#xff0…

EasyMedia转码rtsp视频流flv格式,hls格式,H5页面播放flv流视频

EasyMedia转码rtsp视频流flv格式&#xff0c;hls格式 H5页面播放flv流视频 文章最后有源码地址 解决海康视频播放视频流&#xff0c;先转码后自定义页面播放flv视频流 先看效果&#xff0c;1&#xff0c;EasyMedia自带的页面&#xff0c;这个页面二次开发改动页面比较麻烦 …

WARNING: The Nouveau kernel driver is currently in use by your system. 处理方法

实践系统&#xff1a; 安装NVIDIA驱动时&#xff0c;提示&#xff1a; WARNING: The Nouveau kernel driver is currently in use by your system. This driver is incompatible with the NVIDIA driver&#xff0c;and must be disabled before proceeding.警告&#xff1…

【分布式锁】Redis实现分布式锁

在分布式系统中&#xff0c;当多个服务实例&#xff08;或节点&#xff09;需要访问或修改同一份共享资源时&#xff0c;就需要使用分布式锁来确保数据的一致性和防止并发问题。这种情况下&#xff0c;传统的Java并发控制机制如ReentrantLock或synchronized就无法满足需求&…

.NET开源、简单、实用的数据库文档生成工具

前言 今天大姚给大家分享一款.NET开源&#xff08;MIT License&#xff09;、免费、简单、实用的数据库文档&#xff08;字典&#xff09;生成工具&#xff0c;该工具支持CHM、Word、Excel、PDF、Html、XML、Markdown等多文档格式的导出&#xff1a;DBCHM。 支持的数据库 Sq…

Docker+consul容器服务的更新与发现

1、Consul概述 &#xff08;1&#xff09;什么是服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的&#xff0c;不保障高可用性&#xff0c;也不考虑服务的压力承载&#xff0c;服务之间调用单纯的通过接口访问。直到后来出现了多个节点…

初学MySQl简单sql语句(1)

目录 SQL语句介绍&#xff1a; DDL创建数据库&#xff1a; char和varchar比较 数值类型 数据库存储引擎 数据库存储引擎——InnoDB 数据库存储引擎——MyISAM 数据库存储引擎-MyISAM 和InnoDB区别 修改和删除数据库表 数据库设计三大范式 一、什么是范式 二、约束作…