HarmonyOS鸿蒙Next中Web拉起微信收银台报错;应用使用鸿蒙原生壳子内嵌食堂web链接,iOS和安卓可唤起微信支付,鸿蒙端无法唤起

HarmonyOS鸿蒙Next中Web拉起微信收银台报错;应用使用鸿蒙原生壳子内嵌食堂web链接,iOS和安卓可唤起微信支付,鸿蒙端无法唤起 现在的应用是用的鸿蒙原生的壳子,内嵌加载一个食堂的web链接,这个链接内有web端的微信支付可以直接唤起微信收银台。在iOS和安卓上面都是可以唤起的。鸿蒙端的就是无法唤起

【问题描述】:

现在的应用是用的鸿蒙原生的壳子,内嵌加载一个食堂的web链接,这个链接内有web端的微信支付可以直接唤起微信收银台。在iOS和安卓上面都是可以唤起的。鸿蒙端的就是无法唤起

【问题现象】:

cke_1516.png

cke_2301.png

【版本信息】:开发工具版本:6.0、、Api语言版本:20

【尝试解决方案】:包名 + 签名指纹和微信开放平台填的完全一致


更多关于HarmonyOS鸿蒙Next中Web拉起微信收银台报错;应用使用鸿蒙原生壳子内嵌食堂web链接,iOS和安卓可唤起微信支付,鸿蒙端无法唤起的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

开发者你好 16000019是隐式拉起失败,原因是隐式启动的参数配置有误或者指定的HAP包未安装。 排查方式:

  1. 检查代码中的skills配置:

    • “entities"列表中必须包含"entity.system.browsable”;
    • “actions"列表中必须包含"ohos.want.action.viewData”;
    • “uris"列表中必须包含"scheme"为"https"且"host"为域名地址的元素,可选属性包含"path”、“pathStartWith"和"pathRegex”,具体请参见“uris标签说明”;
    • "domainVerify"设置为true,表示开启域名校验开关。
  2. 检查应用中指定的HAP包是否安装成功。

Web页面跳转其他应用,可以通过获取URL Scheme进行跳转,先通过getRequestUrl获取请求的URL再使用Deep Linking实现应用间跳转或者Want方式拉起小程序,具体实现可以参考此H5页面跳转微信小程序示例。(链接来自gitee)

使用Deep Linking实现应用间跳转示例如下:

import { common, OpenLinkOptions } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct Index {
  build() {
    Column() {
      Button('click me')
        .onClick(() => {
          // t值由云侧生成
          let link: string = "";
          const context = getContext(this) as common.UIAbilityContext;
          let openLinkOptions: OpenLinkOptions = {
            appLinkingOnly: false,
          };
          try {
            context.openLink(link, openLinkOptions)
              .then(() => {
              }).catch((err: BusinessError) => {
            })
          } catch (paramError) {
          }
        })
    }.width('100%')
    .height('100%')
  }
}

若开发者参考以上方案还存在问题,方便的话还请开发者提供下加载的链接,谢谢了。

更多关于HarmonyOS鸿蒙Next中Web拉起微信收银台报错;应用使用鸿蒙原生壳子内嵌食堂web链接,iOS和安卓可唤起微信支付,鸿蒙端无法唤起的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


16000019是隐式拉起失败,可能的原因是隐式启动的参数配置有误或者指定的HAP包未安装。

检查代码中的skills配置:

  • “entities"列表中必须包含"entity.system.browsable”;
  • “actions"列表中必须包含"ohos.want.action.viewData”;
  • “uris"列表中必须包含"scheme"为"https"且"host"为域名地址的元素,可选属性包含"path”、“pathStartWith"和"pathRegex”,具体请参见“uris标签说明”;
  • "domainVerify"设置为true,表示开启域名校验开关。

鸿蒙Next中Web无法唤起微信支付,是因为鸿蒙Next为纯血鸿蒙系统,其WebView内核与安卓不同,且不支持Android WebView的intent://协议。微信支付SDK的唤起机制依赖此协议,导致在鸿蒙端失效。目前微信官方尚未发布适配鸿蒙Next的SDK版本。

根据您的问题描述和截图,这是一个在HarmonyOS Next上,WebView内嵌的H5页面无法通过URL Scheme或Intent拉起微信客户端的典型问题。iOS和安卓正常而鸿蒙失败,核心原因在于HarmonyOS Next的应用沙箱和安全模型与Android有显著差异。

