uni-app ios系统浏览器启动app获取不到参数,launcher也不正确为default,android正常

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

uni-app ios系统浏览器启动app获取不到参数,launcher也不正确为default,android正常

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

产品分类:uniapp/App

PC开发环境操作系统:Windows

HBuilderX类型:正式

HBuilderX版本号:3.97

手机系统:iOS

手机系统版本号:iOS 12.4

手机厂商:苹果

手机机型:iphone6

页面类型:vue

vue版本:vue2

打包方式:云端

示例代码:

openApp: function (uri, fallback) {
setTimeout(function(){
location.href=uri;//ios协议启动地址
},96);
//延迟执行 如果1s没响应,就表示你手机中没有该app。就可以去下载了
setTimeout(function(){
if(Date.now() - t < 1200){
fallback();//ios下载地址
}
},1001);
},
```

操作步骤:
- 在浏览器中打开链接点击打开app

预期结果:
- 正常打开app,跳转到相应页面

实际结果:
- 正常打开app,参数获取不到,启动方式也是default 和手动打开app一样

bug描述:
ios 浏览器启动app 获取不到参数 launcher也不正确 为default, (测试了qq浏览器,safari 都不行)
android 测试了uc,默认浏览器都是正常,
参数从plus.runtime.xxx中获取的
写在 app.vue 中 onShow方法中

var launcher = plus.runtime.launcher; console.log(‘xxxxxxxxxxx’, plus.runtime); if(launcher == ‘scheme’ || launcher == ‘miniProgram’) { var args= plus.runtime.arguments; if(args){


3 回复

在问答社区搜索了一下相同问题,但是配置都是正确的,ios就是不行


看下 pages.json下有没有 condition节点 如果有去掉试一下

uni-app 中,iOS 系统浏览器启动 App 时获取不到参数,且 launcher 不正确(显示为 default),而 Android 正常,这通常是由于 iOS 系统的限制或配置问题导致的。以下是一些可能的原因和解决方案:


1. iOS Universal Links 配置问题

iOS 系统通过 Universal Links 来启动 App 并传递参数。如果 Universal Links 配置不正确,可能会导致无法获取参数或 launcher 不正确。

解决方案:

  • 检查 Universal Links 配置

    1. 确保你的 App 已经正确配置了 Universal Links。
    2. 在苹果开发者后台,为你的 App 配置 Associated Domains。
    3. uni-app 项目的 manifest.json 中,正确配置 universalLinks 字段,例如:
      "app-plus": {
        "distribute": {
          "ios": {
            "universalLinks": [
              "https://yourdomain.com/.well-known/apple-app-site-association"
            ]
          }
        }
      }
    4. 确保服务器上的 apple-app-site-association 文件正确配置,并且可以通过 HTTPS 访问。
  • 测试 Universal Links: 使用 Safari 浏览器访问配置的 Universal Links,确保能够正确跳转到 App。


2. URL Scheme 配置问题

如果 Universal Links 无法使用,可以尝试通过 URL Scheme 启动 App 并传递参数。

解决方案:

  • 配置 URL Scheme

    1. manifest.json 中配置 URL Scheme,例如:
      "app-plus": {
        "distribute": {
          "ios": {
            "urlschemewhitelist": ["yourapp"]
          }
        }
      }
    2. 在代码中监听 URL Scheme 的启动事件,例如:
      plus.runtime.getProperty(plus.runtime.appid, function (widgetInfo) {
        plus.runtime.launchApplication({
          action: 'yourapp://path?param1=value1&param2=value2'
        }, function (e) {
          console.log('Launch failed: ' + e.message);
        });
      });
  • 测试 URL Scheme: 在 Safari 浏览器中输入 yourapp://path?param1=value1&param2=value2,确保能够正确跳转到 App。


3. iOS 系统限制

iOS 系统对通过浏览器启动 App 并传递参数有一定的限制,尤其是在 Safari 中。如果 Universal Links 和 URL Scheme 都无法解决问题,可能是 iOS 系统的限制。

解决方案:

  • 使用剪贴板传递参数
    1. 在网页中将参数复制到剪贴板。
    2. 在 App 中读取剪贴板内容并解析参数。
    3. 示例代码:
      // 网页端
      navigator.clipboard.writeText('param1=value1&param2=value2');
      
      // App 端
      plus.runtime.getProperty(plus.runtime.appid, function (widgetInfo) {
        plus.runtime.launchApplication({
          action: 'yourapp://'
        }, function (e) {
          console.log('Launch failed: ' + e.message);
        });
      });
      
      // 在 App 中读取剪贴板
      const clipboardData = plus.runtime.getClipboardData();
      console.log(clipboardData);

4. 检查代码逻辑

确保代码逻辑正确,尤其是在处理启动参数时。

解决方案:

  • 监听 App 启动事件: 在 App.vue 或页面中监听 onLaunch 事件,检查是否能够正确获取参数。
    export default {
      onLaunch(options) {
        console.log('App launched with options:', options);
      }
    }
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!