SimpleJalon
SimpleJalon
  • 发布:2019-06-02 16:15
  • 更新:2020-11-16 15:08
  • 阅读:4717

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

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

  • g417317028@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

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

  • 1186373395@qq.com

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

    2020-07-02 16:34

  • SimpleJalon (作者)

    回复 1186373395@qq.com: https://ext.dcloud.net.cn/plugin?id=2048

    2020-07-02 16:56

水手

水手 - 资深老开发

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

风云杭州

风云杭州 - 请加微信18616792121,拉你进uniapp学习交流群,加的时候请备注uniapp

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

风云杭州

风云杭州 - 请加微信18616792121,拉你进uniapp学习交流群,加的时候请备注uniapp

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

风云杭州

风云杭州 - 请加微信18616792121,拉你进uniapp学习交流群,加的时候请备注uniapp

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

838900155@qq.com

838900155@qq.com

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

  • 风云杭州

    launcher是miniProgram 吗?

    2020-11-16 19:38

  • 838900155@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

要回复问题请先登录注册