学习笔记--微信小程序获取场景值

0 阅读3分钟

在微信小程序中,获取用户通过分享卡片打开小程序时的场景值,核心是在 ApponShow 生命周期中获取,同时也有其他方式可以获取到。

核心获取方式

  1. ApponShow 中获取 (推荐) 这是最常用且最可靠的方式。无论是小程序冷启动(首次打开)还是热启动(从后台切换到前台),只要是通过分享卡片进入,都会触发 ApponShow 方法,并在其参数中携带场景值。

    // app.js
    App({
      onShow(options) {
        // 从 options 中获取场景值
        const scene = options.scene;
        console.log('通过 onShow 获取的场景值:', scene);
    
        // 可以根据场景值执行不同的业务逻辑
        // 例如:1007 表示单人聊天会话中的小程序消息卡片 
        if (scene === 1007) {
          // 来自单聊分享的处理
        } else if (scene === 1044) { // 1044 表示群聊会话中的小程序消息卡片 
          // 来自群聊分享的处理
        }
      }
    })
    
  2. ApponLaunch 中获取 onLaunch 只在小程序冷启动(即进程被杀死后的首次打开)时触发一次。如果小程序已经在后台,通过分享卡片再次进入时,onLaunch 不会触发,此时需要在 onShow 中获取。

    // app.js
    App({
      onLaunch(options) {
        const scene = options.scene;
        console.log('通过 onLaunch 获取的场景值:', scene);
      }
    })
    
  3. 使用 wx.getLaunchOptionsSync() 同步获取 在任何需要的地方,都可以通过这个同步API来获取小程序启动时的参数,其中就包括场景值。

    // 在任何页面或组件的逻辑中
    const launchOptions = wx.getLaunchOptionsSync();
    const scene = launchOptions.scene;
    console.log('同步获取的场景值:', scene);
    
  4. 微信小程序场景值官网链接
    微信小程序场景值列表

为什么通过分享卡片打开时,要在 onShow 里处理?

如搜索结果中提到的,当小程序已经在后台运行,用户此时点击聊天窗口中的分享卡片重新进入小程序,小程序不会重新启动,因此 onLaunch 不会被触发。但它会从后台切换到前台,这个过程一定会触发 ApponShow 事件。因此,将获取场景值的逻辑放在 onShow 中可以覆盖所有从分享卡片进入的情况。

补充说明与注意事项

  • 场景值列表:完整的场景值含义可以参考微信官方文档的场景值列表。常见的与分享相关的场景值包括1007(单聊分享)和1044(群聊分享)等。
  • 分享群聊标识(ShareTicket):如果你需要获取用户是从哪个群聊打开的小程序的群唯一标识,需要在分享前调用wx.showShareMenu({withShareTicket: true})。这样,当用户从群聊中打开分享卡片时,onShowonLaunch的参数中会包含shareTicket,可用于后续的wx.getShareInfo()接口。
  • Android 系统限制:由于Android系统限制,目前无法获取到按 Home 键退出到桌面,然后从桌面图标再次进入小程序的场景值,这种情况会保留上一次的场景值。
  • 来源信息:在部分场景值下(例如1036从App分享、1037小程序打开小程序等),options参数中还会包含referrerInfo,可以提供来源App或小程序的appId等信息。