前段时间看到了这位老哥的一篇关于订阅消息的文章:https://developers.weixin.qq.com/community/develop/article/doc/0008802e8381e0eeabb92c9975b013
这篇文章对于程序员来说非常直观的说明了一次性订阅消息的逻辑:订阅1次,可以收到订阅消息一次,订阅10次,可以收到订阅消息10次。
但是我觉得这个方案对于一个普通用户来说,并不够友好,如果我是一个不懂订阅消息的普通用户,我根本不会花时间去点这样一个点1加1的订阅消息。我觉得对于开发者来说,用户能够点一次允许并且勾上不在询问就已经很不错了,剩下的完全可以交给程序来处理。下面是我的方案。让一次性订阅消息达到长期订阅的效果。
首先明确以下逻辑:
- 通过 wx.getSetting({ withSubscriptions: true }) 的 success 回调 res 可以得出订阅消息的以下5种状态
- 当用户勾选了“不在询问”之后,不管你后面怎么调 wx.requestSubscribeMessage ,订阅消息的弹窗都是不会弹起的
- wx.requestSubscribeMessage 需要用户手动点击触发
当得到以上几种状态之后,接下来就可以根据需要做自己想要做的操作
如我的小程序首页是一个版本列表
我在列表的头部设计了一个跟小程序同风格的授权卡片,这样不会显得突兀同时告诉用户点击授权并且勾选“不在询问”,并告诉用户这样做的目的是什么。
然后根据上面得到的不同状态来显示不同的提示语:
总开关关闭了:
勾选了“不在询问”并且选项是取消
接下来就是实现订阅消息+1的步骤,上面提到了当用户勾选了“不在询问”之后,不管你后面怎么调 wx.requestSubscribeMessage ,订阅消息的弹窗都是不会弹起的
这时在用户点击你应用中必点的操作时,比如知乎微博的点击列表进入详情,或者我这个小程序点击版本列表进入版本详情时就可以根据以上得到的状态来判断:当授权状态是“选择了不在询问并且选项是允许” 时,直接调用 wx.requestSubscribeMessage ,这时 wx.requestSubscribeMessage 的回调必定是success,而且不会出现授权弹窗,自然也就实现了+1效果。
最后把订阅次数+1记录到数据库,推送时推送订阅次数大于0的就ok了
这样一个普通用户需要做的操作就只有点击授权-勾选不在询问-允许 这样一个步骤,同时就实现了无形中增加订阅次数的效果,替代让用户手动去点+1增加订阅消息的操作。
另外不用担心这种操作会使用户感觉像垃圾广告一样一直被推送,因为不管是在服务通知页面,还是在设置页面,用户都是可以很轻松的一键关闭通知。
然后说下订阅消息的几个特殊情况:
1.当你的账号在开发者工具上面点过允许或取消的时候,wx.getSetting({ withSubscriptions: true }) 的 success 回调结果是这样的
手机上的设置界面是这样的
回调的itemSettings属性消失了,界面上有订阅消息的开关,但是订阅消息的选项却没了,正常情况应该是这样的
这样的
2.当用户点了“不在询问并允许”但是又手动通过服务通知页面,或者设置页面关闭了消息通知,这时就算该用户之前已经订阅过了很多次,都会被系统自动清0,这时你的数据库可能存的该用户还有比如5次订阅消息,但是通过cloud.openapi.subscribeMessage.send推送消息的时候,会进catch,errCode是43101。
3.当用户手速过快连续点击了授权按钮触发wx.requestSubscribeMessage时,会进入fail回调,errMsg是 requestSubscribeMessage:fail last call,这个文档是没写的。
最后可以扫码体验一下:
如果用户没有再次进入应用呢,那如何进行订阅数量的自增操作
兄弟 我想问下 云开发是怎么控制去发送通知的啊?
我看你上面的代码只有前端去获取订阅消息权限及次数 并未说怎么去控制什么时候发送,怎么发送通知的啊?
兄弟 这个方案 还不就只能解决A自己 A发通知给B怎么办呢
也是个方案
模板消息得时候就是这么搞的,但有些情况它不适用,还得长期订阅消息
“当你的账号在开发者工具上面点过允许或取消的时候,回调的itemSettings属性消失了,界面上有订阅消息的开关,但是订阅消息的选项却没了”
这个周末恢复啊
隐形+1逻辑,如果一天用户触发次数太多,会不会被微信风控啊
亲测,可用。你是高手啊!不错,很好的帖子,解决了一次性订阅消息的实用性使用。解决了痛点!
写的非常好