在移动生态中,用户常常需要跨多个应用完成一次完整任务(例如“浏览-下单-支付-分享”)。如果每一步都要手动切换应用,体验将被频繁中断。系统提供的“应用间跳转能力”通过统一的链接协议和系统级路由,实现“一键直达”的流畅体验,显著提升用户效率和满意度,从而提升应用转化率与用户留存率。

1 典型业务场景

社交分享

广告跳转

特殊文本跳转

Web与应用跳转

技术实现方案

系统主要提供应用链接的实现方式:

·App Linking:通过域名校验和HTTPS协议,实现更安全可靠的跳转。

·Deep Linking:实现相对简单,但存在被恶意仿冒的风险。

2 Deep Linking & App Linking

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

Deep Linking:是一种通过链接跳转至应用特定页面的技术,其特点是支持开发者定义任意形式的scheme。由于缺乏域名校验机制,容易被其他应用所仿冒。

App Linking:必须在AGC开通App Linking服务,其限定了scheme必须为https,同时通过增加域名校验机制,防止应用仿冒,直达受信的目标应用。

 

App Linking

Deep Linking

实现方案

目标应用需要在module.json5中声明应用链接;同时需要向系统注册域名并通过域名认证。

目标应用需要在module.json5中声明应用链接;

链接格式

scheme必须是https

scheme可以自定义

是否可以直接拉起应用

可以

可以,但有被仿冒的风险

2接入方式

Deep Linkingmodule.json5中配置skills标签

注意,scheme取值不以"ohos"开头。通常不为"https""http""file"等已被系统应用使用的值,否则会匹配到对应的系统应用。

{

  "module": {

    // ...

    "abilities": [

      {

        // ...

        "skills": [

          {

            "entities": [

              "entity.system.home"

            ],

            "actions": [

              "ohos.want.action.home"

            ]

          },

          {

            "actions": [

              // actions不能为空,actions为空会造成目标方匹配失败。

              "ohos.want.action.viewData"

            ],

            "uris": [

              {

                // scheme必选,可以自定义,以link为例,需要替换为实际的scheme

                "scheme": "link",

                // host必选,配置待匹配的域名

                "host": "www.example.com"

              }

            ]

          } // 新增一个skill对象,用于跳转场景。如果存在多个跳转场景,需配置多个skill对象。

        ]

      }

    ]

  }

}

App Linking

1.AGC开通App Linking服务

 

2.在开发者自己的域名服务器上增加配置文件applinking.json(默认文件名)

{

 "applinking": {

   "apps": [

     {

       "appIdentifier": "APP ID"

     }

   ]

 }

}

·appIdentifier填写创建应用时生成的APP ID。

·同一个网站域名可以关联多个应用,只需要在"apps"列表里放置多个"appIdentifier"元素即可,其中每个"appIdentifier"元素对应每个应用。

然后将配置文件放在域名服务器的固定目录下:

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

例如:开发者的服务器域名为www.example.com,则必须将applinking.json文件放在如下位置:https://www.example.com/.well-known/applinking.json

3.AGC创建关联的网址域名

设置完成后点击“发布”,AGC会对该网站域名的配置文件所包含的应用与本项目内的应用列表进行交集校验。

如果域名的配置文件中有应用存在本项目中,则发布成功,点击“查看”可显示该域名关联的应用信息。

 

4.应用的module.json5配置

例如,声明应用关联的域名是www.example.com,则需进行如下配置。

{

“module”:{

“abilities”:[

{ //…Ability配置代码省略

//请将exported配置为true;如果exported为false,仅具有权限的系统应用

            //拉起该应用,否则无法拉起应用

         exported": true,

"skills": [

          {

            "entities": [

              "entity.system.home"

            ],

            "actions": [

              "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",

                 "host": "www.example.com", 

                // path可选,表示域名服务器上的目录或文件路径,例如

                // www.example.com/path1中的path1

                // 如果应用只能处理部分特定的path,则此处应该配置应用所支持 

                //的path避免出现应用不能处理的path链接也被引流到应用中的问题

                "path": "path1"

              }

            ],

            // domainVerify须设置为true

           "domainVerify": true

          }

          // 若有其他跳转能力,如推送消息跳转、NFC跳转,可新增一个skill对

          // 象,防止与App Linking业务冲突

        ]

}

]

}

}

