有没有HarmonyOS鸿蒙Next类似小程序扫码的功能,比如扫描,就可以进入我的app或者app的某一个具体页面?

有没有HarmonyOS鸿蒙Next类似小程序扫码的功能,比如扫描,就可以进入我的app或者app的某一个具体页面? 有没有类似小程序扫码的功能,比如扫描,就可以进入我的app或者app的某一个具体页面?

4 回复

可以通过扫码直达,开发者将域名注册到“扫码直达”服务后,用户可通过控制中心等系统级的常驻入口,扫应用的二维码、条形码并跳转到应用对应服务页,实现一步直达服务的体验。

  1. 参考“应用开发准备”完成基本准备工作。
  2. 仅针对“扫码直达”必选)接入App Linking,您需要完成以下步骤: a. 在AGC控制台开通App Linking服务。 b. 在开发者网站上关联应用。 c. 在App Linking中配置二维码、条形码关联的网址域名。 d. 在应用的“module.json5”文件中关联域名。
  3. 处理接收到的码值,完成应用内页面跳转逻辑
import { router, window } from '@kit.ArkUI';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';


export default class EntryAbility extends UIAbility {
  private page: string = 'pages/Index';
  private uiContext?: UIContext;

  // 冷启动场景通过onCreate回调获取码值信息
  onCreate(want: Want, _: AbilityConstant.LaunchParam): void {
    hilog.info(0x0001, '[Scan Access]', 'Succeeded in getting want in onCreate');
    // 从want中获取传入的链接信息。
    // 如传入的url为:https://www.example.com/programs?router=Access
    this.getRouterUri(want);
  }


  // 热启动场景通过onNewWant回调获取码值信息
  onNewWant(want: Want, _: AbilityConstant.LaunchParam): void {
    hilog.info(0x0001, '[Scan Access]', 'Succeeded in getting want in onNewWant');
    // 从want中获取传入的链接信息
    this.getRouterUri(want);
  }


  onWindowStageCreate(windowStage: window.WindowStage): void {
    hilog.info(0x0001, '[Scan Access]', 'Ability onWindowStageCreate');
    try {
      windowStage.getMainWindow().then((windowObj: window.Window) => {
        try {
          windowStage.loadContent(this.page).then(() => {
            hilog.info(0x0001, '[Scan Access]', 'Succeeded in loading the content.');
            try {
              this.uiContext = windowObj.getUIContext();
              hilog.info(0x0001, '[Scan Access]', 'Succeeded in getting UIContext.');
            } catch (error) {
              hilog.error(0x0001, '[Scan Access]', `Failed to get UIContext by windowObj. Code: ${error.code}.`);
            }
          }).catch((error: BusinessError) => {
            hilog.error(0x0001, '[Scan Access]', `Failed to load the content. Code: ${error.code}.`);
          })
        } catch (error) {
          hilog.error(0x0001, '[Scan Access]', `Failed to load the content. Code: ${error.code}.`);
        }
      }).catch((error: BusinessError) => {
        hilog.error(0x0001, '[Scan Access]', `Failed to get MainWindow. Code: ${error.code}.`);
      })
    } catch (error) {
      hilog.error(0x0001, '[Scan Access]', `Failed to get MainWindow. Code: ${error.code}.`);
    }
  }


  // 解析扫码结果,跳转相应页面
  private getRouterUri(want: Want) {
    const uri: string | undefined = want?.uri;
    if (uri && this.uiContext) {
      // 开发者根据解析的uri跳转至相应页面,例如需要跳转页面为"pages/Access"
      const status: router.RouterState = this.uiContext.getRouter().getState();
      if (status && status.name !== 'Access' && uri) {
        try {
          // 根据uri参数做业务处理
          this.uiContext.getRouter().pushUrl({
            url: 'pages/Access'
          }).catch((error: BusinessError) => {
            hilog.error(0x0001, '[Scan Access]', `Failed to pushUrl by getRouter. Code: ${error.code}.`);
          });
        } catch (error) {
          hilog.error(0x0001, '[Scan Access]', `Failed to pushUrl by getRouter. Code: ${error.code}.`);
        }
      }
    }
  }
}
  1. 验证“扫码直达”服务。 a. 将配置好域名映射关系的测试应用安装到本地。 b. 打开HarmonyOS扫码入口(控制中心扫码入口),扫描应用发行的二维码。 c. 确认能否拉起应用并跳转目标服务页。

具体可参考接入“扫码直达”服务

【背景知识】

  • Scan Kit:Scan Kit(统一扫码服务)作为软硬协同的系统级扫码服务,创新性地推出了更简单的“扫码直达”接入能力。只需少量的接入工作,无需在应用中开发专门的扫码模块,即可通过系统级扫码入口实现扫码到应用的跳转。
  • 扫码直达:开发者将域名注册到“扫码直达”服务后,用户可通过控制中心等系统级的常驻入口,扫应用的二维码、条形码并跳转到应用对应服务页,实现一步直达服务的体验。

更多关于有没有HarmonyOS鸿蒙Next类似小程序扫码的功能,比如扫描,就可以进入我的app或者app的某一个具体页面?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在日常生活中,人们会使用各种应用扫各式各样的码,而“扫码直达”服务则为用户带来一种全新的扫码体验。

开发者将域名注册到“扫码直达”服务后,用户可通过控制中心等系统级的常驻入口,扫应用的二维码、条形码并跳转到应用对应服务页,实现一步直达服务的体验。

