【微信小程序】『001』解决onShareAppMessage分享时带参消失问题

前言

最近在用uni-app写微信小程序《天奇达人》,一款用来推荐微信小程序的小程序。

开发中用到了用户分享小程序的接口。

问题:query没有传入

然后需要知道用户分享了哪一个小程序,需要用到分享时传入的query参数了。
在这里插入图片描述

这时候看微信文档,有onShareAppMessage这个接口,但发现里面的query参数在用户接收的时候不见了。
wx.onShareAppMessage(function callback) | 微信开放文档

解决:query没有传入

研究后发现,onShareAppMessage有个隐藏的参数叫path。
通过path参数,传入类似pages/share/share?game=helloWorld这样的参数,就可以带上参数了(还意外发现这个可以直接跳转到某个页面了,不用自己实现了(ง •_•)ง)。具体代码参考下面👇

wxml里写open-type="share"的一个button

<button class="share-btn" :data-name="item.name" open-type="share" @click="shareMinapp">分享</button>

methods里面写触发分享的函数

// export default -> methods
shareMinapp(ev) {
	wx.showShareMenu(); // 触发分享
}

最外层写上监听分享的函数

// export default
onShareAppMessage: (ev) => {
	let { dataset } = ev.target;
	let name = encodeURIComponent(dataset.name);
	let query = `name=${name}`
	let returnDic = {
		title: dataset.name || '买量卖量对接平台',
		imageUrl: 'https://tekii.cn/share2.jpg', // 图片 URL,不填就是当前页面截图
		path: `pages/share/share?${query}`,
	}
}

问题:获取不到query

Object wx.getLaunchOptionsSync() | 微信开放文档
用这个发现小程序如果已经打开了,再点用户分享的是获取不到的。除非删掉小程序,再打开分享的链接,才能获取到query。

解决:获取不到query

在这里插入图片描述

wx.onShareAppMessage的文档里有提到,还可以用wx.onShow()获取到query。
那就我们就用官方的另一种方式,onShow(我在uni-app项目里是写在App.vue文件里的,原生小程序代码可以自己研究下,差不大多)。我在最外层存储launchOptions,在需要用的地方,拿出来。

// export default
onShow: function(launchOptions) {
	console.log('App Show', launchOptions);
	uni.setStorageSync('launchOptions', launchOptions); // 这里的uni.就对应微信里的wx.
}

share.vue,即使用的地方获取本地存储,用完就删

// export default
onShow() {
	let that = this;
	let launchOptions = uni.getStorageSync('launchOptions');
	uni.setStorageSync('launchOptions', null);
	let { query } = launchOptions;
	let name = decodeURIComponent(query.name || '');
	that.$set(that.$data, 'name', name);
}

附言

这是我用uni-app开发微信小程序分享功能时碰到的问题和解决方案,如果有任何不对的地方欢迎留言指正:p。有不懂的地方你也可以问,如果恰好我会,我会回答你的╰( ̄ω ̄o)

特别感谢

[1] wx.onShareAppMessage(function callback) | 微信开放文档
[2] Object wx.getLaunchOptionsSync() | 微信开放文档
[3] 查的资料太多,这里就不一一列举了
[4] 写了这篇文章的2020年07月19日12时57分的Maxmon

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在小程序中,我们可以通过在页面中定义 `onShareAppMessage` 方法来自定义分享内容。 具体步骤如下: 1. 在需要分享的页面的 `.js` 文件中,定义 `onShareAppMessage` 方法: ```javascript Page({ onShareAppMessage: function () { return { title: '分享标题', path: '/pages/index/index', imageUrl: 'http://example.com/share.jpg' } } }) ``` 2. 在 `onShareAppMessage` 方法中,我们可以返回一个对象,该对象中包含以下参数: - `title`:分享标题,必填项。 - `path`:分享路径,必填项。 - `imageUrl`:分享图片地址,可选项。 3. 在 `onShareAppMessage` 方法中,我们可以通过调用微信提供的 API 获取当前页面的一些信息,例如页面标题、路径等。例如: ```javascript Page({ onShareAppMessage: function () { const title = this.data.title // 页面标题 const path = '/pages/index/index' // 页面路径 const imageUrl = 'http://example.com/share.jpg' // 分享图片地址 return { title: title, path: path, imageUrl: imageUrl } } }) ``` 4. 在 `.wxml` 文件中,我们可以添加一个分享按钮,并将其绑定到 `onShareAppMessage` 方法: ```html <button class="share-btn" bindtap="onShareTap">分享给好友</button> ``` ```javascript Page({ onShareTap: function () { wx.showShareMenu({ withShareTicket: true }) }, onShareAppMessage: function () { // ... } }) ``` 以上就是在微信小程序中通过 `onShareAppMessage` 方法自定义分享内容的方法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值