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

news2024/9/20 20:47:35

【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 {
      // 获取推送服务的Token
      pushService.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平台设置相关操作都OK
          hilog.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 ability
    hilog.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 resources
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
  }

  onForeground(): void {
    // Ability has brought to foreground
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
  }

  onBackground(): void {
    // Ability has back to background
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
  }
}

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

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

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

相关文章

Java-寻找二叉树两结点最近公共祖先

目录 题目描述: 注意事项: 示例: 示例 1: 示例 2: 示例 3: 解题思路: 解题代码: 题目描述: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科…

刷题日志——模拟专题(python实现)

模拟往往不需要设计太多的算法,而是要按照题目的要求尽可能用代码表示出题目的旨意。 以下是蓝桥杯官网模拟专题的选题,大多数比较基础,但是十分适合新手入门: 一. 可链接在线OJ题 饮料换购图像模糊螺旋矩阵冰雹数回文日期长草最…

R语言实现神经网络ANN

# 常用激活函数 # 自定义Sigmoid函数 sigmod <- function(x){return(1/(1exp(-x))) } # 绘制Sigmoid曲线 x <- seq(-10,10,length.out 100) plot(x,sigmod(x),type l,col blue,lwd 2,xlab NA,ylab NA,main Sigmoid函数曲线)# 自定义Tanh函数 tanh <- function(…

MYSQL——数据库基础和操作

