搜狐新闻HarmonyOS Push开发实践

news2024/9/20 17:19:52

214825ffd1b3f4edc761c21b32ebcbd7.gif

本文字数:1795字

预计阅读时间:15分钟


01

背景

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

5e9e89a697e1351e67d5065fe384e9b5.jpeg

推送作为新闻类应用的重要组成部分,我们将其纳入到二期功能开发中。本文将推送集成过程中的步骤和经验分享给大家。

02

开发环境

IDE:DevEco Studio NEXT Developer Beta2 Build Version: 5.0.3.502, built on July 28, 2024

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

03

集成步骤

1.生成签名证书

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

(1)生成p12证书

432584fd5619d7f73594a0ec71576b7e.png

Key Store File:设置密钥库文件存储路径,并填写p12文件名; Alias:密钥的别名信息,用于标识密钥名称。请记住该别名,后续签名配置需要使用; Validity:证书有效期,默认25年; Certificate:输入证书基本信息,如组织、城市或地区、国家码等;

(2)生成CSR证书

6ddd6932a63c88e0128930a57201169a.png

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

a2776eb13c193071a500e5b807cae3a8.jpeg

2.申请开发和发布证书

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

d1df9dd1ff05918d34f82b5c7aa9c213.png

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

0fa0f0b7d305d9b34dec85c836f51dc3.png

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

00912a939b58c48246370c36ae22eb34.png

3.申请开发和发布Profile

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

d9c6d282265e4e2bc5f5193293739d2e.png

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

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

71158b5de01fda0bbb81103e8d85b56e.png

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

31421f26e4c395bfb9f930e9c885e8f3.png

5.开通推送服务

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

d0f2b941e86013fa8a4846a2790c0d3a.png

6.配置Client ID和action

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

aaec81de05c7f2ae2c92ae1c77544582.png

其中client_id可在AppGallery Connect中查看,action值自定义,但是要和服务端推送消息体中action值保持一致。

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)});
      });

bef8b8ed31f5cb2eed4f7910b275071d.png

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);
    }
  }

45f5d30c87b8025ea533131aa681389f.png

将获取到的pushToken在合适的时机上传至应用服务端。

9.收到推送

(1)冷启动

通过EntryAbility文件中的onCreate方法,want.parameters方法可以获取到推送的详细数据。在搜狐新闻中,跳转的落地页链接存放在uri字段中,拿到该链接,我们将它暂存在一个单例对象中,在首页加载完后,从该单例对象,取出链接,完成落地页跳转动作。

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);
      this.pushLink = '';
    }
  }
}

(2)热启动

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

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);
  }

10.推送消息体

为了方便更好的完成推送的集成开发,大家可以参照搜狐新闻的服务端发送push时的消息体结构:

{
 "pushOptions": {
  "testMessage": true
 },
 "payload": {
  "notification": {
   "category": "MARKETING",
   "title": "搜狐新闻",
   "body": "推送内容",
   "clickAction": {
    "actionType": 1,
    "data": {
     "uri": "端内跳转链接"
    },
    "action": "和客户端action保持一致"
   }
  }
 },
 "target": {
  "token": [
   "push token"
            ]
 }
}

其中testMessage在开发阶段设置为ture,测试阶段每日上限1000条,上架商店后为false。action需要和前文中客户端的action保持一致,除去用户订阅、IM消息,新闻类的推送每天同一用户上限5条。

04

结语

通过以上步骤,即可完成HarmonyOS推送开发。HarmonyOS的SDK还在不断迭代完善中,截止本文发表前,该步骤和集成方法尚未变更,搜狐新闻HarmonyOS二期也已经成功上架华为商店。文中如有不足或者错误的地方,欢迎大家指出,一起学习提高。鸿蒙千帆起,希望大家抓住机遇,迎接挑战。

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

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

相关文章

【手撕OJ题】——141/142. 环形链表

