搜狐新闻HarmonyOS版本 push 推送开发

背景

搜狐新闻作为HarmonyOS的合作伙伴,于2023年12月成功上架鸿蒙单框架应用市场,成为首批鸿蒙应用矩阵的一员。

新闻类推送作为应用的重要组成部分,在二期规划中,我们将推送功能列为核心功能模块。本文将推送集成过程中的步骤和经验分享给大家,以供大家学习交流,不足之处还望大家多多指正。

开发环境

IDE:DevEco Studio NEXT Developer Beta1,Build Version: 5.0.3.300, built on May 10, 2024。

SDK:HarmonyOS NEXT Developer Beta1 SDK, based on OpenHarmony SDK Ohos_sdk_public 5.0.0.22 (API Version 12 Canary3)。

集成步骤

1.生成签名证书

在主菜单栏单击Build > Generate Key and CSR。先生成P12证书,后生产CSR证书,这和IOS证书生成顺序恰好相反。

1.生成p12证书。

Key Store File:设置密钥库文件存储路径,并填写p12文件名;

Alias:密钥的别名信息,用于标识密钥名称。请记住该别名,后续签名配置需要使用;

Validity:证书有效期,默认25年;

Certificate:输入证书基本信息,如组织、城市或地区、国家码等。

2.生成CSR证书。

两者都生成完后的结果如图

2.申请开发和发布证书

登录AppGallery Connect,选择“用户与访问”。

在左侧导航栏点击“证书管理”,进入“证书管理”页面,点击“新增证书”。

在弹出的“新增证书”窗口填写要申请的证书信息,点击“提交”。可建最多两个开发证书,一个发布证书。

3.申请开发和发布Profile

选择“HarmonyOS应用 > HAP Provision Profile管理”,进入“管理HAP Provision Profile”页面,点击右上角“添加”。

在弹出的“HarmonyAppProvision信息”窗口添加调试Profile,完成后点击“提交”。

​​​​​​​

4.配置应用签名证书指纹

打开DevEco Studio,进入配置工程的签名信息的界面,点击“Store file(*.p12)”后的指纹图标。弹出的“Certificate Fingerprint”窗口将展示自动生成的签名证书指纹,复制保存此信息

​​​​​​​

在“项目设置 > 常规”页面的“应用”区域,点击“SHA256证书/公钥指纹”后的“添加证书指纹”。

指纹配置成功后大约10分钟左右生效。

在“项目设置 > 常规”页面的“应用”区域,点击“SHA256证书/公钥指纹”后的“添加公钥指纹(HarmonyOS API 9及以上)”。指纹配置成功后大约10分钟左右生效。

5.开通推送服务

登录AppGallery Connect网站,选择“我的项目”,在项目列表中找到您的项目,在左侧导航栏选择“增长 > 推送服务”,点击“立即开通”,在弹出的提示框中点击“确定”。开通后页面如下:


 6.配置Client ID

在项目模块级别下的src/main/module.json5(例如entry/src/main/module.json5)中,新增metadata并配置client_id,如下所示:

7.申请用户推送权限

在 onWindowStageCreate(windowStage: window.WindowStage) 方法中申请推送权限弹窗。代码如下:

      notificationManager.requestEnableNotification(this.context).then(() => {console.info("requestEnableNotification success");}).catch((err: Base.BusinessError) => {console.error(`requestEnableNotification fail: ${JSON.stringify(err)}`);});

8.获取PushToken

在 EntryAbility类中的onCreate,添加上获取pushToken方法,调用此方法,需保持设备网络畅通。

export default class EntryAbility extends UIAbility {async onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');GlobalContext.getContext().setObject("context", this.context);try {const pushToken: string = await pushService.getToken();hilog.info(0x0000, 'testTag', 'Get push token successfully: %{public}s', pushToken);//保存pushToken 并 上传至应用服务端} catch (err) {let e: BusinessError = err as BusinessError;hilog.error(0x0000, 'testTag', 'Get push token catch error: %{public}d %{public}s', e.code, e.message);}}

9.收到推送

1.冷启动

通过EntryAbility文件中的onCreate方法,want.parameters方法可以获取到推送的详细数据。

在示例项目中,跳转的落地页链接存放在uri字段中,拿到该链接,我们将它暂存在一个单例对象中,在首页加载完后,从该单例对象,取出链接,完成router跳转动作。

   onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');//处理push,获取push中的数据let pushLink: string = (want.parameters as Record<string, string>)['uri'] || '';//跳转落地页:单例存储跳转链接,在首页加载完成后,读取链接完成跳转SNPushManager.instance().pushLink = pushLink;}

以下示例为 SNPushManager单例中的部分业务代码,pushSpecialPage()为首页加载完后的跳转落地页方法,以供大家参考。

export class SNPushManager {private static manager: SNPushManager;public static instance(): SNPushManager {if (!SNPushManager.manager) {SNPushManager.manager = new SNPushManager();}return SNPushManager.manager;}private constructor() {}public pushLink:string = '';// push 跳转对应的落地页public pushSpecialPage() {if(this.pushLink.length > 0) {openProtocolURL(this.pushLink);// push完后需要置空,不然可能导致跳转两次this.pushLink = '';}}
}

2.热启动

与冷启动不同的时,热启动在onNewWant方法中,取出推送的落地页链接,因此时应用已处于运行阶段,可以直接完成跳转。代码中的openProtocolURL(pushLink),为本示例项目中处理router跳转的统一方法。

  onNewWant(want: Want): void {let pushLink: string = (want.parameters as Record<string, string>)['uri'] || '';hilog.info(0x0000, 'testTag', 'Get message data successfully: %{public}s', JSON.stringify(want.parameters));//跳转落地页openProtocolURL(pushLink);}

结语

通过以上步骤,即可完成HarmonyOS推送开发,以供大家参考学习。HarmonyOS的SDK还在不断迭代完善中,截止本文发表前,该步骤和集成方法是可行的。由于首次接触HarmonyOS的推送,文中如有不足或者错误的地方,欢迎大家指出,一起学习提高。

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

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

相关文章

JAVA妇产科专科电子病历系统源码,前端框架:Vue,ElementUI

JAVA妇产科专科电子病历系统源码&#xff0c;前端框架&#xff1a;Vue&#xff0c;ElementUI孕产妇健康管理信息管理系统是一种将孕产妇健康管理信息进行集中管理和存储的系统。通过建立该系统&#xff0c;有助于提高孕产妇健康管理的效率和质量&#xff0c;减少医疗事故发生的…

新华三通用大模型算力底座方案:为AI时代注入强大动力

在人工智能技术日新月异的今天&#xff0c;大模型作为推动AI进步的重要驱动力&#xff0c;是百行百业不断追逐的热点。大模型以其强大的泛化能力、卓越的模型效果和广泛的应用场景&#xff0c;正改变着人工智能的未来。作为国内领先的ICT解决方案提供商&#xff0c;新华三集团凭…

Linux kfence使用与实现原理

0 背景 为了更好的检测linux kernel中内存out-of-bounds、mem-corruption、use-after-free、invaild-free等问题&#xff0c;调研了kfence功能&#xff08;该功能在linux kernel 5.12引入&#xff09;&#xff0c;帮助研发更好的分析与定位这类内存错误的问题。 一、kfence介…

【ES】--Elasticsearch的Nested类型介绍

目录 一、问题现象二、普通数组类型1、为什么普通数组类型匹配不准?三、nested类型四、nested类型查询操作1、只根据nested对象内部数组条件查询2、只根据nested对象外部条件查询3、根据nested对象内部及外部条件查询4、向nested对象数组追加新数据5、删除nested对象数组某一个…

2025中国淄博化工展|淄博化工技术展|淄博化工装备展

CTEE2025第九届中国&#xff08;淄博&#xff09;化工技术装备展览会 时间&#xff1a;2025年5月16-18日 地点&#xff1a;山东淄博国际会展中心 主办单位:山东省机械工业科学技术协会 青岛蓝博国际会展有限公司 众所周知&#xff0c;山东省是我国化工大省。2023年上半年&am…

Go GMP:并发编程实践

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

0053__CancelIO的作用:防止为发送的数据丢失

CancelIO的作用&#xff1a;防止为发送的数据丢失-CSDN博客 cancelIoEx 函数 (ioapiset.h) - Win32 apps | Microsoft Learn

【Java】Logbook优化接口调用日志输出,优雅!

logbook 简介 很多人可能没有接触过 logbook&#xff0c;但它的确是一个很好用的日志框架。引用官网的介绍 Logbook 是一个可扩展的 Java 库&#xff0c;可以为不同的客户端和服务器端技术启用完整的请求和响应日志记录。它通过以下方式满足了特殊需求&#xff1a; 允许 Web 应…

计算机网络期末复习4(武夷学院版)

第四章 网络层 1、网际协议IP以及配套协议&#xff08;书P119&#xff09; 网际协议&#xff08;IP&#xff09;&#xff1a;IP协议是网络层的核心协议&#xff0c;负责数据包的编址和路由。它定义了数据包的格式和处理规则。 配套协议&#xff1a;地址解析协议ARP&#xf…

【工具】VS Code使用global插件实现代码跳转

&#x1f41a;作者简介&#xff1a;花神庙码农&#xff08;专注于Linux、WLAN、TCP/IP、Python等技术方向&#xff09;&#x1f433;博客主页&#xff1a;花神庙码农 &#xff0c;地址&#xff1a;https://blog.csdn.net/qxhgd&#x1f310;系列专栏&#xff1a;善假于物&#…

粤港联动,北斗高质量国际化发展的重要机遇

今年是香港回归27周年&#xff0c;也是《粤港澳大湾区发展规划纲要》公布5周年&#xff0c;5年来各项政策、平台不断为粤港联动增添新动能。“十四五”时期的粤港澳大湾区&#xff0c;被国家赋予了更重大的使命&#xff0c;国家“十四五”《规划纲要》提出&#xff0c;以京津冀…

时序约束(二): input delay约束和output delay约束

一、input delay约束 在千兆以太网数据收发项目中&#xff0c;RGMII的数据输入方式为DDR&#xff0c;源同步输入方式&#xff0c;可以用之前提到的分析模型进行约束。 在时序约束原理中我们提到&#xff0c;input delay约束的就是发射沿lunch到数据有效的延时&#xff0c;根据…

Vue 3中 <script setup> 与生命周期钩子函数的详细解析

Vue 3中 <script setup> 与生命周期钩子函数的详细解析 Vue 3 引入了 <script setup> 语法糖&#xff0c;这是一种简化和集成组件逻辑的新方式。尽管 <script setup> 简化了组件的编写&#xff0c;但仍然可以利用 Vue 提供的生命周期钩子函数来管理组件的生…

【光伏开发】光伏项目开发流程

光伏项目作为可再生能源领域的重要组成部分&#xff0c;其开发过程涉及多个环节&#xff0c;从项目初期的可行性研究到后期的运营维护&#xff0c;每一步都至关重要。本文将按照项目确认、前期阶段、中期阶段、后期阶段的顺序&#xff0c;详细介绍光伏项目的开发流程。 一、项…

Rust 基础教程

Rust 编程语言教程 Rust是一门注重安全、并发和性能的系统编程语言。本文将从Rust的基本语法、常用功能到高级特性&#xff0c;详细介绍Rust的使用方法。 目录 简介环境配置基础语法 变量和常量数据类型函数控制流 所有权和借用 所有权借用 结构体和枚举 结构体枚举 模块和包…

一文搞懂 java 线程池:基础知识

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 …

Linux:网络基础1

文章目录 前言1. 协议1.1 为什么要有协议&#xff1f;1.2 什么是协议&#xff1f; 2. 网络2.1 网络通信的问题2.2 网络的解决方案——网络的层状结构2.3 网络和系统的关系2.4 网络传输基本流程2.5 简单理解IP地址2.6 跨网络传输 总结 前言 在早期的计算机发展中&#xff0c;一开…

【云计算】阿里云、腾讯云、华为云平台数据库对比

目录 一、云数据库关键信息调研对比 二、详细功能 1、阿里云RDS 2、腾讯云RDS 3、华为云RDS 一、云数据库关键信息调研对比 云平台支持数据库部署对比支持功能备注阿里云 Mysql、Postgresql等 特有数据库&#xff1a;PolarDB&#xff0c;适配mysql 基础-单节点账号管…

实现渐变字体的方案

需要注意&#xff0c;这个切图是把一整块&#xff0c;都切出来做的。所以需要用span&#xff0c;不能是div 还有描边的话&#xff0c;scale会有边距缩放的问题&#xff0c;描边就用font weight 来实现 style{{ background: "var(--Linear, linear-gradient(96deg, #fff…

【华为战报】5月、6月HCIP考试战报!

华为认证&#xff1a;HCIA-HCIP-HCIE 点击查看&#xff1a; 【华为战报】4月 HCIP考试战报&#xff01; 【华为战报】2月、3月HCIP考试战报&#xff01; 【华为战报】11月份HCIP考试战报&#xff01; 【HCIE喜报】HCIE备考2个月丝滑通关&#xff0c;考试心得分享&#xff…