1.创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] …] create_specification: [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name 说明&#xff1a; 1.大写的表示关键字 2. []是可选项 3. CHARACT…

读人工智能全传15意向立场

1. 物理立场 1.1. 可以解释一个实体行为 1.2. 在物理立场中&#xff0c;我们使用自然法则(物理、化学等)来预测系统的行为结果 1.3. 虽然物理立场在解释这种行为的时候非常有效&#xff0c;但无法应用于理解或者预测人类行为 1.3.1. …

RocketMQ源码学习笔记:消费者启动流程

这是本人学习的总结&#xff0c;主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、前置知识1.1、pull和push型消费者1.2、消息CommitLog到ConsumeQueue1.3、自动创建的重试主题1.4、广播型消费和集群型消费中offset的存储位置 2、消费中的启动流程2.1、Preview2.2、校验&…

主流大数据调度工具DolphinScheduler之数据ETL流程

今天给大家分享主流大数据调度工具DolphinScheduler&#xff0c;以及数据的ETL流程。 一&#xff1a;调度工具DS 主流大数据调度工具DolphinScheduler&#xff0c; 其定位&#xff1a;解决数据处理流程中错综复杂的依赖关系 任务支持类型&#xff1a;支持传统的shell任务&a…

MBR40150FCT-ASEMI无人机专用MBR40150FCT

编辑&#xff1a;ll MBR40150FCT-ASEMI无人机专用MBR40150FCT 型号&#xff1a;MBR40150FCT 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 批号&#xff1a;最新 最大平均正向电流&#xff08;IF&#xff09;&#xff1a;40A 最大循环峰值反向电压&#xff08;VRRM&a…

shell脚本——编程规范与变量

目录 一、shell脚本 1、shell脚本概述 2、shell脚本的应用场景 3、shell脚本的作用——命令解释器 二、Shell 脚本编程规范 1、用户登录Shell 2、shell脚本的构成 3、执行shell脚本 三、重定向与管道操作 1、重定向 1.1、交互式硬件设备 1.2、重定向操作 2、重定向…

php相关

php相关 ​ 借鉴了小迪安全以及各位大佬的博客&#xff0c;如果一切顺利&#xff0c;会不定期更新。 如果感觉不妥&#xff0c;可以私信删除。 默认有php基础。 文章目录 php相关1. php 缺陷函数1. 与2. MD53. intval()4. preg_match() 2. php特性1. php字符串解析特性2. 杂…

数据结构-C语言-排序(3)

代码位置&#xff1a;test-c-2024: 对C语言习题代码的练习 (gitee.com) 一、前言&#xff1a; 1.1-排序定义&#xff1a; 排序就是将一组杂乱无章的数据按照一定的规律&#xff08;升序或降序&#xff09;组织起来。(注&#xff1a;我们这里的排序采用的都为升序) 1.2-排序分…

从汇编层看64位程序运行——栈保护

大纲 栈保护延伸阅读参考资料 在《从汇编层看64位程序运行——ROP攻击以控制程序执行流程》中&#xff0c;我们看到可以通过“微操”栈空间控制程序执行流程。现实中&#xff0c;黑客一般会利用栈溢出改写Next RIP地址&#xff0c;这就会修改连续的栈空间。而编译器针对这种场景…

集合媒体管理、分类、搜索于一体的开源利器:Stash

Stash&#xff1a;强大的媒体管理工具&#xff0c;让您的影音生活井井有条- 精选真开源&#xff0c;释放新价值。 概览 Stash是一个专为个人媒体管理而设计的开源工具&#xff0c;基于 Go 编写&#xff0c;支持自部署。它以用户友好的界面和强大的功能&#xff0c;满足了现代用…

16_网络IPC2-寻址

进程标识 字节序 采用大小模式对数据进行存放的主要区别在于在存放的字节顺序&#xff0c;大端方式将高位存放在低地址&#xff0c;小端方式将高位存放在高地址。 采用大端方式进行数据存放符合人类的正常思维&#xff0c;而采用小端方式进行数据存放利于计算机处理。到目前…

IDEA快速生成项目树形结构图

下图用的IDEA工具&#xff0c;但我觉得WebStorm 应该也可以 文章目录 进入项目根目录下&#xff0c;进入cmd输入如下指令&#xff1a; 只有文件夹 tree . > list.txt 包括文件夹和文件 tree /f . > list.txt 还可以为相关包路径加上注释

系统架构师考点--软件工程(下)

大家好。今天继续总结软件工程的知识点。 一、处理流程设计 业务流程重组BPR BPR是对企业的业务流程进行根本性的再思考和彻底性的再设计&#xff0c;从而获得可以用诸如成本、质量、服务和速度等方面的业绩来衡量的显著性的成就。BPR设计原则、系统规划和步骤如下图所示&am…

从 Pandas 到 Polars 十八:数据科学 2025,对未来几年内数据科学领域发展的预测或展望

我在2021年底开始使用Polars和DuckDB。我立刻意识到这些库很快就会成为数据科学生态系统的核心。自那时起&#xff0c;这些库的受欢迎程度呈指数级增长。 在这篇文章中&#xff0c;我做出了一些关于未来几年数据科学领域的发展方向和原因的预测。 这篇文章旨在检验我的预测能力…

日志的编写与线程池的结合

目录 一、认识日志 二、时间的等级划分 三、日志的输出端 3.1 保存至文件 四、日志的部分信息 4.1 日志等级 4.2 日志时间 五、加载日志 六、日志的宏编写 七、ThreadPool Log 一、认识日志 记录事件&#xff1a; 日志用于记录系统运行过程中发生的各种事件&…

word 设置多级混合标题自动更新

目录预览 一、问题描述二、原因分析三、解决方案四、参考链接 一、问题描述 有没有体会过多级标题&#xff0c;怎么设置都不听使唤的情况&#xff1f; 我想要的格式是&#xff1a; 二、原因分析 多级标题中发现&#xff0c;输入编号格式这里有个数字没有底纹,是了&#xff0…

解析 Mira :基于 Web3,让先进的 AI 技术易于访问和使用

“Mira 平台正在以 Web3 的方式解决当前 AI 开发面临的复杂性问题&#xff0c;同时保护 AI 贡献者的权益&#xff0c;让他们可以自主拥有并货币化自己的模型、数据和应用&#xff0c;以使先进的 AI 技术更加易于访问和使用。” AI 代表着一种先进的生产力&#xff0c;它通过深…