uni-app 通过外部url调用UrlSchemes拉起APP无法使用

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

uni-app 通过外部url调用UrlSchemes拉起APP无法使用

开发环境 版本号 项目创建方式
Windows 不知道 HBuilderX

产品分类:uniapp/App
PC开发环境操作系统:Windows
HBuilderX类型:正式
HBuilderX版本号:4.29
手机系统:Android
手机系统版本号:Android 13
手机厂商:模拟器
手机机型:雷电模拟器
页面类型:vue
vue版本:vue3
打包方式:云端
项目创建方式:HBuilderX

操作步骤:

{
"name" : "33333",
"appid" : "UNI91AF2F0",
"description" : "",
"versionName" : "1.0.0",
"versionCode" : "100",
"transformPx" : false,
/* 5+App特有相关 */
"app-plus" : {
"usingComponents" : true,
"nvueStyleCompiler" : "uni-app",
"compilerVersion" : 3,
"splashscreen" : {
"alwaysShowBeforeRender" : true,
"waiting" : true,
"autoclose" : true,
"delay" : 0
},
/* 模块配置 */
"modules" : {},
/* 应用发布信息 */
"distribute" : {
/* android打包配置 */
"android" : {
"permissions" : [
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
],
"schemes" : "yourapp"
},
/* ios打包配置 */
"ios" : {},
/* SDK配置 */
"sdkConfigs" : {}
}
},
/* 快应用特有相关 */
"quickapp" : {},
/* 小程序特有相关 */
"mp-weixin" : {
"appid" : "",
"setting" : {
"urlCheck" : false
},
"usingComponents" : true
},
"mp-alipay" : {
"usingComponents" : true
},
"mp-baidu" : {
"usingComponents" : true
},
"mp-toutiao" : {
"usingComponents" : true
},
"uniStatistics" : {
"enable" : false
},
"vueVersion" : "3"
} 

预期结果:

预期结果就直接能拉起APP

实际结果:

就没反应,没有代码,新建的项目就没有效果

bug描述:

新建一个新的Uniapp,在APP常用其他设置里面设置UrlSchemes,随便数值,我设置yourapp。

通过html代码```javascript
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Call UniApp</title>
</head>
<body>
<h1>点击下面的链接来启动 UniApp 应用</h1>
<a href="yourapp://">点击这里启动应用</a>
</body>
</html>

点击启动应用完全就没有反应。


2 回复

打自定义基座或正式包后生效


在处理 uni-app 通过外部 URL 调用 UrlSchemes 拉起 APP 的问题时,我们需要确保几个关键点正确配置和实现。以下是一个简要的代码案例和配置说明,帮助你排查和解决该问题。

1. 配置 UrlSchemes

首先,确保你的 APP 在 manifest.json 中正确配置了 UrlSchemes。例如:

{
  "mp-weixin": {},
  "app-plus": {
    "distribute": {
      "apple": {},
      "android": {},
      "urlSchemes": [
        "yourappscheme"
      ]
    }
  }
}

这里,yourappscheme 是你的 APP 的自定义 URL Scheme。

2. 在 APP 中处理 URL Scheme

uni-app 中,你可以通过监听 onLaunchonShow 生命周期函数来处理 URL Scheme。例如:

// main.js 或 App.vue 中的 onLaunch 或 onShow
export default {
  onLaunch: function (options) {
    if (options && options.query) {
      const urlParams = options.query;
      console.log('URL Scheme 参数:', urlParams);
      // 根据 urlParams 做相应处理
    }
  },
  // 其他配置...
}

3. 外部 URL 调用

确保外部 URL 调用格式正确。例如,如果你的 APP Scheme 是 yourappscheme,则外部调用链接应该是:

<a href="yourappscheme://somepath?param1=value1&param2=value2">打开APP</a>

或者在移动浏览器中通过 JavaScript 触发:

window.location.href = 'yourappscheme://somepath?param1=value1&param2=value2';

4. 调试与测试

  • Android:确保 AndroidManifest.xml 中配置了相应的 Intent Filter。通常,uni-app 会自动处理这部分,但如果你遇到问题,可以手动检查。
  • iOS:在 Info.plist 中添加 URL Types 配置,这通常由 uni-app 打包工具自动处理。
  • 测试:使用不同的设备和浏览器测试你的 URL Scheme 是否能被正确识别并打开 APP。

5. 注意事项

  • 确保 APP 已安装并能在设备上正常运行。
  • 检查 URL Scheme 是否被其他 APP 占用。
  • 如果是在 WebView 中调用,确保 WebView 允许跳转到外部 APP。

通过上述步骤,你应该能够排查和解决 uni-app 通过外部 URL 调用 UrlSchemes 拉起 APP 无法使用的问题。如果问题依旧存在,可能需要进一步检查 APP 的具体实现和配置细节。

回到顶部