21、鴻蒙學習——使用App Linking實現應用間跳轉

簡介

使用App Linking進行跳轉時,系統會根據接口傳入的uri信息(HTTPS鏈接)將用戶引導至目標應用中的特定內容,無論應用是否已安裝,用戶都可以訪問到鏈接對應的內容,跳轉體驗相比Deep Linking方式更加順暢。


實現原理

  • App Linking在DeepLinking的基礎上增加了域名校驗環節,通過域名校驗,可幫助用戶消除歧義,識別合法歸屬于域名的應用,使鏈接更加安全可靠。

  • App Linking要求對于同一HTTPS網址,有應用和網頁兩種內容的呈現方式。當應用安裝時則優先打開應用去呈現內容;當應用未安裝時,則打開瀏覽器呈現Web版的內容。

目標方應用開發指導

1、登錄AppGallery Connect,點擊“我的項目”。

2、選擇「開發與服務」

3、在左側導航欄中選擇“增長->App Linking”,進入App Linking頁面,點擊“立即開通”。

4、如果項目此時未設置數據處理位置,在提示框內啟用數據處理位置和設置默認數據處理位置,點擊“確定”

5、進入“項目設置>常規”頁面,選擇創建的HarmonyOS應用,查看應用的APP ID,后續開發需要使用該ID。


?

在開發者網站上關聯應用

在開發者的網站域名服務器上做如下配置。后續當您配置該網站域名時,系統會通過此文件確認哪些應用才是合法歸屬于此域名的,使鏈接更加安全可靠。

1、創建域名配置文件applinking.json,內容如下:
?

{"applinking": {"apps": [{"appIdentifier": "1234567"}]}
}

說明:

  • appIdentifier填寫在AGC控制臺開通App Linking服務的步驟5展示的APP ID
  • 同一個網站域名可以關聯多個應用,只需要在“apps”列表里放置多個“appIdentifier”元素即可,其中每個“appIdentifier”元素對應每個應用

2、將配置文件放在域名服務器固定的目錄下:

https://domain.name/.well-known/applinking.json

例如:開發者的服務器域名為www.example.com,則必須將applinking.json文件放在如下位置:

https://www.example.com/.well-known/applinking.json


在AGC控制臺關聯網址域名

1、在左側導航欄中選擇”增長->App Linking",選擇“應用鏈接(API>=12適用)”頁簽,點擊“創建”

說明:

  • Harmony OS應用開發者僅需關注“應用鏈接(API>=12)”頁簽,其他頁簽為元服務或其他系統適用的配置,無需關注
  • 如果界面未展示“應用鏈接 (API>=12)”頁簽,請在右側的“自定義配置”中勾選

2、填寫在開發者網站上關聯應用的網址域名,例如:https://www.baidu.com。必須輸入精確的域名,不可輸入包含特殊字符的模糊網址。

說明:
不可以在域名后面加/,即不支持“https://www.example.com/”形式



3、設置完成后點擊“發布”,AGC會對該網站域名的配置文件所包含的應用與本項目內的應用列表進行交集校驗。

說明:應用鏈接發布完成后,如果距離上次更新超過24小時,系統會取域名服務器上重新獲取配置文件進行校驗。
例如:在4月7日17:21創建了應用鏈接,系統會在4月8日17:30去域名服務器上重新獲取配置文件,然后進行交集校驗,更新發布狀態

如果域名的配置文件中有應用存在本項目中,則發布成功,點擊“查看”可顯示該域名關聯的應用信息。

  • 如果異步校驗中,則狀態為“發布中”。
  • 如果配置文件中沒有任何應用在本項目中,則發布失敗,點擊“查看”可顯示發布失敗的原因。

在DevEco Studio中配置關聯的網站域名

在應用的module.json5文件中進行如下配置,以聲明應用關聯的域名地址,并開啟域名校驗開關。

  • “entities”列表中必須包含“entity.system.browsable”
  • "actions"列表中必須包含“ohos.want.action.viewData”
  • "uris"列表中必須包含“scheme”為“https”且“host”為域名地址的元素,可選屬性包含“path”、“pathStartWith”和“pathRegex”,具體參見“uris標簽說明”。
  • “donmainVerify”設置為true,表示開啟域名校驗開關

