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

2 回复

根据问题描述和知识库内容,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)的配置或调用方式导致的。根据你的描述,以下是几个关键排查点:

  1. URL Scheme格式检查

    • 确保B应用的URL Scheme在Xcode中正确配置(Targets → Info → URL Types),Scheme值必须与A应用中调用的scheme://完全一致(区分大小写)。
    • 在B应用的manifest.json中,urlschemewhitelist需要配置完整的Scheme(例如:["scheme"]),且与Xcode中的Scheme一致。
  2. 参数传递方式

    • iOS中通过URL Scheme传递参数时,参数需要拼接在?后,如scheme://auth?code_challenge=123456789。你的代码中已经正确拼接,但需注意特殊字符(如=)不需要编码。
    • 建议在A应用调用时增加错误捕获,确认plus.runtime.openURL是否执行成功。
  3. B应用参数获取时机

    • 在B应用中,plus.runtime.arguments仅在应用冷启动(完全关闭后通过Scheme唤醒)时才能获取到参数。如果B应用已在后台运行,参数可能无法通过arguments捕获。
    • 尝试通过监听plus.runtime事件获取参数:
      document.addEventListener('plusready', () => {
          plus.runtime.addEventListener('newintent', (e) => {
              console.log('Scheme参数:', plus.runtime.arguments);
          });
      });
回到顶部