@TOC
2019年10月份,微信在小程序模块消息能力方面公布了一项重大调整。原有的模块消息将升级为「订阅消息」,支持一次性和长期性订阅消息。而模块消息已于2020年1月10日下线,小程序将无法再使用原接口推送模板消息,因此开发者需要及时进行调整。
以下是作者在小程序订阅消息开发中遇到的一些坑:
第一坑: 在开发者工具中无法显示订阅消息的列表且无勾选选择;
-
再使用wx.requestSubscribeMessage调起客户端小程序订阅消息界面时,假如传了多个tmplIds时,在开发者工具中也只能看到一个,无法把整个列表展示出来;
如下图所示:
实际我在开发过程中,tmplIds传了三个(一次性最多授权限制也是三个)
而真机表现为:
第二坑: 在开发者工具中无法显示不再询问勾选项;
- 由于官网说明:
调起客户端小程序订阅消息界面,返回用户订阅消息的操作结果。当用户勾选了订阅面板中的“总是保持以上选择,不再询问”时,模板消息会被添加到用户的小程序设置页,通过 wx.getSetting 接口可获取用户对相关模板消息的订阅状态。
假如我们需要在客户端看到勾选不再询问下wx.getSetting的到底返回了什么,那么你需要通过真机测试才能看到,这里还有一个坑就是,假如你未使用不再询问这个选项,那么wx.getSetting是获取不到任何状态的
第三坑: 多次订阅一次性消息时;
- 在订阅消息时,假如两条不一样的订阅消息,假如用户第一条订阅消息勾选了不再询问,那么第二条不一样的订阅消息依旧有弹出授权弹窗,即每条订阅消息相互独立,互不影响;
第四坑: 勾选了不再询问时;
-对于wx.requestSubscribeMessage,即使你勾选了不再询问依旧会调用这个函数并且走相应的逻辑,只是不会弹出弹窗而已
第五坑: 当多个订阅消息同时授权时;
-
由于订阅消息一次性只能最多授权三条订阅消息,假如用户在授权过程中,只勾选三条中的其中一条, 并且勾选了不再询问按钮,后点击允许,那么其中没勾选的两条订阅消息将不会再弹出授权,即类似为"永久拒绝"状态;
假如在一次性授权三条订阅消息时,倘若勾选了其中一条,剩下两条未勾选,且勾选了不在询问按钮,后点击拒绝,那么其中一条会为永久拒绝状态,但其中的两天虽然未拒绝,但也不会再这次操作中重新有授权的机会;除非你再其他操作给他们两条订阅消息重新触发wx.requestSubscribeMessage
第六坑: 当订阅消息频繁触发时;
- 当订阅消息频繁触发时,wx.requestSubscribeMessage会报错,错误提示为:fail last call has not ended;即上一次订阅消息还未调用结束,这是个大坑,目前还没有解决,拒绝解决时间可以参照这个贴微信开放社区
第七坑: 动态获取模板ID时;
- 虽然官网文档没有说明,但调用wx.requestSubscribeMessage授权之前是不能有异步操作的,否则会报错,提示你授权不是通过bindtap事件触发的,这个真的是无敌坑,只能自己在初始化或者登录后去先调用了获取模板ID的接口,然后把它缓存下来;
总结:
目前订阅消息尚且有些bug或者文档不够明确的地方,未来持续关注和更新罢