HarmonyOS 鸿蒙Next通过应用链接拉起指定应用

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

应用链接

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

配置如下:

{
  "module": {
    "abilities": [
      {
        "skills": [
          {
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "action.system.home"
            ]
          },
          {
            "actions": [
              "ohos.want.action.viewData"
            ],
            "uris": [
              {
                "scheme": "link",
                "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

运行应用

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

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

参考引用

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


更多关于HarmonyOS 鸿蒙Next通过应用链接拉起指定应用的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next通过应用链接拉起指定应用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS 鸿蒙Next通过应用链接拉起指定应用,主要依赖于Deep Link技术。Deep Link是一种允许应用通过特定链接直接打开其他应用或应用内特定页面的机制。在HarmonyOS中,开发者可以通过配置应用的config.json文件来定义应用的Deep Link。

具体实现步骤如下:

  1. config.json中配置Deep Link:在应用的config.json文件中,添加uri字段,定义应用的Deep Link。例如:

    {
      "app": {
        "bundleName": "com.example.myapp",
        "version": {
          "code": 1,
          "name": "1.0"
        },
        "abilities": [
          {
            "name": ".MainAbility",
            "uri": "example://main"
          }
        ]
      }
    }
    
  2. 在应用中处理Deep Link:在应用的Ability中,重写onStart方法,处理传入的Deep Link。例如:

    import Ability from '[@ohos](/user/ohos).application.Ability';
    
    export default class MainAbility extends Ability {
      onStart(intent) {
        if (intent.uri) {
          // 处理Deep Link
          console.log(`Deep Link received: ${intent.uri}`);
        }
      }
    }
    
  3. 通过应用链接拉起指定应用:在其他应用或系统中,通过调用startAbility方法,传入Deep Link来拉起指定应用。例如:

    import featureAbility from '[@ohos](/user/ohos).ability.featureAbility';
    
    let intent = {
      uri: 'example://main'
    };
    featureAbility.startAbility(intent)
      .then(() => {
        console.log('Ability started successfully');
      })
      .catch((error) => {
        console.error(`Failed to start ability: ${error}`);
      });
    

通过以上步骤,开发者可以在HarmonyOS中实现通过应用链接拉起指定应用的功能。

回到顶部