HarmonyOS鸿蒙Next中扫码直达能否实现扫码直接跳转第三方应用

HarmonyOS鸿蒙Next中扫码直达能否实现扫码直接跳转第三方应用 【问题描述】:通过扫码直达,在自己的应用内进行扫码,然后跳转到其他三方应用

【问题现象】:类似于控制中心的扫一扫,可以直接扫码打开小红书

cke_5919.png

【版本信息】:IDE版本6.1.0


更多关于HarmonyOS鸿蒙Next中扫码直达能否实现扫码直接跳转第三方应用的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

尊敬的开发者,您好,扫码直达可以成功跳转到三方应用,但是有前提条件,第三方应用已配置App Linking。若第三方应用未配置App Linking,则无法通过扫码直达进行跳转。App Linking配置可参考:使用App Linking实现应用间跳转

更多关于HarmonyOS鸿蒙Next中扫码直达能否实现扫码直接跳转第三方应用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


可以的。

参考:使用Deep Linking实现应用间跳转

采用Deep Linking进行跳转时,系统会根据接口中传入的uri信息,在本地已安装的应用中寻找到符合条件的应用并进行拉起。当匹配到多个应用时,会拉起应用选择框。

实现原理

Deep Linking基于隐式Want匹配机制中的uri匹配来查询、拉起目标应用。隐式Want的uri匹配规则详见uri匹配规则

获取并解析拉起方传入的应用链接

在目标应用的UIAbility的onCreate()或者onNewWant()生命周期回调中,获取、解析拉起方传入的应用链接。

// 以DeepAbility.ets为例
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { url } from '@kit.ArkTS';
const DOMAIN = 0x0000;
export default class DeepAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // 从want中获取传入的链接信息。
    // 如传入的url为:link://www.example.com/programs?action=showall
    let uri = want?.uri;
    if (uri) {
      // 从链接中解析query参数,拿到参数后,开发者可根据自己的业务需求进行后续的处理。
      let urlObject = url.URL.parseURL(want?.uri);
      let action = urlObject.params.get('action');
      // 例如,当action为showall时,展示所有的节目。
      if (action === 'showall') {
        // ···
      }
    }
  }
// ···
}

另外还有web组件跳转第三方APP等功能。

详见开发文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/deep-linking-startup

你好,扫码直达采用Deep Linking进行跳转时,系统会根据接口中传入的uri信息,在本地已安装的应用中寻找到符合条件的应用并进行拉起。当匹配到多个应用时,会拉起应用选择框。

Deep Linking基于隐式Want匹配机制中的uri匹配来查询、拉起目标应用。隐式Want的uri匹配规则详见匹配规则

  1. 《Scan Kit》配合 (<App Linking><Deep Linking>)可以做到跳转,但是和控制中心的扫一扫有区别的,控制中心的扫一扫会先拉起小艺,小艺分析后,直接就跳转App了。

  2. 用common.UIAbilityContext.openLink打开,可以兼容AppLinking和DeepLinking。但是否可以直接拉起三方App,依赖目标App配置的uri,可以不设置appLinkingOnly为true,有网页就拉起网页了。

  3. Scan Kit有两种选择:参考指南《默认界面扫码》《自定义界面扫码》《示例》也比较详细。 在示例工程里搜索pushUrl的pages/resultPage/ResultPage的地方改成调用openLink就可以看跳转效果了。比如:

UIContextSelf.commonContext.openLink(this.scanResults.data[this.multiSelectedIndex].originalValue)

这个“扫码直达”和“应用内扫码”其实是两个能力,很多人容易混。

你截图里这个:

Scan Kit → 扫码直达

本质上是:

系统级扫码入口能力。

比如:

  • 控制中心扫一扫
  • 系统相机扫码
  • 系统扫码入口

扫码后:

由系统决定是否拉起某个应用。

而你现在的问题是:

自己 App 内扫码
→ 扫到二维码
→ 直接打开第三方 App

这个场景:

严格来说不属于“扫码直达”的完整能力链路。

而是:

ScanKit识码
+
DeepLink / Want / URI 跳转

组合实现。

类似“小红书扫码打开APP”本质也是:

二维码里包含:

xhsdiscover://

或者:

https://

然后系统识别后:

  • 匹配已安装应用
  • 拉起对应 App

你自己的 App 内其实也可以做。

流程一般是:

1、ScanKit 扫码
2、拿到二维码内容
3、解析 scheme / link
4、通过 want 打开目标应用

例如:

扫出来:

