uni-app plus.runtime.arguments云打包之后获取参数异常
uni-app plus.runtime.arguments云打包之后获取参数异常
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Mac | 11.6 (20G165) | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Mac
PC开发环境操作系统版本号:11.6 (20G165)
HBuilderX类型:正式
HBuilderX版本号:3.2.9
手机系统:Android
手机系统版本号:Android 11
手机厂商:小米
手机机型:红米k20pro
页面类型:vue
打包方式:云端
项目创建方式:HBuilderX
### 示例代码:
```javascript
// #ifdef APP-PLUS
console.log(plus.runtime.launcher,"====启动来源")
console.log(plus.runtime.arguments,"参数接收")
try {
const value = uni.getStorageSync('userinfo');
if (value) {
uni.showModal({
title:'Shortcut-plus.runtime.arguments:1 ' + plus.runtime.arguments
})
if (plus.runtime.arguments&&uni.getSystemInfoSync().platform == 'android') {
this.checkArguments();
}
}
plus.globalEvent.addEventListener('newintent', (e)=>{
uni.showModal({
title:'后台运行' + plus.runtime.arguments
})
if (plus.runtime.arguments&&uni.getSystemInfoSync().platform == 'android') {
this.checkArguments();
}
});
} else {
}
} catch (e) {
// error
}
// #endif
操作步骤:
APP先打开运行,然后再使用企业微信的jsdk调用起APP,APP使用plus.runtime.arguments获取不到参数
预期结果:
打包之后,APP后台运行时,被企业微信jsdk调起可以获取到参数
实际结果:
App先打开之后,被企业微信jsdk唤起,plus.runtime.arguments获取到的参数为"",App未打开的状态下被唤起,可以获取到参数
bug描述:
在自定义基座运行时被企业微信的jsdk调用,plus.runtime.arguments这个API在 应用没启动、应用在后台的时候都能获取到参数,但是打包之后应用运行在后台获取不到参数,直接就获取到""
更多关于uni-app plus.runtime.arguments云打包之后获取参数异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html
救救孩纸啊,为什么自定义基座正常,云打包之后的就异常了
更多关于uni-app plus.runtime.arguments云打包之后获取参数异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html
自定义基座也是云打包生成的才对。可以使用原生跳转测试一下plus.runtime.arguments
原生不会呀,尴尬了,我使用plus.runtime.arguments 需要在manifest.json配置东西吗?
回复 c***@163.com: 不需要 plus.runtime.arguments 它主要存储原生启动传递的参数
你可以提供具体的测试环境给我们 我们复现一下
回复 DCloud_Android_ST: 环境没办法提供,但是我可以提供操作视频给到你们这边方便的话加QQ聊吗
回复 DCloud_Android_ST: 使用了let intent = plus.android.importClass(“android.content.Intent”); intent = plus.android.runtimeMainActivity().getIntent(); let cmd = intent.getStringExtra(“launchParam”); 原生类来接收 依旧是自定义基座正常 打包之后异常
你现在的问题是应用未启动 ,启动后可以获取到arguments 如果已经启动了在执行则获取不到。换个手机试下呢
回复 DCloud_Android_ST: 换了一台华为也是一样的效果,在未启动的时候就能接收到参数并且跳到指定页面,运行中就不行了
回复 c***@163.com: 你打一个自定义基座 把日志都打印出来 我这边测试看看 appid记得提供一下
回复 DCloud_Android_ST: 自定义基座没有异常,自定义基座的日志指的是console么,打包之后的能打出日志么?UNID745DF4 这个是APP的id
回复 DCloud_Android_ST: 问了相关的安卓大哥,他们说是onNewIntent里面没处理参数,但是自定义基座表现又是正常的
回复 DCloud_Android_ST: 能复现这个问题吗
回复 c***@163.com: 没复现 写demo云打包然后通过原生intent跳转测试 不管是首次启动还是二次启动都可以 你可以试下 https://bdpkg-tencent.dcloud.net.cn/20211014/21299450-2ccd-11ec-88a2-6173f7fbc455/Pandora.apk 原生代码Intent intent = new Intent(); intent.setClassName(“uni.UNI4F35899”, “io.dcloud.PandoraEntry”); intent.putExtra(“test”, “aaabbb”); startActivity(intent);
根据你的描述,这是一个典型的Android应用后台运行时Intent参数传递问题。在uni-app中,plus.runtime.arguments 获取的是启动应用的Intent中的extra数据。
问题分析:
- 应用未启动时:通过企业微信JS-SDK调起应用,系统会创建新的任务栈并传递Intent参数,此时
plus.runtime.arguments能正常获取参数。 - 应用已在后台运行:Android系统默认的launchMode可能导致Intent被重用或忽略。当应用已在后台时,通过JS-SDK调起可能会触发
onNewIntent()而非创建新实例,但云端打包后可能未正确处理此场景。
解决方案:
-
修改Android原生配置(关键步骤): 在
manifest.json中配置Android的launchMode:{ "app-plus": { "android": { "launchMode": "singleTask" } } }singleTask模式确保应用只有一个实例,并通过onNewIntent()接收新的Intent参数。 -
完善事件监听: 确保在应用启动时和
newintent事件中都监听参数:// App.vue 的 onLaunch 中 onLaunch: function() { // #ifdef APP-PLUS this.handleArguments(plus.runtime.arguments); // 监听新的Intent事件 plus.globalEvent.addEventListener('newintent', (e) => { this.handleArguments(plus.runtime.arguments); }); // #endif }, methods: { handleArguments(args) { if (args) { console.log('收到参数:', args); // 处理参数逻辑 this.checkArguments(args); } } } -
检查企业微信配置: 确保企业微信JS-SDK调起时正确传递了参数:
wx.invoke('launchApplication', { appid: '你的应用包名', parameter: 'your_params_here' // 确保参数正确传递 });


