uni-app plus.runtime.openURL()方法调用失败的回调函数没有走进去

发布于 1周前 作者 nodeper 来自 Uni-App

uni-app plus.runtime.openURL()方法调用失败的回调函数没有走进去

开发环境 版本号 项目创建方式
Mac 14.1 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Mac

PC开发环境操作系统版本号:14.1 (23B2073)

HBuilderX类型:Alpha

HBuilderX版本号:4.34

手机系统:Android

手机系统版本号:Android 12

手机厂商:华为

手机机型:P40

页面类型:vue

vue版本:vue3

打包方式:云端

示例代码:

// ios 跳转到appstore,.apk、.wgt 直接安装更新
const isResource = ['.apk', '.wgt'].some(ext => this.updateParams.downUrl.toLocaleLowerCase().includes(ext));
let marketOpened = false;
if (plus.os.name !== "Android" || !isResource) {
	plus.runtime.openURL(this.updateParams.downUrl,(err) => {
	if (err) {
		console.log("应用市场打开失败")
		marketOpened = false
	} else {
		marketOpened = true;
	}
});
if (!marketOpened) {
	let customH5URL = 'https://www.pgyer.com/111111'
	plus.runtime.openURL(customH5URL);
}
return;
}

操作步骤:

尝试打开应用市场,如果打开失败,就打开自定义H5页面

预期结果:

打开应用市场,如果打开失败,就打开自定义H5页面

实际结果:

打开应用市场失败,没有走失败回调

bug描述:

plus.runtime.openURL()方法调用失败的回调函数没有走进去


1 回复

uni-app 中,plus.runtime.openURL() 方法用于打开指定的 URL,它通常接受两个参数:URL 本身和一个可选的成功/失败回调函数。如果你发现调用失败的回调函数没有走进去,可能是因为多种原因,比如 URL 格式不正确、网络问题、权限问题等。下面是一个示例代码,展示了如何使用 plus.runtime.openURL() 并处理成功和失败的情况。

首先,确保你的项目已经正确配置了 manifest.json 中的必要权限,特别是网络权限。

// manifest.json
{
  "mp-weixin": { // 或其他平台配置
    "requiredPrivateInfos": ["networkState"]
  },
  "plus": {
    "distribute": {
      "android": {
        "permissions": [
          "INTERNET"
        ]
      },
      "ios": {
        "infoPlist": {
          "NSAppTransportSecurity": {
            "NSAllowsArbitraryLoads": true
          }
        }
      }
    }
  }
}

接下来,是调用 plus.runtime.openURL() 的代码示例:

// 在页面的 onLoad 或其他适当的位置调用
export default {
  methods: {
    openExternalUrl() {
      const url = 'https://www.example.com'; // 替换为你的目标 URL
      
      plus.runtime.openURL(url, (event) => {
        // 成功回调
        console.log('URL opened successfully:', event);
      }, (error) => {
        // 失败回调
        console.error('Failed to open URL:', error);
        // 可以在这里添加错误处理逻辑,比如提示用户
        uni.showToast({
          title: '打开链接失败',
          icon: 'none'
        });
      });
    }
  },
  onLoad() {
    // 调用方法以测试
    this.openExternalUrl();
  }
}

如果失败回调没有执行,首先检查以下几点:

  1. URL 格式:确保 URL 是有效的,并且没有语法错误。
  2. 网络权限:检查应用是否有访问网络的权限,特别是在 Android 和 iOS 上。
  3. 调试日志:使用开发者工具查看详细的错误日志,可能会有更具体的错误信息。
  4. 平台差异:不同平台(如微信小程序、H5、App等)可能有不同的行为,确保在目标平台上测试。

如果以上都确认无误,但问题依旧存在,可以考虑是否有其他系统级的拦截或安全策略导致 URL 无法打开。在实际项目中,合理的错误处理和用户提示是非常重要的,以确保良好的用户体验。

回到顶部