目录 &#x1f552; 题目 Ⅰ⌛ 方法① - 快慢指针&#x1f552; 面试题&#x1f552; 题目 Ⅱ⌛ 方法① - 快慢指针⌛ 方法② - 转换为链表相交问题 &#x1f552; 题目 Ⅰ &#x1f50e; 141. 环形链表【难度&#xff1a;简单&#x1f7e2;】 给你一个链表的头节点 head &am…

【Electron】桌面应用开发electron-builder打包报错问题处理

Electron 桌面应用开发electron-builder打包过程中各种报错问题处理 前一篇有写过 Electron 桌面应用开发快速入门到打包Windows应用程序 在安装到打包的整个过程中&#xff0c;我们都会遇到很多诡异的问题&#xff0c;接下来我将介绍我遇到的几个问题的解决方案 一、拉包的时…

普元EOS-微前端实现路由

1 前言 EOS微前端已经对路由进行了封装&#xff0c;内置了 $router 对象&#xff0c;直接使用就实现了路由。 2 实现代码 this.$router.push({ path: /a/b }) 由于这些就是普通的路由对象的封装&#xff0c;就不过多描述使用方法。 有兴趣的同学可自行百度了解 vue router对…

CAAC执照:无人机飞手培训就业组装技术很重要

一、CAAC执照概述 CAAC&#xff08;中国民用航空局&#xff09;颁发的无人机执照&#xff0c;全称为《民用无人机操控员执照》&#xff0c;是无人机行业中最权威和含金量最高的证书。考取该执照后&#xff0c;无人机飞手可以合法地申请空域、航线&#xff0c;并从事无人机相关…

【动态规划】简单多状态 dp 问题

简单多状态 dp 问题 1.面试题 17.16. 按摩师2.打家劫舍 II3.删除并获得点数4.粉刷房子4.买卖股票的最佳时机含冷冻期5.买卖股票的最佳时机含手续费6.买卖股票的最佳时机 III7.买卖股票的最佳时机 IV 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1…

前端技术(四)—— 最经典Node.JS全套教程

一、node简介 1. 浏览器中的 JavaScript 的组成部分 2. 思考&#xff1a;为什么 JavaScript 可以在浏览器中被执行 3.思考&#xff1a;为什么 JavaScript 可以操作 DOM 和 BOM 4. 浏览器中的 JavaScript 运行环境 5. 思考&#xff1a;JavaScript 能否做后端开发 6. Node.js介绍…

MySQL 的半同步模式

目录 1 半同步简介: 解决主从数据一致性问题 2 实现半同步模式实践操作 2.1 MASTER 2.2 SLAVE 1 2.3 SLAVE 2 2.4 查看client链接状态 2.5 SLAVE 服务器故障模拟 2.5.1 停止 SLAVE 的 IO_THREAD 2.5.2 查看SLAVE 的IO线程是否关闭 2.5.3 查看 MASTER 上 client 的连接状态…

专业视频编辑和制作软件Adobe Media Encoder(ME)win/mac下载安装和软件介绍

一、软件概述 1.1 软件简介 Adobe Media Encoder&#xff08;ME&#xff09;是由Adobe公司开发的一款专业视频编辑和制作软件&#xff0c;全称为Media Encoder&#xff0c;是Creative Cloud套件中的一个重要组件。Adobe ME以其强大的视频编码、转码、调整、剪辑、合成等功能&…

解决git checkout -b 拉取远端某分支到本地时报错

问题描述 日常开发场景中&#xff0c;经常会出现切分支的情况&#xff0c;所以git checkout 命令是非常高频的 git checkout -b feature/xxx默认情况下&#xff0c;这条命令是基于当前所在分支来开辟新分支feature/xxx 但是&#xff0c;还有一些情况&#xff0c;我们需要基于…

比Maven快2~10倍的编译工具mvnd简介与实战

概述 maven-mvnd&#xff0c;可简称&#xff08;或缩写&#xff09;mvnd&#xff0c;the Maven Daemon。Apache Maven团队借鉴Gradle和Takari后开发的更快的构建工具。mvnd内嵌Maven&#xff0c;开发者可无缝从Maven迁移到mvnd。 参考资料&#xff1a;GitHub。 mvnd中会启动…

