前言
距离1月10日模板消息下架只有2天了,在社区里经常能看到有帖子在问关于怎么记录订阅次数的问题,这里在这里介绍一下自己用的简单方案,仅供参考。
误区一
上面这个图大家应该都比较熟悉了,很多人总是误以为勾选“总是保持以上选择,不再询问”,就可以无限发送订阅消息,这个是错误的想法,勾选和不勾选唯一的区别就是每次触发订阅的时候会不会弹授权窗口而已。
误区二
订阅消息不能通过bindsubmit的方式触发,必须通过bindtap的方式触发。
误区三
触发订阅窗口后,不管用户点击了允许还是取消,都会进入订阅消息的success回调中,所以通过这个来判断用户是否订阅是错误的。
订阅次数的维护
先看下官方的文档:
那么我们该如何使用呢?
我们通过 wx.requestSubscribeMessage 接口发送的时候是知道需要让用户订阅哪几个模板的,就是 tmplIds 这个参数填的数组。那么根据官方文档的回调内容,我们就可以直接在success内去获取对应的key所返回的状态。把获取到的状态分别存入自己的数据库里。发送的时候去数据库里查询需要发送的模板并且状态为accept的去发送,如果发送成功则删除一条记录(因为没有过期一说,所以随便删除哪一条记录都不影响)。
参考代码
查询模板订阅状态
需要基础库大等于2.10.0才支持。
wx.getSetting({
withSubscriptions: true,
success (res) {
console.log(res)
}
})
官方文档
补充
如果用户选择了不再接收消息会清空之前的订阅次数,但是这个不会主动告诉开发者,所以发送订阅消息失败后,需要根据返回内容自行清空记录,重新计算。
如果勾选了“总是保持以上选择,不再询问”,并点允许,是不是用户24小时内未活跃,超过24小时后就不能给用户发送订阅消息了?或者说有其他规则?目前出现一种情况:勾选总是保持以上选择后,有用户收到4次消息、有用户收到七八次的样子,然后就再也收不到了,表示摸不清这其中的规则
不需要formId了是吗?
我用小程序体验版订阅消息,后台服务发送消息 返回的OK,但是微信服务通知里确没有收到消息?
string Url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+ token;
var postdata = new
{
touser = openId,
template_id = templeteId,
page = "pages/index/index",
data = new
{
thing1 = new
{
value = "今日行程"
},
date2 = new
{
value = "2020-02-20"
},
thing4 = new
{
value = "请做好准备,即将出发"
}
}
};
wenXinResult = HttpHelper.HttpPostJson(Url, JsonHelper.Serialize(postdata), false);
wenXinResult 里返回的是成功!服务通知里确没有收到消息,请教下这是什么原因呢?
看标题以为是找到了能够收集订阅权限次数无限推送的方法,原来。。。这个操作感觉是基础操作啊!
以前的模板消息需要记录,现在换成这玩意了,还记个啥呀,能推就推,引导用户关注公众号,100%必推的肯定要其他方式
我一直在考虑这个问题,存订阅次数 意义是什么?如果你存的次数是0 就不推送了吗?你能保证你的次数跟微信获取的授权次数严格相等吗?
不完全相等,但是总比盲推好。
用户收到的服务通知里的每条消息下有一个“不再接收”,如果用户好奇试着点击了“不再接收此类消息”看看啥样子,看完后,然后呢又点击了“接收消息”,那你记录的订阅次数就不准确了,因为“不再接收”的同时就确定了订阅次数为0了,可是你的数据库还没有改过来,你怎么处理这样的事