在微信小程序中,获取用户通过分享卡片打开小程序时的场景值,核心是在 App 的 onShow 生命周期中获取,同时也有其他方式可以获取到。
核心获取方式
-
在
App的onShow中获取 (推荐) 这是最常用且最可靠的方式。无论是小程序冷启动(首次打开)还是热启动(从后台切换到前台),只要是通过分享卡片进入,都会触发App的onShow方法,并在其参数中携带场景值。// app.js App({ onShow(options) { // 从 options 中获取场景值 const scene = options.scene; console.log('通过 onShow 获取的场景值:', scene); // 可以根据场景值执行不同的业务逻辑 // 例如:1007 表示单人聊天会话中的小程序消息卡片 if (scene === 1007) { // 来自单聊分享的处理 } else if (scene === 1044) { // 1044 表示群聊会话中的小程序消息卡片 // 来自群聊分享的处理 } } }) -
在
App的onLaunch中获取onLaunch只在小程序冷启动(即进程被杀死后的首次打开)时触发一次。如果小程序已经在后台,通过分享卡片再次进入时,onLaunch不会触发,此时需要在onShow中获取。// app.js App({ onLaunch(options) { const scene = options.scene; console.log('通过 onLaunch 获取的场景值:', scene); } }) -
使用
wx.getLaunchOptionsSync()同步获取 在任何需要的地方,都可以通过这个同步API来获取小程序启动时的参数,其中就包括场景值。// 在任何页面或组件的逻辑中 const launchOptions = wx.getLaunchOptionsSync(); const scene = launchOptions.scene; console.log('同步获取的场景值:', scene); -
微信小程序场景值官网链接
微信小程序场景值列表
为什么通过分享卡片打开时,要在 onShow 里处理?
如搜索结果中提到的,当小程序已经在后台运行,用户此时点击聊天窗口中的分享卡片重新进入小程序,小程序不会重新启动,因此 onLaunch 不会被触发。但它会从后台切换到前台,这个过程一定会触发 App 的 onShow 事件。因此,将获取场景值的逻辑放在 onShow 中可以覆盖所有从分享卡片进入的情况。
补充说明与注意事项
- 场景值列表:完整的场景值含义可以参考微信官方文档的场景值列表。常见的与分享相关的场景值包括
1007(单聊分享)和1044(群聊分享)等。 - 分享群聊标识(ShareTicket):如果你需要获取用户是从哪个群聊打开的小程序的群唯一标识,需要在分享前调用
wx.showShareMenu({withShareTicket: true})。这样,当用户从群聊中打开分享卡片时,onShow或onLaunch的参数中会包含shareTicket,可用于后续的wx.getShareInfo()接口。 - Android 系统限制:由于Android系统限制,目前无法获取到按 Home 键退出到桌面,然后从桌面图标再次进入小程序的场景值,这种情况会保留上一次的场景值。
- 来源信息:在部分场景值下(例如1036从App分享、1037小程序打开小程序等),
options参数中还会包含referrerInfo,可以提供来源App或小程序的appId等信息。