uni-app ios系统浏览器启动app获取不到参数,launcher也不正确为default,android正常
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){
在问答社区搜索了一下相同问题,但是配置都是正确的,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 配置:
- 确保你的 App 已经正确配置了 Universal Links。
- 在苹果开发者后台,为你的 App 配置 Associated Domains。
- 在
uni-app
项目的manifest.json
中,正确配置universalLinks
字段,例如:"app-plus": { "distribute": { "ios": { "universalLinks": [ "https://yourdomain.com/.well-known/apple-app-site-association" ] } } }
- 确保服务器上的
apple-app-site-association
文件正确配置,并且可以通过 HTTPS 访问。
-
测试 Universal Links: 使用 Safari 浏览器访问配置的 Universal Links,确保能够正确跳转到 App。
2. URL Scheme 配置问题
如果 Universal Links 无法使用,可以尝试通过 URL Scheme 启动 App 并传递参数。
解决方案:
-
配置 URL Scheme:
- 在
manifest.json
中配置 URL Scheme,例如:"app-plus": { "distribute": { "ios": { "urlschemewhitelist": ["yourapp"] } } }
- 在代码中监听 URL Scheme 的启动事件,例如:
plus.runtime.getProperty(plus.runtime.appid, function (widgetInfo) { plus.runtime.launchApplication({ action: 'yourapp://path?param1=value1¶m2=value2' }, function (e) { console.log('Launch failed: ' + e.message); }); });
- 在
-
测试 URL Scheme: 在 Safari 浏览器中输入
yourapp://path?param1=value1¶m2=value2
,确保能够正确跳转到 App。
3. iOS 系统限制
iOS 系统对通过浏览器启动 App 并传递参数有一定的限制,尤其是在 Safari 中。如果 Universal Links 和 URL Scheme 都无法解决问题,可能是 iOS 系统的限制。
解决方案:
- 使用剪贴板传递参数:
- 在网页中将参数复制到剪贴板。
- 在 App 中读取剪贴板内容并解析参数。
- 示例代码:
// 网页端 navigator.clipboard.writeText('param1=value1¶m2=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); } }