HarmonyOS 5 应用拉起系列(二):如何拉起微信小程序


                                                                                                                                                <p>随着鸿蒙生态的不断发展,越来越多开发者希望实现应用间的无缝联动,特别是与微信小程序的交互场景,比如拉起乘车码、城市服务等。这类需求在社区中也屡见不鲜,实际开发过程中更是踩坑不断。</p> 

本文将完整分享如何在 HarmonyOS 中实现”拉起微信小程序”的能力,覆盖从申请 AppId、SDK 集成到拉起实现与常见错误排查的全过程。若你尚不清楚 HarmonyOS 中其他拉起方式,可参考本系列第一篇文章。

一、前期准备工作

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

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

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

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

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

ohpm i @tencent/wechat_open_sdk

项目地址:@tencent/wechat_open_sdk – OHPM 三方库

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

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

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

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

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

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

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

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

weixin2.jpg

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

weixin3.jpg

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

weixin3.1.jpg

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

以下是封装后的工具类 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 校验未通过

weixin4.jpg

  • 原因:应用配置未审核通过或填写信息有误;
  • 解决:
    • 确保微信开放平台 App 状态为”审核通过”;
    • 检查 appid + identifier + bundleName 是否一致;
    • 登录平台:微信开放平台 > 管理中心 > 移动应用 > 开发配置。
未经允许不得转载:紫竹林-程序员中文网 » HarmonyOS 5 应用拉起系列(二):如何拉起微信小程序

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
关于我们 免责申明 意见反馈 隐私政策
程序员中文网:公益在线网站,帮助学习者快速成长!
关注微信 技术交流
推荐文章
每天精选资源文章推送
推荐文章
随时随地碎片化学习
推荐文章
发现有趣的