SimpleJalon
SimpleJalon
  • 发布:2019-06-02 16:15
  • 更新:2023-11-03 11:54
  • 阅读:12548

uni-app plus.runtime.arguments 获取参数问题

分类:uni-app

详细问题描述

贴一下我最终的解决方案。感谢官方技术解答

在 app.vue 中 methods 插入代码:

checkArguments() {  
            console.log('Shortcut-plus.runtime.launcher: ' + plus.runtime.launcher);  
            if (plus.runtime.launcher == 'shortcut') {  
                // 通过快捷方式启动,iOS平台表示通过3D Touch快捷方式,Android平台表示通过桌面快捷方式启动  
                try {  
                    var cmd = JSON.parse(plus.runtime.arguments);  
                    console.log('Shortcut-plus.runtime.arguments: ' + plus.runtime.arguments);  
                    var type = cmd && cmd.type;  
                    console.log(JSON.stringify( cmd ))  
                } catch (e) {  
                    console.log('Shortcut-exception: ' + e);  
                }  
            }  
        }

然后在app.vue 中onLaunch 调用

this.checkArguments(); // 检测启动参数  
  
// 重点是以下: 一定要监听后台恢复 !一定要   
plus.globalEvent.addEventListener('newintent', (e)=>{  
            this.checkArguments(); // 检测启动参数  
        });

IOS下

使用场景: 当我通过 3d touch 启动APP时,我是在 onshow中监听 plus.runtime.arguments 参数,但是我发现 在onshow 中 每次打开都会获取这个参数,能否清理掉?

最好能有直接清理的api

--- 目前遇到的问题是,当我在 app.vue 中 onshow 获取 应用启动的参数:plus.runtime.arguments 这个是可行的, 那么当我APP打开以后,我APP进入到了后台 然后再恢复到前台 任然会走一次 onshow的生命周期 然后获取到 plus.runtime.arguments 中的参数, 那么我这参数就是重复了。 相当于我还会走一次 plus.runtime.arguments 获取到的参数的逻辑 这样肯定是不行的。

然后我把 获取 plus.runtime.arguments 放在 onLaunch 能解决重复获取的问题 但是当APP在后台恢复到前台的时候 这个生命周期肯定是不会生效的,毕竟这时候APP还在活跃,没有重启。。

所以需求就是:
能不能手动清理 plus.runtime.arguments 中的参数昵? 比如我onshow的时候获取 我onhide的时候 我自己去清理一下 plus.runtime.arguments 这个参数。

或者有没有其它更好的方案可以解决?

2019-06-02 16:15 负责人:无 分享
已邀请:
SimpleJalon

SimpleJalon (作者) - 个人承接PHP、uniapp项目,有案例,联系QQ 615773740,不接受外地工作,可付费提供技术支持。添加QQ时务必备注来意以及添加渠道,渠道可以写:`uniapp`

这个问题我已经细看了5+的那个例子,这个问题在5+中是不会出现的 因为也可以监听pluready 但是uniapp是没有的,所以导致我放在 onLaunch 的时候 只有应用启动的时候可以获取到,当应用进入到后台(此时并没有销毁) 下次再从桌面的 shortcut 打开APP 就不会执行 onLaunch 了,因为( onLaunch 当uni-app 初始化完成时触发(全局只触发一次))。 所以 我就放在onShow 那么放在 onShow 的问题就是1.每次可以获取到参数,但是假设这时候 用户做APP后台进入 并没有其它操作 那么 plus.runtime.arguments 依然获取的是 上一次的参数。 然后根据上述反馈 使用 plus.runtime.arguments = null 但是我发现 设置为null 以后 下次 再从桌面的 shortcut 菜单启动 获取的参数一直是null, 你可以直接创建个例子 试试UNI-APP的就知道了。希望及时关注并且回复 不然 shortcut 在UNI-APP就没啥用了。

  • jantho

    plus.runtime.arguments = null;和plus.runtime.arguments = ‘’一起用就清掉了啊


    2020-08-04 10:29

w***@163.com

w***@163.com

这个问题我解决了,在App.vue中
onShow中监听plus.runtime.arguments,但需要延时处理,不延时会出现不能正确获取plus.runtime.arguments值
onHide中清除plus.runtime.arguments值
做了这2件事,其他都不需要做

  • 1***@qq.com

    plus.runtime.arguments 在ios环境真是绝了,始终拿到的是上一次数据。清空arguments 还不能在拿到之后立即清空。


    2022-09-08 18:21

  • w***@163.com

    回复 1***@qq.com: 延时就能拿到最新一次的,要在onHide中清空


    2022-09-15 11:04

DCloud_App_Array

DCloud_App_Array

可通过plus.runtime.launcher判断启动方式,值为"shortcut"在iOS平台表示通过3D Touch快捷方式:

