- 「笔记」订阅消息-订阅次数维护(新)
前言 不知何时官方更新了 查询模板订阅状态接口 的返回格式,导致之前的判断逻辑不可用,于是梳理了一下最新的用法。 查询模板订阅状态 接口 需要基础库大等于2.10.0才支持。 [代码]wx.getSetting({ withSubscriptions: true, success (res) { console.log(res) } }) [代码] 官方文档 新的返回格式 [代码]res.subscriptionsSetting = { mainSwitch: true, // 订阅消息总开关 itemSettings: { // 每一项开关 zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: 'reject', ke_OZC_66gZxALLcsuI7ilCJSP2OJ2vWo2ooUPpkWrw: 'ban' }, zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: 'reject', ke_OZC_66gZxALLcsuI7ilCJSP2OJ2vWo2ooUPpkWrw: 'ban' } [代码] 旧的返回格式 [代码]res.subscriptionsSetting = { zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: 'reject', ke_OZC_66gZxALLcsuI7ilCJSP2OJ2vWo2ooUPpkWrw: 'ban' } [代码] 对比以上两段代码可以发现,新的返回增加了一个mainSwitch,以及多了一层itemSettings。 假设在原有的判断逻辑不变的情况下,当mainSwitch为false状态的时候,清空当前用户所有的订阅记录,反之再判断itemSettings内的每一项状态是否为accept,如果非accept则删除订阅记录,这样就可以和原来一样了。 可以参考我之前发的 订阅消息-订阅次数维护 与本文结合一起看。 附:订阅消息参数值内容限制说明 参数类别 参数说明 参数值限制 说明 thing.DATA 事物 20个以内字符 可汉字、数字、字母或符号组合 number.DATA 数字 32位以内数字 只能数字,可带小数 letter.DATA 字母 32位以内字母 只能字母 symbol.DATA 符号 5位以内符号 只能符号 character_string.DATA 字符串 32位以内数字、字母或符号 可数字、字母或符号组合 time.DATA 时间 24小时制时间格式(支持+年月日) 例如:15:01,或:2019年10月1日 15:01 date.DATA 日期 年月日格式(支持+24小时制时间) 例如:2019年10月1日,或:2019年10月1日 15:01 amount.DATA 金额 1个币种符号+10位以内纯数字,可带小数,结尾可带“元” 可带小数 phone_number.DATA 电话 17位以内,数字、符号 电话号码,例:+86-0766-66888866 car_number.DATA 车牌 8位以内,第一位与最后一位可为汉字,其余为字母或数字 车牌号码:粤A8Z888挂 name.DATA 姓名 10个以内纯汉字或20个以内纯字母或符号 中文名10个汉字内;纯英文名20个字母内;中文和字母混合按中文名算,10个字内 phrase.DATA 汉字 5个以内汉字 5个以内纯汉字,例如:配送中
2020-03-12 - 「笔记」订阅消息-订阅次数维护
前言 距离1月10日模板消息下架只有2天了,在社区里经常能看到有帖子在问关于怎么记录订阅次数的问题,这里在这里介绍一下自己用的简单方案,仅供参考。 误区一 [图片] 上面这个图大家应该都比较熟悉了,很多人总是误以为勾选“总是保持以上选择,不再询问”,就可以无限发送订阅消息,这个是错误的想法,勾选和不勾选唯一的区别就是每次触发订阅的时候会不会弹授权窗口而已。 误区二 订阅消息不能通过bindsubmit的方式触发,必须通过bindtap的方式触发。 误区三 触发订阅窗口后,不管用户点击了允许还是取消,都会进入订阅消息的success回调中,所以通过这个来判断用户是否订阅是错误的。 订阅次数的维护 先看下官方的文档: [图片] 那么我们该如何使用呢? 我们通过 wx.requestSubscribeMessage 接口发送的时候是知道需要让用户订阅哪几个模板的,就是 tmplIds 这个参数填的数组。那么根据官方文档的回调内容,我们就可以直接在success内去获取对应的key所返回的状态。把获取到的状态分别存入自己的数据库里。发送的时候去数据库里查询需要发送的模板并且状态为accept的去发送,如果发送成功则删除一条记录(因为没有过期一说,所以随便删除哪一条记录都不影响)。 参考代码 [图片] 查询模板订阅状态 需要基础库大等于2.10.0才支持。 wx.getSetting({ withSubscriptions: true, success (res) { console.log(res) } }) 官方文档 补充 如果用户选择了不再接收消息会清空之前的订阅次数,但是这个不会主动告诉开发者,所以发送订阅消息失败后,需要根据返回内容自行清空记录,重新计算。 相关文章 「笔记」订阅消息-订阅次数维护(2020年3月更新改动) 「笔记」订阅消息体验踩坑
2020-03-06 - 后台主动推送订阅消息,为什么一直43101?
问题描述: 使用一次性订阅消息。 小程序主动发起订阅授权,选择允许,勾选总是允许此类操作。订阅消息发送成功,微信号收到服务消息。 用户授权后,后台调度主动去推送。每天8点推送。同样的方法,订阅消息推送一直不成功: {"errcode":43101,"errmsg":"user refuse to accept the msg rid: 5f4a019e-2d30aec9-1952de67"},[Connection:"keep-alive", Content-Type:"application/json; encoding=utf-8", Date:"Sat, 29 Aug 2020 07:19:58 GMT", Content-Length:"90"]>
2020-08-29 - 针对新手很容易出现理解误区的微信小程序订阅消息模块
1. 写在前面 微信小程序下架了模板消息功能,取而代之的是订阅消息功能。这个订阅消息目前又分为「一次性订阅」和「永久订阅」。使用订阅消息也有一段时间了,感觉对新手订阅消息很容易让新开发者进入一个理解的误区,这里觉得有必要说出来 2. 理解误区 很多新手认为,只要用户勾选了小程序端订阅消息弹出时底部的「总是保持以上选择…」后,就可以「为所欲为」的不限次数的推送订阅消息给用户了。如下图: [图片] 3. 正确理解 如果你使用的「一次性订阅」模板(目前发现绝大多数开发者都是只能用一次性的,因为永久性的订阅消息申请门槛太高),那么勾选底部的「总是…」这个并不代表以后可以直接推送了。官方原话wx.requestSubscribeMessage的介绍里是这样写的: 3.1 官方说明 wx.requestSubscribeMessage(Object object) 基础库 2.8.2 开始支持,低版本需做兼容处理。 调起客户端小程序订阅消息界面,返回用户订阅消息的操作结果。当用户勾选了订阅面板中的“总是保持以上选择,不再询问”时,模板消息会被添加到用户的小程序设置页,通过 wx.getSetting 接口可获取用户对相关模板消息的订阅状态。 注意事项 一次性模板 id 和永久模板 id 不可同时使用。 低版本基础库2.4.4~2.8.3 已支持订阅消息接口调用,仅支持传入一个一次性 tmplId / 永久 tmplId。 2.8.2 版本开始,用户发生点击行为或者发起支付回调后,才可以调起订阅消息界面。 2.10.0 版本开始,开发版和体验版小程序将禁止使用模板消息 fomrId。 3.2 重点关注 这里重点关注第7条:「用户发生点击行为或者发起支付回调后,才可以调起订阅消息界面。」这就意味着你需要在用户主动点击某个组件是触发调用wx.requestSubscribeMessage方法再次订阅,订阅后,你才可以「为所欲为」推送一次模板消息,注意只能一次。下次再想推送时,需要用户再次点击触发wx.requestSubscribeMessage。 4. 破局方案 目前订阅消息功能,就是这么个情况,所以针对这个情况的替代方案有以下 4.1 永久性订阅消息 如果能达到申请「永久性订阅」消息的模板的门槛,那自然是极好的,直接用永久性模板「为所欲为」。 4.2 使用服务号的模板消息替代 比较常用的是使用公众号服务号的模板消息代替小程序的订阅消息功能,公众号的模板消息功能限制就比订阅号好多了,基本上可以「为所欲为」的推送。但是这个方案有个致命的运营成本:必须要用户关注公众号,还有小程序要跟公众号同一主体并绑定在开放平台下。同时开发成本有所增加,要采用unionId机制来打通小程序跟公众号的openId。这个具体的实现方案,大家有兴趣的话可以讨论下。笔者目前就是用这种方案的。 5. 几个注意点 5.1 官方提示 订阅消息如果选择选择‘总是保持以上选择,"不再询问"后的设置问题: 目前是选择‘总是保持以上选择,"不再询问"后,可以在设置中开启或拒绝接收,但不会再次拉起授权弹窗 6. 长期性订阅消息 请参考官方最新文档: 小程序模板消息能力调整通知 | 微信开放社区 https://developers.weixin.qq.com/community/develop/doc/00008a8a7d8310b6bf4975b635a401 长期性订阅消息 一次性订阅消息可满足小程序的大部分服务场景需求,但线下公共服务领域存在一次性订阅无法满足的场景,如航班延误,需根据航班实时动态来多次发送消息提醒。为便于服务,我们提供了长期性订阅消息,用户订阅一次后,开发者可长期下发多条消息。 目前长期性订阅消息仅向政务民生、医疗、交通、金融、教育等线下公共服务开放,后期将逐步支持到其他线下公共服务业务。 7.题外话 鉴于被戴上各种「刷赞,冲级,让社区点赞“通货膨胀”」等等一些恶毒字眼(最近多了个职业回复的「雅称」),各种帽子戴得,做一个开发爱好者积极分享和解决各种问题太难了,姑且不论咱写一篇文章需要截图多少,单单排版就得废掉俺多少时间哈,很受伤,所以本人决定在微信开放者社区封笔。你看到是俺最后一篇发表在微信开放社区的文章。如果你想继续查看俺的一些文章可以私聊我。我会在其他平台保持继续创作。bye-bye~ 8. 最最重要的来了 看完后觉得有用记得点赞~~ ↓点赞处↓
2020-09-04 - wx.requestSubscribeMessage消息订阅多次处理?
wx.requestSubscribeMessage消息订阅多次处理? 场景:用户点击开始充电允许订阅推送一次,模版是余额不足提醒。第一次订单结束后 余额还不到指定额度 没有推送 。下次开始充电再次允许推送 余额到指定额度了 现在是优化成了只推送一条了吧 ? 2、第二次点了不允许推送 还是会推送消息 因为有第一次允许却没推送的累计 是这样吗? 这样就只能通过特定业务开放了的长期消息提醒来做了是嘛
2020-10-22 - wx.requestSubscribeMessage 用户选择不再询问,有没有官方字段去判断?
wx.requestSubscribeMessage 如果用户选择不再询问,那么有没有字段去判断用户到底有没有勾选这个不再询问呢?
2019-12-18 - wx.requestSubscribeMessage不能恢复订阅(点击“总是保持以上选择”和“取消”
wx.requestSubscribeMessage当点击“总是保持以上选择”的同时点击“取消”,就再也没有机会恢复订阅该条ID的消息了!如果是用户误操作,想要恢复订阅该条ID的消息要怎么办??
2019-12-26