說明:skills標簽下默認包含一個skill對象,用于標識應用入口。應用跳轉鏈接不能在該skill對象中配置,需要創建獨立的skill對象,否則會導致配置無法生效。

例如,聲明應用關聯的域名是www.baidu.com,則需進行如下配置。

{"module": {"abilities": [{"name": "EntryAbility","srcEntry": "./ets/entryability/EntryAbility.ts","icon": "$media:icon","label": "$string:EntryAbility_label",// 請將exported配置為true;如果exported為false,僅具有權限的系統應用能夠拉起該應用,否則無法拉起應用"exported": true,"startWindowIcon": "$media:icon","startWindowBackground": "$color:start_window_background","skills": [{"entities": ["entity.system.home"],"actions": [// API19及以上版本須配置為"ohos.want.action.home",API18及以下版本請配置為"action.system.home""ohos.want.action.home"]},{"entities": [// entities必須包含"entity.system.browsable""entity.system.browsable"],"actions": [// actions必須包含"ohos.want.action.viewData""ohos.want.action.viewData"],"uris": [{// scheme須配置為https"scheme": "https",// host須配置為關聯的域名"host": "www.example.com",// path可選,表示域名服務器上的目錄或文件路徑,例如www.example.com/path1中的path1// 如果應用只能處理部分特定的path,則此處應該配置應用所支持的path,避免出現應用不能處理的path鏈接也被引流到應用中的問題"path": "path1"}],// domainVerify須設置為true"domainVerify": true}// 若有其他跳轉能力,如推送消息跳轉、NFC跳轉,可新增一個skill對象,防止與App Linking業務沖突]}]}
}

處理傳入的鏈接

在應用的Ability(如EntryAbility)的onCreate()或者onNewWant()聲明周期回調中添加如下代碼,以處理傳入的鏈接。

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { url } from '@kit.ArkTS';export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {// 從want中獲取傳入的鏈接信息。// 如傳入的url為:https://www.example.com/programs?action=showalllet uri = want?.uri if (uri) {// 從鏈接中解析query參數,拿到參數后,開發者可根據自己的業務需求進行后續的處理。let urlObject = url.URL.parseURL(want?.uri);let action = urlObject.params.get('action')// 例如,當action為showall時,展示所有的節目。if (action === "showall"){//...}//...}}
}

若要根據鏈接參數啟動UIAbility的指定頁面組件,請參考“啟動UIAbility的指定頁面”。
?

拉起方實現跳轉指導

支持App Linking的應用可以通過如下方式被拉起:
?

1、通過openLink接口拉起。

拉起方應用通過UIAbilityContext.openLink()接口,傳入目標應用的鏈接,拉起目標應用。

openLink接口提供了兩種拉起目標應用的方式,開發者可根據業務需求進行選擇。

方式一:僅以App Linking的方式打開應用。

將appLinkingOnly參數設置為true,若有App Linking匹配的應用,則直接打開應用。若無App Linking匹配的應用,則拋異常該開發者進行處理。

適用于無法打開目標應用時,開發者做了相應的異常處理。例如:拉起方應用集成了ArkWeb,當目標應用不存在時,可通過ArkWeb打開鏈接。

方式二:以App Linking 優先方式打開應用

將appLinkingOnly參數設置為false或者不傳,若有App Linking匹配的應用,則直接打開目標應用。若無App Linking匹配的應用,則嘗試以瀏覽器打開鏈接的方式打開應用。

適用于無法打開目標應用時,開發者未做任何處理。此時目標應用不存在時,會通過系統瀏覽器打開鏈接。

import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { GlobalContext } from '../common/GlobalContext';@Entry
@Component
struct Index {build() {Button('start link', { type: ButtonType.Capsule, stateEffect: true }).width('87%').height('5%').margin({ bottom: '12vp' }).onClick(() => {let context = GlobalContext.getContext();let link: string = "https://www.example.com/programs?action=showall";// 僅以App Linking的方式打開應用context.openLink(link, { appLinkingOnly: true }).then(() => {hilog.info(0x0000, 'testTag', `Succeeded in opening link.`);}).catch((error: BusinessError) => {hilog.error(0x0000, 'testTag', `Failed to open link, code: ${error.code}, message: ${error.message}`);});})}
}

2、通過系統瀏覽器或ArkWeb拉起

ArkWeb深度集成了App Linking的能力,當用戶在系統瀏覽器或者集成ArkWeb的應用的網頁上點擊某個鏈接時,若有鏈接匹配的應用,系統則會通過App Linking的能力優先拉起目標應用,并在應用內展示相應的內容。此機制有如下限制:

  • 如果用戶當前瀏覽的網頁的域名與點擊的App Linking鏈接的域名完全一致,則系統會繼續在系統瀏覽器或ArkWeb中打開該鏈接,以維持連貫的用戶瀏覽體驗。
  • 如果域名不完全一致(例如:example.com和app.example.com),則系統會通過App Linking能力優先拉起目標應用,并在應用內展示相應的內容。

參考:文檔中心?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/87362.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/87362.shtml
英文地址,請注明出處:http://en.pswp.cn/web/87362.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Cursor無限郵箱續費方法

1.注冊無限郵箱2925 2.“其他郵箱” 3.點擊左下角添加郵箱 4.管理員身份運行Windos PowerShell 5.輸入該指令并運行,修改機器碼 irm https://aizaozao.com/accelerate.php/https://raw.githubusercontent.com/yuaotian/go-cursor-help/refs/heads/master/scripts/…

LeetCode Hot100(圖論)

200. 島嶼數量 題意 給你一個由 1(陸地)和 0(水)組成的的二維網格,請你計算網格中島嶼的數量。 島嶼總是被水包圍,并且每座島嶼只能由水平方向和/或豎直方向上相鄰的陸地連接形成。 此外,你…

Ubuntu Gnome 安裝和卸載 WhiteSur-gtk-theme 類 Mac 主題的正確方法

WhiteSur-gtk-theme 是一個流行的 GNOME 桌面主題,可以讓 Ubuntu 的桌面環境看起來像 macOS。以下是安裝和卸載 WhiteSur-gtk-theme 的詳細步驟,包括解釋每個命令的作用。 一、安裝 WhiteSur-gtk-theme 1. 準備工作 在安裝主題之前,建議確…

如何在DataGear 5.4.1 中快速制作SQL服務端分頁的數據表格看板

DataGear 數據可視化分析平臺(http://datagear.tech/) 在新發布的5.4.1版本中,內置表格圖表新增了serverSidePaging選項,僅需通過簡單的配置,即可為表格添加服務端分頁、關鍵字查詢、排序功能。 本文以SQL數據集作為數…

股指期貨套保比例怎么算?

在金融市場里,套期保值(套保)是一種常見的風險管理手段,目的是通過期貨市場對沖現貨市場的風險。而套保比例(也叫套保比率)的計算,是套保操作的核心。簡單來說,套保比例就是“期貨頭…

邏輯回歸(Logistic Regression)算法詳解

文章目錄 一、邏輯回歸:從線性回歸到二分類的跨越1.1 邏輯回歸簡介1.2 Sigmoid函數:概率映射的數學本質1.3 參數 w w w 和 b b b 對Sigmoid的調控1.4 從線性回歸到分類1.5 決策邊界:從概率到類別(結合圖3、圖4) 二、…

HTTPS通信流程:SSL/TLS握手全解析

2021,2022,2023年1-8月看了很多技術書籍,現在想來忘了很多,用到的也不多,但是因為提前接觸過,所以很多新東西,接受起來,比預想的要容易些。最近突然想要回憶下HTTPS,居然…

SVG 在 VSCode 中的使用與優勢

SVG 在 VSCode 中的使用與優勢 引言 SVG(可縮放矢量圖形)是一種基于可擴展標記語言的圖形圖像格式,與傳統的位圖格式(如 JPEG 或 PNG)相比,SVG 圖像具有更高的靈活性和可縮放性。隨著前端開發領域的不斷發展,SVG 在網頁設計中的應用越來越廣泛。本文將介紹 SVG 在 Vis…

Ubuntu開放mysql 3306端口

Ubuntu開放mysql 3306端口 1. 檢查 UFW 防火墻規則2. 檢查 iptables 規則 1. 檢查 UFW 防火墻規則 sudo ufw status verbose | grep 3306若輸出包含 3306/tcp ALLOW,表示端口已開放(如下) ubuntuUbuntu2404:~$ sudo ufw status verbose | grep 3306 3306/tcp …

CentOS 卸載docker

1、停止docker服務 systemctl stop docker.socket systemctl stop docker systemctl stop containerd 2、列出已安裝的docker包 yum list installed | grep -i docker 輸出如下: containerd.io.x86_64 1.6.33-3.1.el7 docker-ce-stab…

MySQL數據庫----DML語句

目錄 DML-介紹SQL-DML-添加數據SQL-DML-修改數據SQL-DML-刪除數據 DML-介紹 DML英文全稱是 Data Manipulation Language(數據操作語言),用來對數據庫中表的數據記錄進行增刪改操作。 添加數據(INSERT) 修改數據(UPDATE&#xff…

Prompt:提示詞工程

前言在LLM大放異彩的今天,一個簡單的問題,可能就會引出一個方案,一篇散文,而驅動這一切的,正是輸入的“提示詞(Prompt)”Prompt工程就是:與大模型打交道時,如何更好地設計…

GSAP 動畫庫在 Vue3 項目中的使用總結

前言 GSAP(GreenSock Animation Platform)是目前最強大的 JavaScript 動畫庫之一,以其出色的性能和簡潔的API而聞名。本文將基于實際項目經驗,詳細介紹如何在 Vue3 項目中使用 GSAP 創建流暢、專業的動畫效果,包括核心…

【字節跳動】數據挖掘面試題0007:Kmeans原理,何時停止迭代

文章大綱 K-means 原理與迭代停止條件?? 一、K-Means核心思想🔁 二、迭代步驟詳解關鍵數學操作 ?? 三、何時停止迭代?Kmeans 算法實現代碼 ?? 四、面試常見擴展問題1. K值如何選擇?2. 初始質心影響結果嗎?3. 算法缺陷與改進…

209、長度最小的子數組

題目&#xff1a; 解答&#xff1a; 滑動窗口&#xff0c;左右指針指向窗口兩端&#xff0c;窗口為[left,right]&#xff0c;leftright時窗口只包含一個元素。 窗口內元素和sum>target時&#xff0c;left,推出左側一個元素;sum<target時&#xff0c;right&#xff0c;加…

關機精靈——自動化與便利性

文章目錄 背景目標實現下載 背景 自動化與便利性&#xff1a; 讓電腦在用戶無需值守或干預的情況下&#xff0c;在特定時間點&#xff08;倒計時結束&#xff09;或任務完成后自動關閉。節能與環保&#xff1a; 避免電腦在完成工作后或無人使用時繼續空耗電力。時間管理與健康…

L2CAP協議詳解:分段重組、QoS控制與多協議復用設計(面試寶典)

本文系統解析L2CAP協議的知識圖譜&#xff0c;掌握面試核心考點&#xff0c;并通過真題演練提升實戰能力。建議配合協議分析工具進行抓包實踐&#xff0c;加深對協議機制的理解。 一、L2CAP 在藍牙協議棧中的核心定位 L2CAP&#xff08;Logical Link Control and Adaptation P…

微軟服務器安全問題

微軟云服務器安全深度解析&#xff1a;挑戰、應對與未來展望——構建韌性“安全之盾”的持續博弈&#xff01; 在當今數字化時代&#xff0c;云計算已成為眾多企業和組織運行業務的核心基礎設施和“數字生命線”&#xff0c;而微軟云&#xff08;Azure&#xff09;作為全球領先…

后臺管理系統的誕生 - 利用AI 1天完成整個后臺管理系統的微服務后端+前端

AI創作系列(11)&#xff1a;后臺管理系統的誕生 - 利用AI 1天完成整個后臺管理系統的微服務后端前端 真實記錄&#xff1a;我決定為海貍IM添加一個后臺管理系統。從早上開始&#xff0c;到晚上結束&#xff0c;僅僅1天時間&#xff0c;我就完成了整個后臺管理系統的微服務后端和…

開發自動駕駛系統所需工具

硬件開發平臺 傳感器系統 環境感知工具包括&#xff1a; 激光雷達&#xff1a;通過發射激光脈沖并接收反射光來測量距離&#xff0c;構建點云數據以描繪周圍環境的三維結構。例如&#xff0c;Velodyne的VLP-16激光雷達每秒可發射約30萬次激光脈沖&#xff0c;生成高密度的點…