主要原因分析:

  1. WebView的跳转限制:HarmonyOS Next的WebView组件出于安全考虑,默认禁止或严格管控页面内发起的、指向其他应用(如weixin://)的跳转请求。这与Android WebView的默认行为不同。
  2. URL Scheme/Intent的调用方式变更:HarmonyOS Next使用Want作为统一的对象传递载体,替代了Android的Intent。传统的H5页面中通过window.location.href<iframe>触发weixin://协议链接的方式,可能无法被系统正确识别并路由到微信应用。

排查与解决步骤:

第一步:检查并配置WebView的跳转权限 在您的ArkTS/JS UI中,为WebView组件显式设置允许打开其他应用的链接。关键属性是overviewModeAccessjavaScriptAccess

// 示例代码片段
import web_webview from '@ohos.web.webview';

@Entry
@Component
struct MyWebView {
  controller: web_webview.WebviewController = new web_webview.WebviewController();

  build() {
    Column() {
      // 创建WebView组件
      Web({
        src: '您的食堂支付链接',
        controller: this.controller
      })
        .javaScriptAccess(true) // 必须开启JavaScript权限
        .overviewModeAccess(true) // 允许导航到其他应用(关键设置)
        .onBeforeLoad((event) => {
          // 可以在此处拦截并处理特定scheme的URL
          console.info('Loading url: ' + event.url);
          if (event.url.startsWith('weixin://')) {
            // 第二步:在这里处理微信Scheme
            // 可以调用系统能力尝试拉起微信
            // 为了确保拉起,可能需要使用`want`方式
            // 此处可以先注释掉默认行为进行测试: return false;
          }
          return true;
        })
    }
  }
}

第二步:在WebView的拦截回调中处理微信SchemeonBeforeLoadonUrlLoadIntercept回调中,捕获以weixin://开头的URL。然后使用HarmonyOS的UIAbility启动机制来拉起微信。

import common from '@ohos.app.ability.common';
import wantConstant from '@ohos.app.ability.wantConstant';
import { BusinessError } from '@ohos.base';

// 在onBeforeLoad回调的逻辑分支中
if (event.url.startsWith('weixin://')) {
  // 阻止WebView默认的加载行为
  // 尝试使用Want拉起微信
  let want = {
    action: 'ohos.want.action.viewData',
    // 微信在HarmonyOS上的包名,需要确认。通常与Android一致或由微信提供。
    bundleName: 'com.tencent.mm',
    abilityName: 'com.tencent.mm.ui.LauncherUI', // 微信的Ability名,需要微信公开或自行探索
    uri: event.url // 将完整的weixin://pay... URL作为参数传递
  };
  let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
  context.startAbility(want).then(() => {
    console.info('Start ability success.');
  }).catch((err: BusinessError) => {
    console.error(`Failed to start ability. Code: ${err.code}, message: ${err.message}`);
    // 如果Want方式失败,可以尝试使用更底层的`openLink`接口(如果系统支持)
  });
  return false; // 必须返回false以阻止WebView继续加载此URL
}

第三步:确认微信的HarmonyOS适配情况 目前,微信官方对HarmonyOS Next的原生适配进度是关键。您需要:

  • 核实微信是否已发布HarmonyOS Next版本的应用,并公开了其用于支付的Want参数规范(如bundleName, abilityName, 以及具体的parameters)。
  • 联系食堂Web页面的提供方,询问其是否针对HarmonyOS环境进行了支付接口的适配。他们可能需要提供HarmonyOS专用的拉起方式或SDK。

总结: 问题的根本是HarmonyOS Next的安全机制拦截了WebView内的直接应用拉起。解决方案的核心是:

  1. 配置WebView允许外部跳转(overviewModeAccess(true))。
  2. 在WebView的回调函数中拦截微信支付URL。
  3. 使用HarmonyOS的Want机制尝试拉起微信。
  4. 最终依赖微信官方对HarmonyOS Next的适配程度,提供准确的Want参数。

由于微信支付涉及第三方应用深度集成,在微信未完全公开HarmonyOS接入规范前,可能存在无法完美解决的情况。请优先从配置WebView和拦截处理入手,并同步关注微信官方的HarmonyOS开发者公告。

回到顶部