首页 > 建站教程 > 小程序、公众号 >  踩坑微信小程序订阅消息正文

踩坑微信小程序订阅消息

一、订阅消息

简单介绍一下订阅消息的特点:

用户授权就能发送订阅消息,一次授权可下发一次信息,长期订阅消息模板授权一次理论上可以无限下发消息
与旧模板消息发送权限只保留 7 天相比,订阅消息获得授权后发送信息的权限时长无限制,只要没有发送就长期有效。
其他的基本与旧的模板消息无异,在开发订阅消息的过程中,记录了一些常见的坑点,一起感受一下!(第 8 点尤为重要)

二、开发者工具无法调试

记得去年 10 月份,订阅消息刚刚全面开放那会,兴致勃勃地对着文档开发,结果: 瞬间怀疑人生,检查了好几遍代码,明明没有打错,但 TA 就是报错了!报错了!报错了!



后来试了一下在真机上可以吊起授权弹窗,逛了下开发社区才发现这是一个普遍的问题,估计是没得解决了。



不过现在的提示已经很直白了,这锅我们不背,记得要在真机上调试!

三、真机上还是调不起

后来吧,写了篇关于订阅消息的文章,也有一些开发者问我。代码都对,没报错,也是在真机上调试,但是无法吊起授权弹窗。

这个时候应该去检查一下小程序的基础版本库,订阅消息据说是要在**基础库 2.1.0 **以上,这个我没有具体测试,反正尽量往最新的靠拢。

如果想要同时授权多条订阅消息,应该是要**基础库 2.8.2 **以上,基础库调整时可以看到受影响的用户有多少,自己看着弄。



小程序的基础库调整在小程序后台 -> 设置里面查看、调整:



四、多次调用后失效

可以成功调起授权后,开心,开心之余一不小心多调用了几次,然后发现点击之后没有反应了?



这个其实是个小问题,iOS 貌似没碰到过,安卓遇到过很多次了,并不是百分百能复现。

调用频率太密集可能会出现 API 接口失效的问题,结束微信后台进程,重新打开就莫得问题了。

别一直点,API 也是有生命的,让 TA 休息会,啥 100 次不停歇地调用让你选,搞不好就罢工了的!且开发且珍惜!爱护 API,从调用做起!

五、记录次数

目前测试结果一次性订阅消息多次授权后可以发送多条订阅消息,授权几次就可以发送几次,不过需要开发者自己记录订阅的次数。

记录的次数有个问题,如果用户在设置中关掉了接收订阅消息,那么之前所有的次数都会失效,亲测如此,这里就需要根据具体的业务去做优化了。

六、订阅消息内容

订阅了一次性消息,但是发送时也有可能会失败,这个可能就跟内容有关了。



订阅消息的模板内容参数非常严格,多一个字符或者与参数规定值不符都导致发送失败,记得对字数进行判断。 填写时对应参数时根据后台的模板填写,比如说** thing3、name5**,后面都是带数字的。

七、模板 ID

订阅消息对应的模板 ID 需要在后台公告模板库中添加才有,不同服务类目的订阅模板只有当小程序服务类目有时才能看到并且添加。



逛社区的时候发现有人说如果删除了某一服务类目,对应的订阅模板也会被删除,这个自行体验~

八、拒绝后无法再调起

如果你和我一样手有点不听话,勾选了「总是保持以上选择」,然后又点击取消之后,你猜会发生什么?先试试看!



我发现了很神奇的事,不管我是把小程序删除再添加,还是重新授权登陆,或者关闭打开订阅开关,都无法吊起授权弹窗了。

这意味着 TA 和你彻底拜拜了,如果还想再见到一个一样的 TA,只能重新添加一个同样模板,更换 TEMPLATE_ID,这个被你勾选一直拒绝的 TEMPLATE_ID 模板你再也见不到了!换页面也无法调起!

勾选「总是保持以上选择」,点击允许后一样再也见不到 TA~

九、又一个调用问题

前几天在把旧的模板消息改成订阅消息时,发现又无法调起了,手机调试,基础库没问题,弄了半天发现是表单的问题。

之前就的模板消息需要用到表单获取 formId,所以按钮绑定的就是 bindsubmit 事件,改成 bindtap 就没问题了,心中顿时一万匹澳洲羊驼呼啸而过~

尽量用 bindtap 调用订阅接口,官方说支付回调也可以,奈何个人开发者不能没得支付功能,至于那些 bindinput 之类的暂时就不做测试了!

这个问题可能遇到的人会比较多,因为很多开发者都是旧模板消息上直接改造,坑总是环环相扣!

十、订阅消息点击路径

订阅消息发送后,点击消息会跳转到我们指定的页面,如果没有指定的话,貌似是跳转至首页。

与旧模板消息不同的是,订阅消息的 path 路径跳的是线上版本,也就是开发版本无法测试到。

不过改写的话一般不会有问题,就是新开发时记得把路径配对。

十一、判断是否授权

用 wx.requestSubscribeMessage 调用订阅消息时,success 回调只能判断是否成功调起授权窗口。

如果想要判断用户是否授权,就需要用动态 TEMPLATE_ID 的去判断,accept 表示授权,reject 表示取消授权,ban 表示被后台封禁,我是这样写的:
if(res[TEMPLATE_ID] === 'reject')
if(res[TEMPLATE_ID] === 'accept')
十二、最后

其实我觉得两者配合使用更好,但是人微言轻,只能想想,不过也支持微信的决定。
虽然订阅消息还有长期订阅模板,但是目前只对一些公共服务类目开放,作为个人开发者感受不到,也测试不了。据一些小道消息传闻说是 2 月份会开放一些其他服务类目,拭目以待。
之前写过一个 PHP 订阅消息的模板,API 模板关注同名公众号,后台回复「订阅消息」获取。