IOS配置了urltypes里的urlschemes uni-app也配置了白名单urlschemewhitelist 但是A应用向B应用传参时 B应用获取不到参数
IOS配置了urltypes里的urlschemes uni-app也配置了白名单urlschemewhitelist 但是A应用向B应用传参时 B应用获取不到参数
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| PC | Windows 24H2 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
PC开发环境操作系统版本号:版本 24H2(OS 内部版本 26100.6584)
HBuilderX类型:正式
HBuilderX版本号:4.66
手机系统:iOS
手机系统版本号:iOS 17
手机厂商:苹果
手机机型:iphone14
页面类型:vue
vue版本:vue2
打包方式:云端
项目创建方式:HBuilderX
操作步骤:
A应用代码:
openWorld() {
const scheme = 'scheme' // B应用scheme
const url = `${scheme}://auth?code_challenge=123456789`;
plus.runtime.openURL(url, (res) => {
// 失败回调(如目标 App 未安装、Scheme 无效)
console.log("唤醒失败:", res);
uni.showToast({
title: "未检测到目标 App,请先安装",
icon: "none"
});
});
}
B应用App.vue代码(在onLaunch,onShow都试图获取参数)
async onLaunch() {
const options = uni.getLaunchOptionsSync();
console.log('zhang::::onShow', options)
const args= plus.runtime.arguments
console.log('zhang:::args:',args);
}
onShow() {
const options = uni.getLaunchOptionsSync();
console.log('zhang::::onShow', options)
const args= plus.runtime.arguments
console.log('zhang:::args:',args);
}
预期结果:
{
"path": "auth",
"query": {"code_challenge": 123456789},
"scene": 1001,
"referrerInfo": {
"extraData": {}
},
"channel": "phone",
"launcher": "default"
}
实际结果:
{
"path": "pages/index/index", //B引用的首页
"query": {}, //拿不到参数
"scene": 1001,
"referrerInfo": {
"extraData": {}
},
"channel": "phone",
"launcher": "default"
}
更多关于IOS配置了urltypes里的urlschemes uni-app也配置了白名单urlschemewhitelist 但是A应用向B应用传参时 B应用获取不到参数的实战教程也可以访问 https://www.itying.com/category-93-b0.html
根据问题描述和知识库内容,B应用无法获取参数的原因及解决方案如下:
生命周期问题:iOS平台通过scheme唤醒应用时,参数获取应放在onShow而非onLaunch中。文档明确说明:“建议在应用生命周期app.vue的onShow事件中获取”(参考链接)。
参数解析方式:plus.runtime.arguments返回的是完整URL字符串(如scheme://auth?code_challenge=123456789),需手动解析参数。示例代码应改为:
onShow(options) {
const url = plus.runtime.arguments;
// 解析URL获取参数
if (url) {
const query = new URL(url).searchParams;
console.log(‘参数:’, Object.fromEntries(query));
}
}
白名单配置验证:虽然已配置urlschemewhitelist,但需确保A应用的scheme已添加到B应用的白名单列表中,且iOS 15+设备不超过50个限制。
调试建议:在B应用onShow中同时打印uni.getLaunchOptionsSync()和plus.runtime.arguments,确认参数传递链路。
注意:iOS对scheme参数传递有特殊处理,直接使用uni.getLaunchOptionsSync().query可能无法获取到参数,必须通过解析plus.runtime.arguments实现。
内容为 AI 生成,仅供参考
更多关于IOS配置了urltypes里的urlschemes uni-app也配置了白名单urlschemewhitelist 但是A应用向B应用传参时 B应用获取不到参数的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这个问题通常是由于iOS应用间通信(URL Scheme)的配置或调用方式导致的。根据你的描述,以下是几个关键排查点:
-
URL Scheme格式检查:
- 确保B应用的URL Scheme在Xcode中正确配置(Targets → Info → URL Types),Scheme值必须与A应用中调用的
scheme://完全一致(区分大小写)。 - 在B应用的
manifest.json中,urlschemewhitelist需要配置完整的Scheme(例如:["scheme"]),且与Xcode中的Scheme一致。
- 确保B应用的URL Scheme在Xcode中正确配置(Targets → Info → URL Types),Scheme值必须与A应用中调用的
-
参数传递方式:
- iOS中通过URL Scheme传递参数时,参数需要拼接在
?后,如scheme://auth?code_challenge=123456789。你的代码中已经正确拼接,但需注意特殊字符(如=)不需要编码。 - 建议在A应用调用时增加错误捕获,确认
plus.runtime.openURL是否执行成功。
- iOS中通过URL Scheme传递参数时,参数需要拼接在
-
B应用参数获取时机:
- 在B应用中,
plus.runtime.arguments仅在应用冷启动(完全关闭后通过Scheme唤醒)时才能获取到参数。如果B应用已在后台运行,参数可能无法通过arguments捕获。 - 尝试通过监听
plus.runtime事件获取参数:document.addEventListener('plusready', () => { plus.runtime.addEventListener('newintent', (e) => { console.log('Scheme参数:', plus.runtime.arguments); }); });
- 在B应用中,

