HarmonayOS通过应用链接拉起指定应用

简介: 本节介绍通过应用链接跳转拉起指定应用的方法。应用链接是将用户引导至应用内特定位置或相关网页的URL,分为Deep Linking和App Linking两种方式。Deep Linking支持自定义scheme,但缺乏域名校验;App Linking限定scheme为https,并增加校验机制以确保目标应用的安全性。文中演示了创建目标应用“ArkTSDeepLinkingTarget”和拉起应用“ArkTSDeepLinkingStartup”的具体步骤,包括配置module.json5文件和编写代码实现跳转功能。更多学习资源可参考《跟老卫学HarmonyOS开发》等教程。

本节主要介绍如何通过应用链接跳转的方式拉起指定应用。

应用链接

应用链接是指可以将用户引导至应用内特定位置或相关网页的URL,常见的格式如下。

scheme://host[:port]/path

应用链接运作机制如下。

  • 目标应用在配置文件中注册自己的URL,并对外提供URL。
  • 拉起方应用在跳转接口中传入目标应用的URL等信息。
  • 系统接收到URL等相关信息,会寻找对应匹配项,并跳转至目标应用。

应用链接分类

按照应用链接的scheme以及校验机制的不同,可以分为Deep Linking与App Linking两种方式。

  • Deep Linking:是一种通过链接跳转至应用特定页面的技术,其特点是支持开发者定义任意形式的scheme。由于缺乏域名校验机制,容易被其他应用所仿冒。
  • App Linking:其限定了scheme必须为https,同时通过增加域名校验机制,可以从已匹配到的应用中筛选过滤出目标应用,消除应用查询和定位中产生的歧义,直达受信的目标应用。

拉起指定应用

接下来演示如何通过应用链接跳转的方式拉起指定应用。

1. 创建目标应用

创建名为“ArkTSDeepLinkingTarget”的目标应用。目标应用是被拉起的应用。

修改index.ets内容如下:

@Entry
@Component
struct Index {
  @State message: string = '目标应用';
  build() {
    RelativeContainer() {
      Text(this.message)
        .id('HelloWorld')
        .fontSize($r('app.float.page_text_font_size'))
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
    }
    .height('100%')
    .width('100%')
  }
}

2. 创配置目标应用module.json5文件

为了能够支持被其他应用访问,目标应用需要在module.json5配置文件中配置skills标签。

skills标签下默认包含一个skill对象,用于标识应用入口。应用跳转链接不能在该skill对象中配置,需要创建独立的skill对象。如果存在多个跳转场景,需要在skills标签下创建不同的skill对象,否则会导致配置无法生效。

Deep Linking中的scheme取值支持自定义,可以为任意不包含特殊字符、非ohos开头的字符串。通常不为https、http、file,否则会拉起默认的系统浏览器。

配置如下:

{
  "module": {
    // ...省略非核心内容
    "abilities": [
      {
        // ...省略非核心内容
        "skills": [
          {
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "action.system.home"
            ]
          },
          // 新增一个skill对象,用于跳转场景。如果存在多个跳转场景,需配置多个skill对象
          {
            "actions": [
              // actions不能为空,actions为空会造成目标方匹配失败。
              "ohos.want.action.viewData"
            ],
            "uris": [
              {
                // scheme必选,可以自定义,以link为例,需要替换为实际的scheme
                "scheme": "link",
                // host必选,配置待匹配的域名
                "host": "waylau.com"
              }
            ]
          }
        ]
      }
    ],
    // ...省略非核心内容
  }
}

3. 创建拉起应用

创建名为“ArkTSDeepLinkingStartup”的拉起应用。拉起应用的作用是为了拉起目标应用。

修改index.ets内容如下:

import { common, OpenLinkOptions } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
const TAG: string = '[ArkTSDeepLinkingStartup]';
const DOMAIN_NUMBER: number = 0xFF00;
@Entry
@Component
struct Index {
  @State message: string = '启动目标应用';
  build() {
    RelativeContainer() {
      Text(this.message)
        .id('HelloWorld')
        .fontSize($r('app.float.page_text_font_size'))
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
        .onClick(() => {
          let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
          let link: string = "link://waylau.com";
          let openLinkOptions: OpenLinkOptions = {
            //跳转目标应用(如果有多个符合条件的应用时,展示应用选择弹框)
            appLinkingOnly: false
          };
          try {
            context.openLink(link, openLinkOptions)
              .then(() => {
                hilog.info(DOMAIN_NUMBER, TAG, 'open link success.');
              }).catch((err: BusinessError) => {
              hilog.error(DOMAIN_NUMBER, TAG, `open link failed. Code is ${err.code}, message is ${err.message}`);
            });
          } catch (paramError) {
            hilog.error(DOMAIN_NUMBER, TAG, `Failed to start link. Code is ${paramError.code}, message is ${paramError.message}`);
          }
        })
    }
    .height('100%')
    .width('100%')
  }
}

在上述代码中,在openLink接口的link字段中传入目标应用的URL信息,并将options字段中的appLinkingOnly配置为false。

4. 运行应用

在虚拟机上先运行目标应用以后,而后将应用关闭,如图所示。这样就确保目标应用已经在模拟机上安装了。

其次,运行拉起应用,如图所示。点击拉起应用的文本以触发启动目标应用事件。

拉起应用的效果如下图所示。

参考引用

更多示例源码、HarmonyOS学习资料可见