5如何确认域名配置是否成功?

如需查看应用域名验证结果,请在DevEco Studio中打开终端,并使用以下命令查询验证结果:

hdc shell hidumper -s AppDomainVerifyManager

运行hidumper命令后,即可在控制台上看到success消息。

BundleName:

  appIdentifier:123456789

  domain verify status:

  https://www.example.com:success

3 常见场景:应用内跳转其他应用

1.调用方通过openLink接口启动目标应用,传入的link可以是Deep LinkingApp Linking

2.调用方如果只想拉起App Linking,可以调用时把appLinkingOnly置为true;

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}`);

          })

4 常见场景:Web页面跳转其他应用

​​​​​​​1.在拦截回调onLoadIntercept中实现跳转

  1. Web({
    
          src: $rawfile('index2.html'),
    
          controller: this.controller
    
        })
    
          .zoomAccess(false)
    
          .onLoadIntercept((event) => {
    
           /判断链接是否指向第三方
    
    If (url === 'third-party://pages/toThirdApp'){
    
    const link: string = "appScheme://www.test.com:80/path1";
    
    this.context.openLink(link, openLinkOptions)
    
    }
    
    })

    2.在前端通过绑定事件window.open或超链接实现

    <script> window.open(‘https://www.example.com/programs’)</script>
    
    <a class="function_item" href=" https://www.example.com/programs">跳转链接</a>

    注意:在浏览器地址栏输入App LinkingDeep Linking打开应用,只能通过网页内的跳转代码实现(a标签、window.open()window.location.href等)

    解决方案:写一个h5页面作为中转,在h5页面中通过link拉起App

    5 常见场景:应用未安装拉起应用市场

    拉起应用市场几种常见场景:

    1.不管应用是否安装,只拉应用市场详情页

    1)构建应用市场的link;

    2)通过openLink接口拉起应用市场

    let context: common.UIAbilityContext =
    
     this.getUIContext().getHostContext() as common.UIAbilityContext;
    
     // 需要拼接不同的应用包名,用以打开不同的应用详情页,例如:bundleName: 'com.huawei.hmsapp.books'
    
            let bundleName: string = 'xxxx';
    
          let link: string = 'https://appgallery.huawei.com/app/detail?id=' + bundleName + 
    
                    ‘tion=write-review ‘
    
            // 以App Linking优先的方式在应用市场打开指定包名的应用详情页
    
            context.openLink(link, { appLinkingOnly: false })
    
              .then(() => {
    
                hilog.info(0x0001, 'TAG', 'openlink success.');
    
              })
    
              .catch((error: BusinessError) => {
    
              });

    2.只在应用未安装时拉起应用市场

    1)需要目标应用接入App Linking,并且配置直达应用市场;

    2)调用方在调用openLink,传入目标应用App Linking, appLinkingOnly设置为false

    6 常见场景:跳转系统链接

    跳转设置、应用市场、联系人、电话、日历等系统应用时,系统封装了单独的Kit。可以直接调用相关Kit的接口进行跳转。

    应用市场:Store Kit

    钱包:Payment Kit

    电话:Telephony Kit

    日历:Calendar Kit

    联系人:Contacts Kit

    相机:

       拍照录像Camera Kit

       扫码 :Scan Kit

       卡证识别Vision Kit

       文档扫描 :Vision Kit

    7 常见三方应用链接

    应用名

    scheme

    示例

    抖音

    snssdk1128

    snssdk1128://home

    微博

    sinaweibo

    sinaweibo://home

    小红书

    xhsdiscover

    xhsdiscover://home

    哔哩哔哩

    bilibili

    bilibili://home

    快手

    kwai

    kwai://home

    微信

    weixin

    weixin://home

    QQ

    mqqapi

    mqqapi://home

    支付宝

    alipays

    alipays://home

    云闪付

    upwallet

    upwallet://home

    京东

    openapp.jdmobile

    openapp.jdmobile://home

    美团

    imeituan

    imeituan://home

    拼多多

    pinduoduo

    pinduoduo://home

    淘宝

    tbopen

    tbopen://home

    高德地图

    amapuri

    amapuri://home

    腾讯会议

    wemeet

    wemeet://home

    Logo

    讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

    更多推荐