张脑丸儿
张脑丸儿
  • 发布:45 分钟前
  • 更新:45 分钟前
  • 阅读:12

【报Bug】IOS配置了urltypes里的urlschemes,也配置了白名单urlschemewhitelist。但是A应用向B应用传参时,B应用获取不到参数。

分类:uni-app

产品分类: 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"  
}

bug描述:

我们有两个应用
A应用想唤醒B应用,并且携带参数到B应用。
IOS现在能唤醒B应用,但是在B应用拿不到参数。

45 分钟前 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

根据问题描述和知识库内容,B应用无法获取参数的原因及解决方案如下:

  1. 生命周期问题:iOS平台通过scheme唤醒应用时,参数获取应放在onShow而非onLaunch中。文档明确说明:"建议在应用生命周期app.vue的onShow事件中获取"(参考链接)。

  2. 参数解析方式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));  
    }  
    }
  3. 白名单配置验证:虽然已配置urlschemewhitelist,但需确保A应用的scheme已添加到B应用的白名单列表中,且iOS 15+设备不超过50个限制。

  4. 调试建议:在B应用onShow中同时打印uni.getLaunchOptionsSync()plus.runtime.arguments,确认参数传递链路。

注意:iOS对scheme参数传递有特殊处理,直接使用uni.getLaunchOptionsSync().query可能无法获取到参数,必须通过解析plus.runtime.arguments实现。

内容为 AI 生成,仅供参考

要回复问题请先登录注册