收藏
回答

如何区别是从聊天素材打开的小程序?

supportedMaterials 属性配置后,在应用onshow生命周期里能获取到素材相关参数。

情况一:从素材里用微信小程序打开,在onshow里获取到素材相关参数和场景值。

情况二:操作情况一后,我从小程序切换到别的界面比如切换到支付宝,再切回小程序,此时也触发小程序的onshow,获取到一样的素材相关参数和场景值。


如何区别是从聊天素材打开的小程序(区别情况一和情况二),而不是非聊天素材打开的小程序

回答关注问题邀请回答
收藏

3 个回答

  • 阿范🎈
    阿范🎈
    03-12

    以下是我的方案望采纳

    先在onLoad方法中加如下代码

    // #ifdef MP-WEIXIN || MP-QQ
    		const opt = uni.getLaunchOptionsSync();
    		that.toUploadByChat(opt,false);
    		uni.onAppShow((res) => {
    			that.toUploadByChat(opt,true);
    		});
    		// #endif
    


    接着创建一个toUploadByChat方法

    function(opt,check){
    			const that = this;
    			if(opt.scene != 1173){
    				return;
    			}
    			if(!opt.forwardMaterials || opt.forwardMaterials.length < 1){
    				return;
    			}
    			let files = opt.forwardMaterials;
    			let str = "";
    			for(let i=0;i<files.length;i++){
    				str += files[i].name+files[i].size+"|";
    			}
    			if(check ){
    				if(that.uploadData.lastSizeStr == str){
    					return;
    				}
    			}
    			that.uploadData.lastSizeStr = str;
    			that.uploadData.toUploadFiles = files;
    			that.openUploadDir("");
    			that.uploadData.show = true;
    		}
    


    03-12
    有用
    回复
  • CRMEB
    CRMEB
    2023-09-04

    在情况一和情况二中,您可以在 onShow 事件中获取到当前小程序的场景值(即 options.scene)。以下是一些常见的场景值和对应的含义:

    1011:从扫描二维码进入小程序

    1014:从手机相册选择文件后打开小程序

    1047:从聊天顶部小程序入口(右上角 "+")打开小程序

    1089:从微信聊天主界面长按小程序图标进入小程序

    1090:从聊天顶部搜索框搜索并打开小程序

    对于情况一,当从聊天素材里用微信小程序打开时,options.scene 的值可能是 1047 或其他聊天相关的场景值。您可以通过判断 options.scene 是否为聊天相关的场景值,来确定是从聊天素材打开的小程序。

    而对于情况二,当您从支付宝或其他界面切换回小程序时,虽然也会触发 onShow 事件,但 options.scene 的值可能是之前打开小程序时的场景值,并不代表当前的真实场景。因此,在情况二中,您无法通过 options.scene 来区分。

    2023-09-04
    有用
    回复
  • 那一抹笑😃 穿透阳光
    那一抹笑😃 穿透阳光
    2023-09-04

    场景值应该不一样吧

    2023-09-04
    有用
    回复 1
    • 董路飞
      董路飞
      2023-09-04
      uni-app写的,体验版调试里看到是一样的1173
      2023-09-04
      回复
登录 后发表内容