【HarmonyOS 5】鸿蒙App Linking详解

一、前言

HarmonyOS 的 App Linking 功能为开发者提供了一个强大的工具,通过创建跨平台的深度聚合链接,实现用户在不同场景下的无缝跳转,极大地提升了用户转化率和应用的可用性。

其安全性、智能路由和跨平台特性,使其在各种应用场景中都具有广泛的应用前景。无论是社交、电商还是新闻类应用,App Linking 都能够帮助开发者提高用户转化率和应用的活跃度。

通过合理配置和开发,开发者可以充分利用这一功能,为用户打造更加便捷、高效的应用体验。随着 HarmonyOS 生态的不断发展,App Linking 有望成为推动应用创新和用户增长的重要驱动力。

本文将深入探讨 App Linking 的功能、原理以及如何在 HarmonyOS 应用开发中使用它。

二、App Linking 的优势

无缝体验,直达内容
用户通过点击链接直接进入应用内的特定页面,而无需手动在应用中搜索或导航。

无论是扫码直达、短信链接,还是社交平台上的分享链接,用户都能一步到位,获得流畅的使用体验。

例如,在菜谱应用中,用户可以通过点击链接直接打开特定菜谱页面,而无需繁琐的搜索过程,大大节省了时间和操作步骤。

跨平台支持
支持跨平台操作,无论是在手机、平板还是其他 HarmonyOS 设备上,用户都能享受到一致的链接跳转体验。

这种跨平台的兼容性确保了应用能够触达更广泛的用户群体,提升了应用的可访问性。

智能路由与延迟链接
当用户点击链接时,如果目标应用尚未安装,App Linking 会智能引导用户前往应用市场进行下载。

更为出色的是,一旦用户完成安装,首次打开应用时仍能自动跳转到之前点击链接所指向的特定页面。

这一延迟链接的特性,不仅提高了应用的安装转化率,还确保了用户体验的连贯性,不会因为安装过程而中断用户的操作流程。

增强的安全性
HarmonyOS 的包管理子系统在用户点击链接时,会进行严格的端云安全鉴权。

系统会抓取并校验应用的资产配置信息,以此确保链接所指向的应用与域名的关联性合法可靠,有效防止GJ,保护用户的隐私和设备安全。

三、App Linking 的工作原理

App Linking 在传统 Deep Linking 技术的基础上,增加了域名校验环节,从而提升了链接的安全性和可靠性。其工作流程如下:【HarmonyOS 5】鸿蒙App Linking详解_App

四、App Linking 开发者配置

(1)开通 App Linking 服务:
开发者登录 AppGallery Connect,进入项目控制台,在 “增长” 选项中找到 “App Linking”,点击开通服务。【HarmonyOS 5】鸿蒙App Linking详解_App_02

配置网址域名:
在开发者的服务器上,需要创建并部署一个名为 applinking.json 的文件。这个文件包含了应用的 APP ID 等重要信息,用于声明该应用与特定域名的关联关系。

例如:

{
    "apps": [
        {
            "appIdentifier": "com.example.harmonyos.app",
            "paths": ["/*"]
        }
    ]
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

AGC 绑定域名:
回到 AppGallery Connect 控制台,在 App Linking 的 “应用链接(API>=12 适用)” 页面,填写并发布与应用相关联的网址域名。AGC 会对配置文件进行校验,确保域名与应用的关联合法有效。【HarmonyOS 5】鸿蒙App Linking详解_App_03

用户操作与系统响应
当用户点击一个 App Linking 链接时,系统首先会对链接的域名进行校验。如果校验通过,且目标应用已安装在设备上,系统将直接打开应用并跳转到链接指定的页面。如果目标应用未安装,系统会根据配置,引导用户前往应用市场下载应用。待应用安装完成后,首次打开时,系统会自动识别之前点击的链接,并将用户带到相应的页面。

五、在 HarmonyOS 应用中实现 App Linking

(1)项目配置
在 HarmonyOS 应用项目的 module.json5 文件中,需要对 App Linking 进行配置。具体来说,需要在 “abilities” 数组下的 “skills” 数组中添加相应的配置项。例如:

{
    "module": {
        "abilities": [
            {
                "name": "EntryAbility",
                "srcEntry": "./ets/entryability/EntryAbility.ts",
                "icon": "$media:icon",
                "label": "$string:EntryAbility_label",
                "exported": true,
                "startWindowIcon": "$media:icon",
                "startWindowBackground": "$color:start_window_background",
                "skills": [
                    {
                        "entities": ["entity.system.home"],
                        "actions": ["action.system.home"]
                    },
                    {
                        "entities": ["entity.system.browsable"],
                        "actions": ["ohos.want.action.viewData"],
                        "uris": [
                            {
                                "scheme": "https",
                                "host": "www.example.com",
                                "path": "specific/path",
                                "domainVerify": true
                            }
                        ]
                    }
                ]
            }
        ]
    }
}

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.

在上述配置中,“scheme” 必须为 “https”,“host” 应与在 AGC 中绑定的域名一致,“path” 则指定了应用内可处理的链接路径。通过合理配置 “path”,可以精确控制哪些链接能够引导用户进入应用内的特定页面,避免无关链接的干扰。

(2)解析链接参数
在应用的 Ability(如 EntryAbility)的生命周期回调函数中,需要添加代码来解析传入链接中的参数。例如,在 onCreate 或 onNewWant 生命周期中:

import { AbilityConstant, UIAbility, Want } from '@ohos.ability';
import { url } from '@ohos.net';

export default class EntryAbility extends UIAbility {
    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
        let uri = want?.uri;
        if (uri) {
            let urlObject = url.parseURL(want?.uri);
            let params = urlObject.params;
            // 根据解析出的参数进行相应的业务逻辑处理
        }
    }
}

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

应用获取链接中的参数,并根据业务需求进行相应的操作,如展示特定内容、执行特定功能等。