uni-app 安卓webview中H5(intent协议)无法拉起第三方应用 安卓原生webview测试可以

uni-app 安卓webview中H5(intent协议)无法拉起第三方应用 安卓原生webview测试可以

开发环境 版本号 项目创建方式
Windows win7 HBuilderX

操作步骤:

intent://deeplink?ansimclick=ansimclick&service=onlinepayappkr&cardCompanyCode=02&paymentCode=bM2tWGNWCd9%2BvALWHCRRsg%3D%3D&shopMallName=Qxj0gaTbp4GrcMA5S6KiAw%3D%3D&corpRegNo=wVHPBUmBPk8pNbdRvWZukA%3D%3D&settlementAmount=x8swajXXcIBeboFKVduSsQ%3D%3D&initialVector=MjQxNzVBQjcwNDE1MDIxOA%3D%3D/#Intent;scheme=samsungpay;package=com.samsung.android.spaylite;end

预期结果:

能拉起com.samsung.android.spaylite 应用

实际结果:

没有任何反应

bug描述:

uniapp打包安卓app,里面有webview 是第三方的H5。H5里面有支付无法拉起第三方应用。intent协议不行。原生安卓中的webview H5可以


更多关于uni-app 安卓webview中H5(intent协议)无法拉起第三方应用 安卓原生webview测试可以的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 安卓webview中H5(intent协议)无法拉起第三方应用 安卓原生webview测试可以的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在 uni-app 的 WebView 组件中,Android 平台默认拦截了 intent:// 协议,导致无法直接拉起第三方应用。这与原生 Android WebView 的行为不同,原生 WebView 默认支持 intent 协议。

解决方案:

  1. 拦截并处理 intent 协议
    在 WebView 的 [@shouldOverrideUrlLoading](/user/shouldOverrideUrlLoading) 事件中捕获 intent 链接,通过 plus.runtime.openURL() 手动触发:

    <web-view [@shouldOverrideUrlLoading](/user/shouldOverrideUrlLoading)="handleUrlLoad" :src="h5Url"></web-view>
    
    methods: {
      handleUrlLoad(e) {
        if (e.url.startsWith('intent://')) {
          plus.runtime.openURL(e.url); // 调用系统能力处理 intent
          return true; // 阻止 WebView 默认跳转
        }
        return false;
      }
    }
    
  2. 配置 WebView 允许 intent 协议
    manifest.json 的 Android 配置中声明支持 intent 的 scheme:

    "app-plus": {
      "plugins": {
        "WebView": {
          "schemes": ["intent"]
        }
      }
    }
回到顶部