HarmonyOS鸿蒙Next中在应用里面如何拉起微信小程序

HarmonyOS鸿蒙Next中在应用里面如何拉起微信小程序 在鸿蒙应用里面如何拉起微信小程序

4 回复

更多关于HarmonyOS鸿蒙Next中在应用里面如何拉起微信小程序的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


【实现思路】

一、前期准备工作

1. 在微信开放平台申请 AppId 并配置鸿蒙应用信息

要拉起微信小程序,首先需要在微信开放平台申请一个鸿蒙专用的移动应用 ID(AppId),注意:

  • 提交审核前需正确填写应用信息,包括 Bundle Name、签名等;
  • 微信将收取审核费用(海外/国内账号略有不同),审核时间约为 5 个工作日;
  • 没有审核通过的 AppId 无法正常拉起微信能力

2. 集成微信 SDK 到鸿蒙项目中

微信已适配 HarmonyOS 并提供官方 SDK,你可以通过 ohpm 安装:

ohpm i [@tencent](/user/tencent)/wechat_open_sdk

项目地址:[@tencent/wechat_open_sdk - OHPM 三方库](https://ohpm.openharmony.cn/#/cn/detail/@tencent%2Fwechat_open_sdk)

注意:SDK 目前未依赖 so 库,因此支持在元服务中使用。但请注意,一般的元服务本身无法直接拉起微信应用

3. 配置 module.json5 中的 querySchemes(容易遗漏)

确保在 entry/src/main/module.json5 中声明以下字段:

"querySchemes": [
 "weixin",
 "wxopensdk"
]

若未配置该字段,会导致系统无法识别 weixin:// 等 Scheme,从而拉起失败。

4. 获取目标微信小程序的原始 ID(userName)

你需要获取目标小程序的“原始 ID”,方式如下:

1.在微信中打开目标小程序(例如“乘车码”),点击右上角进入详情页;

图片

2.点击「小程序资料」或「更多信息」;

图片

3.复制“原始 ID”,即类似 gh_xxxxxxxx 的字符串

图片

二、实现代码示例:拉起微信小程序

以下是封装后的工具类 WxSdkHelper,用于拉起指定微信小程序:

const TAG = 'WeiXinSdkOpenHelper'

export class WxSdkHelper {
 static instance: WxSdkHelper = new WxSdkHelper()
 static isStartNet: boolean = true
 private static readonly WX_BUNDLE_NAME = 'com.tencent.wechat'

 private constructor() {} // 单例模式

 /**
  * 拉起微信小程序
  * @param appId 在微信开放平台申请的鸿蒙应用 AppId
  * @param miniProgramId 小程序原始 ID(userName)
  * @param type 小程序类型(正式、开发、体验)
  */
 async openWxMiniProgram(miniProgramId: string | undefined, appId: string,
   type: MINI_PROGRAM_TYPE = MINI_PROGRAM_TYPE.RELEASE, context?: common.UIAbilityContext): Promise<void> {
   if (!miniProgramId) {
     LogUtil.e(TAG, '拉起失败,小程序 ID 为空')
     return
   }

   if (!this.checkWxInstalled(appId)) {
     LogUtil.w(TAG, '微信未安装,尝试跳转应用商店')
     return
   }

   try {
     let contextP = context ?? getContext() as common.UIAbilityContext
     const wxApi = wxopensdk.WXAPIFactory.createWXAPI(appId)
     const request = new wxopensdk.LaunchMiniProgramReq()
     request.userName = miniProgramId
     request.miniprogramType = type

     const success = await wxApi.sendReq(contextP, request)
     success ? LogUtil.d(TAG, '拉起成功') : LogUtil.e(TAG, '拉起失败')
   } catch (err) {
     LogUtil.e(TAG, '拉起微信小程序异常', err)
   }
 }

 private checkWxInstalled(appId: string): boolean {
   const wxApi = wxopensdk.WXAPIFactory.createWXAPI(appId)
   const installed = wxApi.isWXAppInstalled()
   if (!installed) this.openAppInStore(WxSdkHelper.WX_BUNDLE_NAME)
   return installed
 }

 private openAppInStore(bundleName: string, context?: common.UIAbilityContext): void {
   const want: Want = {
     action: 'ohos.want.action.appdetail',
     uri: `store://appgallery.huawei.com/app/detail?id=${bundleName}`,
   }

   const contextP = context ?? getContext() as common.UIAbilityContext
   contextP.startAbility(want)
     .then(() => LogUtil.d(TAG, '已跳转应用商店'))
     .catch((err: BusinessError) => {
       LogUtil.e(TAG, `跳转应用商店失败: ${err.code} - ${err.message}`, err)
     })
 }
}

enum MINI_PROGRAM_TYPE {
 RELEASE = 0, // 正式版
 DEVELOPMENT = 1, // 开发版
 TRIAL = 2 // 体验版
}

三、常见报错与排查指南

1. 微信登录失败:Bundle ID 校验未通过

图片

  • 原因:应用配置未审核通过或填写信息有误;
  • 解决:
  • 确保微信开放平台 App 状态为“审核通过”;
  • 检查 appid + identifier + bundleName 是否一致;
  • 登录平台:微信开放平台 > 管理中心 > 移动应用 > 开发配置。

2. 拉起失败:APP_ID 或 Identifier 不一致

图片

  • 原因:
  • 调用 createWXAPI 时使用了错误的 AppId
  • 微信后台配置的 Identifier 与实际应用不匹配;
  • 检查:
  • 是否将小程序的 AppId 误用为移动应用 AppId
  • IDE 自动生成的调试签名是否与实际上传一致(建议单独申请测试用 AppId)。

结语

拉起微信小程序是 HarmonyOS 应用常见的第三方能力接入场景,但涉及平台之间的权限与校验较多,建议开发者在正式开发前先完成微信开放平台的审核流程,并尽量封装通用组件,减少重复踩坑。

如果你觉得这篇文章对你有帮助,欢迎关注本系列后续内容,我们还将介绍:

  • 拉起支付宝支付
  • ArkWeb拉起支付宝支付
  • 拉起地图导航类应用等

在HarmonyOS Next中,可通过Want对象拉起微信小程序。使用ohos.ability.wantAgent模块创建WantAgent,指定bundleName为微信包名,abilityName为微信小程序入口Ability。通过startAbility()方法触发。需提前配置微信的bundleNameabilityName信息。

在HarmonyOS Next中,应用无法直接拉起微信小程序。这是因为:

  1. 系统架构差异:HarmonyOS Next是华为自主研发的全场景操作系统,其应用生态(原子化服务、元服务)与基于Android的微信小程序属于不同的技术体系。两者没有官方的互操作接口。

  2. 生态隔离:微信小程序运行在微信App(一个Android应用)的容器环境中。HarmonyOS Next不再兼容Android应用,因此无法通过传统的Android Intent方式唤起微信或其中的小程序。

当前可行的替代方案

  • 使用H5链接:如果你的鸿蒙应用需要提供类似小程序的功能或跳转到特定服务,最直接的方式是集成WebView组件,直接加载对应的H5页面链接。
  • 开发元服务:对于希望获得类似小程序体验(即用即走、轻量化)的场景,建议在HarmonyOS生态内开发对应的元服务(原子化服务)。元服务是HarmonyOS的原生轻量化应用形态,可以通过卡片、统一扫码等多种方式直接拉起。
  • 引导用户:如果必须使用微信小程序,只能通过提示文本、二维码等方式,引导用户手动打开微信进行操作。

总结: 由于生态和技术栈的彻底分离,在HarmonyOS Next应用内拉起微信小程序没有官方支持的技术方案。开发者的重心应转向HarmonyOS自身的元服务生态。

回到顶部