搜狐新聞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.pswp.cn/diannao/39391.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/39391.shtml
英文地址,請注明出處:http://en.pswp.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…