第一种用法:私密消息
私密消息:运营人员分享小程序到个人或群之后,该消息只能在被分享者或被分享群内打开,不可以二次转发。
用途:主要用于不希望目标客群外的人员看到的分享信息,比如带有较高金额活动的分享。
如图:设置私密消息的分享和发送到朋友圈都是置灰的;未设置私密消息则可以长按转发。
实现思路:在活动页面统一设置为私密消息并且不允许分享,白名单控制可分享用户。
需要使用到以下三种API进行结合操作:
// 私密消息
wx.updateShareMenu({
isPrivateMessage: true,
withShareTicket: true, // 分享时是否携带ShareTicket
activityId: 'xxx' // 后端接口生成返回
})
// 禁用分享
wx.hideShareMenu({
menus: ['shareAppMessage', 'shareTimeline']
})
// 显示分享
wx.showShareMenu({
withShareTicket: true,
menus: ['shareAppMessage', 'shareTimeline']
})
注意:updateShareMenu 调用一次之后其他页面也会启用私密转发,需要在页面卸载时重新调用将 isPrivateMessage 改为 false
// 此api需要在APP.vue中的onshow调用也可在onLaunch调用 通过options取shareTicket
onShow(options) {
const { shareTicket,referrerInfo } = options
console.log(shareTicket,referrerInfo)
if(shareTicket){
this.authPrivate(shareTicket)
}
},
authPrivate(shareTicket,callback){
wx.authPrivateMessage({
shareTicket: shareTicket,
success(res) {
if(res.valid){
// 提示这个人是私密分享的接受者 可以参与活动
}else{
// 提示这个人是不是私密分享的接受者 返回首页
}
}
})
},
注意:ShareTicket 是 withShareTicket=true 后分享自动生成的这点牢记。
ShareTicket 转发出去的小程序被二次打开的时候能够获取到一些信息,例如群的标识。
从群聊、单聊消息卡片进入小程序时,通过 wx.authPrivateMessage 接口可以验证当前用户是否是私密消息的接收者。
我们只判断是否是私密消息可以只用valid判断,但是有被篡改的风险。可以使用activityId避免。
文档地址:转发 / wx.updateShareMenu (qq.com)
参考:开放能力 / 转发 / 小程序私密消息 (qq.com)
第二种用法:动态消息
需求限制参与人数组队类型流程
仅使用于组队场景,分享消息会带上当前组队的进度,如图,“成员正在加入,当前m/n人”只能修改mn,其他文字不能修改,并且mn只能为正整数。
wx.updateShareMenu({
withShareTicket: true,
isUpdatableMessage: true,
activityId: 'xxx' //后端接口生成返回
templateInfo: {
parameterList: [
{
name: 'member_count',//不用修改
value: '1' // 填实际的已加入人数
},
{
name: 'room_limit',//不用修改
value: '3' // 填实际的房间总人数
},
]
}
}),
当组队人数有变化时,调用一次下面的接口,达成动态修改页面中已参与的人数,分享的卡片状态会实时变更。
https://api.weixin.qq.com/cgi-bin/message/wxopen/updatablemsg/send?access_token=ACCESS_TOKEN
文档地址:修改动态消息 | 微信开放文档