目录
相关文章
|
8月前
|
人工智能 搜索推荐 数据挖掘
原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力
原生鸿蒙版小艺APP成功接入DeepSeek-R1,为HarmonyOS用户带来更智能高效的交互体验。通过此次升级,用户在编程、学习和工作中的问题可迅速获得专业解答。同时,此举为HarmonyOS应用开发者提供了新的技术参考,激发了更多创新应用场景的开发,助力打造差异化竞争优势,推动HarmonyOS生态繁荣发展。
656 68
原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力
|
8月前
|
开发者 索引
HarmonyOS使用系统图标
HarmonyOS图标符号是系统内置的图标资源库,开发者可通过SymbolGlyph和SymbolSpan组件高效引用图标资源,简化开发流程并确保应用与系统设计风格一致。通过`$r('sys.symbol.resource_name')`访问系统图标资源,支持调整大小、颜色、粗细、渲染策略及动效。更多示例和学习资料详见官方文档和教程。
371 2
HarmonyOS使用系统图标
|
7月前
《跟老卫学仓颉编程语言开发》实战:猜数字游戏
本文介绍了用仓颉语言开发的一个简单猜数字游戏,综合运用了流程控制、标准输入、字符串操作和整型比较等知识。程序生成1到100之间的随机整数,用户通过标准输入猜数字,程序提示“太大”或“太小”,直至猜中并显示祝贺信息。代码使用`std.console`包处理输入,`std.convert`包实现字符串转整型,通过`if-else`判断大小,`while`循环支持多次输入。示例源于《跟老卫学仓颉编程语言开发》,源码可在其GitHub仓库获取。
237 0
|
9月前
|
人工智能 安全 JavaScript
《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》学习笔记——HarmonyOS纯血鸿蒙新特性
HarmonyOS 3.1引入了Stage模型,增强ArkTS语言、应用程序框架、Web、ArkUI等子系统能力。新增功能包括Ability框架的Stage开发模型、ArkUI组件能力提升、应用包管理接口、公共基础类库支持Buffer读写、Web服务文档预览及编辑、图形图像编解码支持等。从API 9开始,Stage模型成为主要开发模型,支持更灵活的应用生命周期管理和窗口调度,提供更好的组件与窗口弱耦合体验。此外,HarmonyOS NEXT开发者预览版实现了全面自研,被称为“纯血鸿蒙”,具备自主可控、高度弹性、更强的安全性和隐私保护特性。
485 21
|
12月前
|
数据采集 机器学习/深度学习 存储
大数据的处理流程
【10月更文挑战第16天】
1045 2
|
7月前
|
供应链 API 开发者
1688商品列表API接口详解
1688是国内知名的批发采购平台,提供海量商品资源。开发者通过1688商品列表API可获取商品的名称、价格、销量等信息,支持构建电商数据分析工具、比价应用等。接口采用HTTP GET/POST请求,需提供关键词、页码、每页数量等必填参数,响应数据包含商品列表及总记录数。示例代码展示了如何使用Python进行请求和处理响应。供稿者:Taobaoapi2014。
|
8月前
|
搜索推荐 新能源 数据处理
鸿蒙原生应用再添新丁!北京广电、充电管家、有我帮 入局鸿蒙
HarmonyOS 生态持续扩展,近期北京广电、充电管家、有我帮等多款应用上架,同花顺、爱奇艺等应用也进行了功能更新。北京广电借助鸿蒙的分布式能力,实现多设备协同,提升用户媒体消费体验;充电管家则优化了新能源汽车的充电服务,带来更便捷的智能化体验。这些应用的加入,标志着鸿蒙生态在传媒和生活服务领域的深度融合与快速发展,为用户带来全场景智慧生活的全新体验。
167 6
|
11月前
|
存储 数据可视化
如何高效构建团队知识库?试试看板工具
团队知识管理是提升工作效率的关键。知识管理专家Tiago Forte提出的“第二大脑”概念,强调通过收集、整理、提炼和表达四步法,将零散信息转化为系统知识。教你如何用看板工具构建团队知识库。
227 0
如何高效构建团队知识库?试试看板工具
|
存储 关系型数据库 MySQL
[重磅更新]PolarDB-X V2.3 集中式和分布式一体化开源发布
2023年云栖大会,PolarDB-X 正式发布 2.3.0版本,重点推出PolarDB-X标准版(集中式形态),将PolarDB-X分布式中的DN节点提供单独服务,支持paxos协议的多副本模式、lizard分布式事务引擎,可以100%兼容MySQL。同时在性能场景上,采用生产级部署和参数(开启双1 + Paxos多副本强同步),相比于开源MySQL 8.0.34,PolarDB-X在读写混合场景上有30~40%的性能提升,可以作为开源MySQL的最佳替代选择。
|
算法 安全 Java
Java性能优化(五)-多线程调优-Lock同步锁的优化
基本特点Lock锁的基本操作通常基于乐观锁实现,尽管在某些情况下(如阻塞时)它也可能采用悲观锁的策略。通过对比图,我们可以清晰地看到两种同步锁的基本特点。Lock同步锁与Synchronized的比较在Java中,同步锁机制是确保多线程安全访问共享资源的重要手段。与JVM隐式管理锁的Synchronized相比,Lock同步锁(以下简称Lock锁)提供了更细粒度的控制,通过显式地获取和释放锁,为开发者提供了更大的灵活性。一、基本特点。
431 1