weixin://
xhsdiscover://
taobao://

然后:

startAbility(want)

去拉起。

但是这里有个关键限制:

并不是所有第三方 App 都允许被外部拉起。

取决于:

第三方是否配置:

  • DeepLink
  • URI Scheme
  • applinking
  • entity/system home capability

所以:

能不能打开第三方应用,

核心不是 ScanKit,

而是:

第三方 App 是否暴露了可拉起入口。

你可以理解为:

ScanKit 只负责“识别码”

真正:

扫码直达某APP

是:

系统 + DeepLink + 应用注册能力

共同完成的。

另外:

你截图里的:

扫码直达(推荐)

更偏向:

“自己的应用接入系统扫码入口”。

也就是:

用户在控制中心扫码后:

直接打开“你的应用页面”。

而不是:

你的 App 去打开别人的 App。

所以两个方向:

1、系统扫码 → 打开你的 App

这个属于:

官方“扫码直达”。

2、你的 App 扫码 → 打开第三方 App

这个属于:

ScanKit + URI跳转

自己实现。

最后补充一个现实情况:

HarmonyOS NEXT 上:

很多 Android 时代的 scheme:

weixin://
alipays://
taobao://

未必还能完全兼容。

因为:

NEXT 已经不是 Android Runtime。

所以:

即使扫码识别成功,

也可能:

  • 无法拉起
  • 无权限
  • 未注册
  • 被系统拦截

需要目标鸿蒙应用自己适配 DeepLink。

通过 App Linking Kit 实现应用url跳转 应用app

使用 聚合链接能力 配置相关参数,配置完成后 通过openLink接口拉起;

import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { GlobalContext } from '../common/GlobalContext';

@Entry
@Component
struct Index {
  build() {
    Button('start link', { type: ButtonType.Capsule, stateEffect: true })
      .width('87%')
      .height('5%')
      .margin({ bottom: '12vp' })
      .onClick(() => {
        let context = GlobalContext.getContext();
        // 如下link请填写开发者实际跳转的url
        let link: string = "https://example.drcn.agconnect.link/AIYx";
        context.openLink(link, { appLinkingOnly: false })
          .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}`);
          })
      })
  }
}

此时目标方应用未安装,若有聚合链接匹配的应用,点击链接会按照创建聚合链接时指定的方式进行跳转,例如跳转到HarmonyOS平台预览页、应用市场下载详情页、自定义网址等;若无聚合链接匹配的应用,则继续尝试以浏览器打开链接的方式打开应用

扫码直达是 HarmonyOS 提供的系统级能力,用户通过:

  • ✅ 控制中心扫一扫
  • ✅ 负一屏扫一扫
  • ✅ 系统相机扫码

扫描应用的二维码后,可以直接跳转到应用内的指定服务页面,无需先打开应用再导航。

第一步:在 entry/src/main/module.json5 配置 AppLinking(应用链接)

scheme: URL 协议(如 harmony://、https://) host: 域名或标识符 path: 路径 domainVerify: 域名验证(HTTPS 时必须为 true)

第二步:生成二维码内容。二维码的内容应该是符合你配置的 URL Scheme 格式

第三步:在应用中处理 DeepLink 跳转。当用户扫描二维码后,系统会通过 onCreate 或 onNewWant 传递 WANT 数据到你的应用。在 EntryAbility.ets 中onCreate、onNewWant处理

第四步:在扫码页面处理业务逻辑…

可以实现。鸿蒙Next的扫码直达通过配置统一的扫码结果解析规则,使用Want或Ability的显式/隐式启动机制,即可跳转至已注册对应scheme或intent filter的第三方应用。前提是第三方应用已适配鸿蒙系统的Ability启动规范。

可以实现。HarmonyOS Next 提供了扫码直达能力,应用内通过调用系统扫码服务(如ScanKit或通用扫码组件)解析二维码内容后,可获得一个目标 URI。若该 URI 以 https:// 或特定业务 Scheme 开头,系统将自动匹配支持该链接的三方应用(如小红书已注册相应链接),通过 startAbilityopenLink 即可拉起目标应用,完成跳转。关键步骤如下:

  1. 集成扫码组件并获取扫码结果。
  2. 根据结果中的 URI,构造 Want 或调用 openLink
  3. 系统会基于 URI 匹配已安装的可处理应用(配置了 skills 或关联了链接),直接跳转。

无需额外适配,控制中心扫一扫用的也是同一套系统级别的链接匹配机制。

回到顶部