为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

应用链接

应用链接是指可以将用户引导至应用内特定位置或相关网页的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学习资料可见

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

0 评论

作者其他优质文章

正在加载中
全栈工程师
手记
220
粉丝
1.7万
获赞与收藏
2186

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消