开发者接入“扫码直达”服务,能为应用带来:

  • 更浅层的扫码入口和更便捷的“扫码直达”服务体验。
  • HarmonyOS强大的扫码能力。
  • 更容易触达用户的全新渠道。

业务流程

业务流程

  1. 开发者参考App Linking指导完成域名注册。
  2. 用户通过HarmonyOS扫码入口发起扫码请求。
  3. HarmonyOS扫码入口调用系统能力解析码值,查询码值对应的应用信息后拉起应用。
  4. 解析码值结果跳转应用服务页。

开发步骤

  1. 参考开发准备完成必要的准备工作。
  2. 处理接收到的码值,完成应用内页面跳转逻辑。
import { router, window } from '@kit.ArkUI';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';

export default class EntryAbility extends UIAbility {
  private page: string = 'pages/Index';
  private uiContext?: UIContext;
  // 冷启动场景通过onCreate回调获取码值信息
  onCreate(want: Want, _: AbilityConstant.LaunchParam): void {
    hilog.info(0x0001, '[Scan Access]', 'Succeeded in getting want in onCreate');
    // 从want中获取传入的链接信息。
    // 如传入的url为:https://www.example.com/programs?router=Access
    this.getRouterUri(want);
  }

  // 热启动场景通过onNewWant回调获取码值信息
  onNewWant(want: Want, _: AbilityConstant.LaunchParam): void {
    hilog.info(0x0001, '[Scan Access]', 'Succeeded in getting want in onNewWant');
    // 从want中获取传入的链接信息
    this.getRouterUri(want);
  }

  onWindowStageCreate(windowStage: window.WindowStage): void {
    hilog.info(0x0001, '[Scan Access]', 'Ability onWindowStageCreate');
    try {
      windowStage.getMainWindow().then((windowObj: window.Window) => {
        try {
          windowStage.loadContent(this.page).then(() => {
            hilog.info(0x0001, '[Scan Access]', 'Succeeded in loading the content.');
            try {
              this.uiContext = windowObj.getUIContext();
              hilog.info(0x0001, '[Scan Access]', 'Succeeded in getting UIContext.');
            } catch (error) {
              hilog.error(0x0001, '[Scan Access]', `Failed to get UIContext by windowObj. Code: ${error.code}.`);
            }
          }).catch((error: BusinessError) => {
            hilog.error(0x0001, '[Scan Access]', `Failed to load the content. Code: ${error.code}.`);
          })
        } catch (error) {
          hilog.error(0x0001, '[Scan Access]', `Failed to load the content. Code: ${error.code}.`);
        }
      }).catch((error: BusinessError) => {
        hilog.error(0x0001, '[Scan Access]', `Failed to get MainWindow. Code: ${error.code}.`);
      })
    } catch (error) {
      hilog.error(0x0001, '[Scan Access]', `Failed to get MainWindow. Code: ${error.code}.`);
    }
  }

  // 解析扫码结果,跳转相应页面
  private getRouterUri(want: Want) {
    const uri: string | undefined = want?.uri;
    if (uri && this.uiContext) {
      // 开发者根据解析的uri跳转至相应页面,例如需要跳转页面为"pages/Access"
      const status: router.RouterState = this.uiContext.getRouter().getState();
      if (status && status.name !== 'Access' && uri) {
        try {
          // 根据uri参数做业务处理
          this.uiContext.getRouter().pushUrl({
            url: 'pages/Access'
          }).catch((error: BusinessError) => {
            hilog.error(0x0001, '[Scan Access]', `Failed to pushUrl by getRouter. Code: ${error.code}.`);
          });
        } catch (error) {
          hilog.error(0x0001, '[Scan Access]', `Failed to pushUrl by getRouter. Code: ${error.code}.`);
        }
      }
    }
  }
}

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/scan-directservice#section17514184120564

HarmonyOS鸿蒙Next支持通过扫码直接启动应用或跳转至指定页面。该功能基于HarmonyOS的FA(Feature Ability)机制与分布式能力实现,可通过URL Scheme或特定URI配置深度链接。扫描二维码时,系统解析链接并匹配应用内注册的页面路由,自动导航至目标界面。此过程无需依赖WebView或小程序框架,由系统级应用关联管理完成。

是的,HarmonyOS Next 支持通过扫描二维码直接启动应用或跳转到特定页面。这可以通过统一扫码服务(Scan Kit)元服务(Meta Service) 的深度链接能力实现。

实现方式:

  1. 生成特定二维码:在二维码中嵌入应用或页面的唯一标识(如URL Scheme、路由路径)。
  2. 集成 Scan Kit:在应用中调用系统扫码能力,识别二维码内容。
  3. 解析并跳转:通过元服务框架解析二维码数据,直接打开应用或指定页面(需提前配置页面路由)。

优势:

  • 无缝体验:用户无需手动选择应用,扫码后自动跳转。
  • 精准直达:支持参数传递,可跳转到具体页面并携带数据(如商品ID)。
  • 系统级支持:HarmonyOS 提供了标准 API,兼容性强。

适用场景:

  • 线下推广(扫码打开活动页)
  • 跨设备交互(扫码连接设备)
  • 支付/登录等快捷操作

需在开发阶段配置好元服务的路由规则和扫码处理逻辑。具体可参考 HarmonyOS SDK 中的 ScanKitMetaService 模块文档。

回到顶部