C++ | Leetcode C++题解之第368题最大整除子集

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> largestDivisibleSubset(vector<int>& nums) {int len nums.size();sort(nums.begin(), nums.end());// 第 1 步&#xff1a;动态规划找出最大子集的个数、最大子集中的最大整数vect…

『基础』线性代数-1行列式

行列式是什么-运算规则 排列&#xff1a;不同的 n 元排列共有 n! 个 逆序&#xff1a;小数排在大数后面&#xff0c;叫逆序&#xff1b;一个排列中逆序的总和叫做这个排列的逆序数&#xff0c;记为 τ ( j 1 , . . . , j n ) \tau(j_1,...,j_n) τ(j1​,...,jn​) 逆序数的计…

MySQL笔记01: MySQL入门_1.2 MySQL下载安装与配置

2.2 MySQL下载安装与配置 2.2.1 MySQL下载 MySQL中文官网&#xff1a;https://www.mysql.com/cn/ MySQL英文官网&#xff1a;https://www.mysql.com/ MySQL官网下载地址&#xff1a;https://www.mysql.com/downloads/ &#xff08;1&#xff09;点击“MySQL Community (GPL) Do…

WPF—画刷(使用画刷实现背景颜色渐变效果)

WPF—画刷(使用画刷实现背景颜色渐变效果) 在WPF中我们可以使用画刷来对我们的页面做出各种炫丽的效果&#xff0c;列如渐变&#xff0c;渲染等&#xff0c; 下列就为大家分享2个渐变效果示例&#xff1a; 实例1(由内到外) <Grid><!--背景颜色渐变 画刷--><G…

【项目】微服务及时通讯系统:编写核心类

文章目录 前言1. 核心数据结构1.1 用户信息1.2 会话信息1.3 消息信息 2. 建立目录3. 编写代码3.1 用户信息3.2 会话信息3.3 消息信息3.4 工具函数 4. data.h 完整代码总结 前言 在构建现代微服务架构的即时通讯系统时&#xff0c;核心数据结构的设计是至关重要的。它们不仅决定…

聊一聊AI能够应用在哪些地方

AI大模型的应用场景极为广泛&#xff0c;涵盖了众多行业和领域&#xff0c;以下是一些主要的应用场景&#xff1a; 1. 自然语言处理&#xff08;NLP&#xff09; 对话系统&#xff1a;如智能客服、虚拟助手等&#xff0c;通过自然语言与用户进行交互&#xff0c;提供信息查询…

探索AI大模型量化前沿技术:引领智能计算新潮流

大型语言模型&#xff08;LLMs&#xff09;通常因为体积过大而无法在消费级硬件上运行。这些模型可能包含数十亿个参数&#xff0c;通常需要配备大量显存的GPU来加速推理过程。 因此越来越多的研究致力于通过改进训练、使用适配器等方法来缩小这些模型的体积。在这一领域中&am…

【CAN总线测试】——通讯相关诊断测试

从0开始学习CANoe使用 从0开始学习车载测试 相信时间的力量 星光不负赶路者&#xff0c;时光不负有心人。 目录 1.节点超时故障 2.Busoff故障码测试 3.Busoff 状态下超时故障监测测试 4.欠压故障测试 5.过压故障测试 1.节点超时故障 用例编号 TG4_TC1 测试目的 检测D…

从零开始搭建 LVS 高可用集群 (单机)

从零开始搭建 LVS 高可用集群 (单机) 背景 从零开始搭建 LVS 高性能集群 (DR模式) 从零开始搭建 KeepalaivedLvs 高可用集群 &#xff08;Aliyun部署&#xff09; 经过前面2篇关于lvs集群部署文章&#xff0c;相信跟着部署文档&#xff0c;实际部署过集群的大家对lvs服务有了…

【html+css 绚丽Loading】000015 九转轮回珠

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽Loading&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495…