HarmonyOS的连接艺术之五: 使用 App Linking,安全可靠的一键直达

本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的技术细节,基于实际开发实践进行总结。
主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。
本文为原创内容,任何形式的转载必须注明出处及原作者。

App Linking 是一种基于 HTTPS 链接的应用间跳转方式,它通过域名校验机制,可以安全可靠地打开目标应用,无论该应用是否已安装。这种方式特别适合需要安全性和用户体验的应用场景,例如扫码直达、社交分享、沉默唤醒和广告引流等。

App Linking 简介

App Linking 是 HarmonyOS 特有的应用间跳转方式,它基于 Deep Linking 技术发展而来,但增加了域名校验环节。通过域名校验,App Linking 可以帮助用户消除歧义,识别合法归属于域名的应用,使链接更加安全可靠。

App Linking 的优势

  • 安全性高:通过域名校验机制,可以有效防止恶意应用仿冒。
  • 用户体验好:无论目标应用是否已安装,用户点击链接都可以正常访问,实现一键直达。
  • 适用范围广:适用于扫码直达、社交分享、沉默唤醒、广告引流等多种场景。

App Linking 的实现原理

App Linking 在 Deep Linking 基础上增加了域名校验环节,具体原理如下:

  1. 开发者配置 App Linking 服务:开发者需要在 AGC 控制台开通 App Linking 服务,并关联应用和网址域名。
  2. 开发者配置网址域名:开发者需要在服务器上配置 applinking.json 文件,声明应用的 APP ID。
  3. 系统进行域名校验:当用户点击 App Linking 链接时,系统会进行域名校验,确保链接指向合法的应用。
  4. 打开目标应用:如果域名校验成功,系统会打开目标应用;如果失败,则跳转到浏览器打开网页。

App Linking 的接入步骤

1. 在 AGC 控制台开通 App Linking 服务

  1. 登录 AppGallery Connect,进入“增长 > App Linking”页面。
  2. 点击“立即开通”,并设置数据处理位置和默认数据处理位置。
  3. 在“项目设置 > 常规”页面,查看应用的 APP ID。
    2. 在开发者网站上关联应用
  4. 在开发者网站的域名服务器上创建 applinking.json 文件,并配置应用的 APP ID。
  5. applinking.json 文件放在服务器根目录下的 .well-known 目录下。
    3. 配置网址域名
  6. 在 AGC 控制台,选择“增长 > App Linking > 应用链接(API>=12 适用)”页面。
  7. 点击“创建”,填写应用的网址域名,并开启域名校验开关。
  8. 点击“发布”,等待系统进行域名校验。
    4. 处理传入的链接
    在目标应用的 Ability 中,需要处理传入的链接,并根据链接中的参数进行相应的操作。例如:
import { AbilityConstant, UIAbility, Want } from '@ohos.app.ability.common';
import { url } from '@ohos.arkts';
export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    const uri = want?.uri;
    if (uri) {
      const urlObject = url.URL.parseURL(want.uri);
      const action = urlObject.params.get('action');
      if (action === "showall") {
        // 跳转到应用内的“所有节目”页面
      }
    }
  }
}

举(N)个栗子

示例 1:App Linking 接入示例

import { common } from '@ohos.app.ability.common';
export default class EntryAbility extends common.UIAbility {
  onWindowStageCreate(windowStage: common.WindowStage) {
    const context = this.getContext(this) as common.UIAbilityContext;
    const link: string = "https://www.example.com/programs?action=showall";
    const options: common.OpenLinkOptions = {
      appLinkingOnly: true // 仅使用 App Linking 跳转
    };
    context.openLink(link, options);
  }
}

示例 2:App Linking 跳转示例

import { common } from '@ohos.app.ability.common';
import { url } from '@ohos.arkts';
export default class EntryAbility extends common.UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    const uri = want?.uri;
    if (uri) {
      const urlObject = url.URL.parseURL(want.uri);
      const action = urlObject.params.get('action');
      if (action === "showall") {
        // 跳转到应用内的“所有节目”页面
      }
    }
  }
}

总结
使用 App Linking 实现应用间跳转是一种安全可靠的方式,它能够为用户提供一键直达的体验。我们需要按照步骤配置 App Linking 服务,并在目标应用中处理传入的链接,才能实现 App Linking 功能。

posted @ 2024-10-20 13:11  SameX  阅读(16)  评论(0编辑  收藏  举报