if(plus.runtime.launcher=='shortcut'){  
    // 表示通过快捷方式启动  
}
  • SimpleJalon (作者)

    老哥 你没明白我的意思 建议在多看看我反馈的问题点哦


    2019-06-05 15:17

  • DCloud_App_Array

    回复 SimpleJalon: 通过plus.runtime.launcher就可以分辨出是从快捷方式启动(shortcut)还是点击桌面图标启动(default)。点击桌面启动时直接忽略plus.runtime.arguments参数即可


    2019-06-05 15:34

  • DCloud_IOS_XTY

    回复 SimpleJalon: 切换到前后台不会修改launcher 和arguments 的值,你读完之后可以直接将plus.runtime.arguments置空


    2019-06-05 16:09

  • SimpleJalon (作者)

    回复 DCloud_IOS_XTY: 对 我想知道的就是如何置空


    2019-06-05 16:11

  • DCloud_IOS_XTY

    plus.runtime.arguments = null


    2019-06-05 18:36

  • SimpleJalon (作者)

    回复 DCloud_IOS_XTY: OK 我尝试下


    2019-06-05 23:13

  • SimpleJalon (作者)

    回复 DCloud_IOS_XTY: 你这个办法,可以清理,但是当APP 第二次从页面的3D touch 点进去后 是不会执行的 而且值是NULL


    Shortcut-plus.runtime.launcher: shortcut at App.vue:68

    23:14:40.368 Shortcut-plus.runtime.arguments: null at App.vue:73

    23:14:40.389 null


    2019-06-05 23:18

  • SimpleJalon (作者)

    回复 SimpleJalon: 回复 DCloud_IOS_XTY: 第二次进入的时候 APP并没有销毁 只是 进入后台了。


    2019-06-05 23:18

  • SimpleJalon (作者)

    回复 DCloud_IOS_XTY: 你qq 多少 或者加下我的qq 615773740 我直接qq 消息和你反馈吧。


    2019-06-06 09:49

  • SimpleJalon (作者)

    回复 DCloud_App_Array: 那样我如何根据点的是哪个菜单 判断启动哪个页面昵?


    2019-06-06 09:50

  • g***@163.com

    回复 DCloud_IOS_XTY: =null不管用的,你把if(plus.runtime.launcher=='shortcut'){这个判断放开试试,根本就没清掉,只是有这个判断在,误以为清掉了而已。


    2019-07-10 10:55

  • 风云杭州

    用hbuilder2.9.8打包后,从微信小程序打开app, plus.runtime.launcher 的值 从以前的 miniProgram 变成了 scheme ,麻烦检查下哈。。。这个问题不解决,不敢发布新版本了


    2020-11-16 21:20

  • Dright

    回复 风云杭州: +1


    2022-03-28 16:07

DCloud_IOS_XTY

DCloud_IOS_XTY

如果切到后台在点击shortcut进去是会更新plus.runtime.arguments 的, 并触发名为newintent 的globalevent

  • SimpleJalon (作者)

    加下qq 细聊下


    2019-06-06 10:36

  • SimpleJalon (作者)

    是不是可以这样:

    在 onLaunch 扑获 plus.runtime.arguments 并且监听 newintent 然后下次从后台恢复的时候就会触发:newintent 了?


    2019-06-06 10:38

  • SimpleJalon (作者)

    嗯 的确可以:


    plus.globalEvent.addEventListener('newintent', (e)=>{

    this.checkArguments(); // 检测启动参数

    });


    2019-06-06 10:42

  • FE_liyangyang

    回复 SimpleJalon: 请问您的这个问题解决了吗?


    2020-07-02 16:34

  • SimpleJalon (作者)

    回复 FE_liyangyang: https://ext.dcloud.net.cn/plugin?id=2048


    2020-07-02 16:56

水手

水手 - 资深老开发

这个问题 麻烦了。 我也碰到了

风云杭州

风云杭州

请教app分享微信小程序,再由微信小程序 打开app ,这个时候app该怎么监控?

风云杭州

风云杭州

遇到同样问题,等下测试下试试

风云杭州

风云杭州

按照这个方法确实可以,不错的

8***@qq.com

8***@qq.com

请问你这个最后怎么解决的,我现在遇到的问题是,app 第一次安装启动,在微信里唤醒打开app, plus.runtime.arguments 是没有参数的,必须要先杀掉app,这时候在打开就能获取到参数了

  • 风云杭州

    launcher是miniProgram 吗?


    2020-11-16 19:38

  • 8***@qq.com

    回复 风云杭州: 不是,我launcher 打出来是‘default’


    2020-11-16 22:24

  • kinnet

    回复 风云杭州: 我安卓微信是miniProgram,IOS微信是scheme且没有值。


    2020-12-10 17:46

  • 风云杭州

    回复 kinnet: 现在的hbuilder版本有bug,官方已经确认,具体可以看我相关的帖子。下个hbuilder版本会修复这个bug。因为这个bug,我已经一个月没法发布新版本了


    2020-12-12 01:28

  • kinnet

    回复 风云杭州:好,希望下个版本解决问题。


    2020-12-14 10:59

  • 风云杭州

    回复 kinnet: hbuilder新版本还是没更新呢?!郁闷死 。。。按理这个是影响相当大的bug哈,社区里其他人没发现吗?


    2020-12-14 12:00

  • kinnet

    回复 风云杭州: 随时关注吧,等着解决办法。


    2020-12-15 17:36

  • 近水楼台

    请问下解决了么?newintent不触发


    2023-02-20 16:43

  • 懒懒的

    回复 近水楼台: 请问你解决了吗,我也是newintent不触发


    2023-05-17 11:04

Angels_aria

Angels_aria

问题解决没?第一次启动APP之后成功跳转,APP保持在后台,然后再进APP就不跳转了

  • 百倍

    你好解决了吗?我也遇到了


    2022-10-11 15:27

  • x***@163.com

    回复 百倍: +1


    2023-05-30 13:58

  • f***@gmail.com

    你们解决了吗 一年多了 还没有修复。。。


    2024-01-09 17:14

  • y***@163.com

    回复 f***@gmail.com: 没解决。。。。


    2024-03-22 15:24

莫急

莫急

4年了 居然没有决绝

要回复问题请先登录注册