首页 > 其他分享 >HarmonyOS的连接艺术之六: 使用 Deep Linking,灵活定义链接规则

HarmonyOS的连接艺术之六: 使用 Deep Linking,灵活定义链接规则

时间:2024-10-20 13:11:12浏览次数:9  
标签:URL Deep Linking HarmonyOS common 应用 跳转

本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的技术细节,基于实际开发实践进行总结。
主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。
本文为原创内容,任何形式的转载必须注明出处及原作者。

Deep Linking 是一种基于 URL 链接的应用间跳转方式,它允许开发者定义任意形式的 scheme,实现灵活的应用间跳转。Deep Linking 适用于各种场景,例如应用内页面跳转、外部链接跳转等。

Deep Linking 简介

Deep Linking 是一种基于 URL 链接的应用间跳转方式,它允许开发者定义任意形式的 scheme,实现灵活的应用间跳转。Deep Linking 的特点如下:

  • 自定义 scheme:可以定义任意不包含特殊字符、非 ohos 开头的字符串,例如 "geo"、"weather" 等。
  • 支持自定义参数:可以在 URL 中添加自定义参数,传递数据给目标应用。
  • 无需域名校验:没有域名校验机制,容易被其他应用仿冒。

Deep Linking 的实现原理

Deep Linking 的实现原理如下:

  1. 目标应用在配置文件中注册 URL skill:目标应用需要在配置文件中声明它支持的 URL scheme、host 和 path 等信息,这样系统才能识别它。
  2. 拉起方应用在跳转接口中传入目标应用的 URL:拉起方应用需要构建一个符合目标应用 URL skill 格式的链接,并传入相应的跳转接口。
  3. 系统根据 URL 匹配目标应用并跳转:系统会根据 URL 中的 scheme、host 和 path 等信息,在已安装的应用中查找匹配项,并跳转到目标应用内的对应页面。

目标应用在配置文件中注册 URL skill

目标应用需要在 module.json5 配置文件的 skills 标签下注册 URL skill,声明它支持的 URL scheme、host 和 path 等信息。例如:

{
  "module": {
    "abilities": [
      {
        "skills": [
          {
            "uris": [
              {
                "scheme": "geo",
                "host": "example.com",
                "path": "path1"
              }
            ]
          }
        ]
      }
    ]
  }
}

URL skill 参数说明

参数 类型 说明
scheme string URL 协议名称,例如 "geo"、"weather" 等
host string URL 域名或 IP 地址
port string URL 端口号
path string URL 路径
pathStartWith string URL 路径前缀
pathRegex string URL 路径正则表达式
linkFeature string 应用的功能类型,例如 "FileOpen"、"Navigation" 等

拉起方应用实现应用跳转

1. 使用 openLink 接口
openLink 接口可以用于打开 Deep Linking 链接,并设置选项参数,例如 appLinkingOnlyparameters 等。
示例代码

import { common } from '@ohos.app.ability.common';
export default class EntryAbility extends common.UIAbility {
  onWindowStageCreate(windowStage: common.WindowStage) {
    const context = this.getContext(this) as common.UIAbilityContext;
    const link: string = "geo:37.7749,-122.4194"; // 地点坐标
    const options: common.OpenLinkOptions = {
      appLinkingOnly: false // 允许使用 Deep Linking 跳转
    };
    context.openLink(link, options);
  }
}

2. 使用 startAbility 接口
startAbility 接口可以用于打开 Deep Linking 链接,并设置选项参数,例如 abilityNamemoduleName 等。
示例代码

import { common } from '@ohos.app.ability.common';
export default class EntryAbility extends common.UIAbility {
  onWindowStageCreate(windowStage: common.WindowStage) {
    const context = this.getContext(this) as common.UIAbilityContext;
    const want: common.Want = {
      action: 'ohos.want.action.viewData',
      uri: "geo:37.7749,-122.4194",
      entities: ["entity.system.browsable"],
      actions: ["ohos.want.action.viewData"]
    };
    context.startAbility(want);
  }
}

3. 使用 Web 组件
Web 组件可以通过拦截 onLoadIntercept 回调来处理 Deep Linking 链接,实现应用跳转。
示例代码

import { webview } from '@ohos.arkweb';
export default class WebComponent {
  controller: webview.WebviewController = new webview.WebviewController();
  build() {
    this.controller.onLoadIntercept((event) => {
      const url: string = event.data.getRequestUrl();
      if (url.startsWith("geo:")) {
        // 跳转到地图应用
      }
      return true; // 阻止页面加载
    });
  }
}

举(N)个栗子

示例 1:Deep Linking 接入示例

import { common } from '@ohos.app.ability.common';
export default class EntryAbility extends common.UIAbility {
  onWindowStageCreate(windowStage: common.WindowStage) {
    const context = this.getContext(this) as common.UIAbilityContext;
    const want: common.Want = {
      action: 'ohos.want.action.viewData',
      uri: "geo:37.7749,-122.4194",
      entities: ["entity.system.browsable"],
      actions: ["ohos.want.action.viewData"]
    };
    context.startAbility(want);
  }
}

示例 2:Deep Linking 跳转示例

import { common } from '@ohos.app.ability.common';
import { url } from '@ohos.arkts';
export default class EntryAbility extends common.UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    const uri = want?.uri;
    if (uri) {
      const urlObject = url.URL.parseURL(want.uri);
      const action = urlObject.params.get('action');
      if (action === "showall") {
        // 跳转到应用内的“所有节目”页面
      }
    }
  }
}

总结
使用 Deep Linking 实现应用间跳转是一种灵活的方式,它允许开发者定义任意形式的链接规则,实现个性化的应用间跳转。实际开发中需要按照步骤配置 Deep Linking 接入,并在目标应用中处理传入的链接,才能实现 Deep Linking 功能。

标签:URL,Deep,Linking,HarmonyOS,common,应用,跳转
From: https://www.cnblogs.com/samex/p/18487152

相关文章

  • HarmonyOS的连接艺术之三:拉起指定类型的应用,打造个性化体验
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在有些场景下,我们希望用户能够选择打......
  • HarmonyOS的连接艺术之二:精准控制目标应用
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在某些场景下,我们希望应用能够精准控......
  • HarmonyOS的连接艺术之四:便捷访问系统功能
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。HarmonyOS系统提供了丰富的系统应用,......
  • HarmonyOS的连接艺术之一:让应用之间无缝协作
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。应用之间协作的需求越来越普遍。例如,......
  • HarmonyOS:保存你的应用数据
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(MaoistLearning)➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/......
  • Deepsort算法详解
    多目标跟踪的主要步骤:获取原视频帧利用目标检测器对视频帧中的目标进行检测将检测到的目标的框中的特征提取出来,该特征包括表观特征(方便特征对比避免IDswitch)和运动特征(运动特征方便卡尔曼滤波对其进行预测)表观特征与运动特征:表观特征:描述目标的外观信息,通常包括颜色、纹......
  • HarmonyOS:使用HTTP访问网络
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(MaoistLearning)➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/......
  • HarmonyOS:Navigation组件的使用
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(MaoistLearning)➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/......
  • HarmonyOS Stage 模型:进程、线程与配置文件之浅析
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。HarmonyOS的Stage模型为开发者提供......
  • HarmonyOS设置组件导航
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(MaoistLearning)➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/......