评论

「笔记」订阅消息-订阅次数维护

在社区里经常能看到有帖子在问关于怎么记录订阅次数的问题,这里在这里介绍一下自己用的简单方案,仅供参考。

前言

距离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  
点赞 13
收藏
评论

14 个评论

  • 淇小淇鸭
    淇小淇鸭
    2020-09-02

    请问如果在第一次弹出订阅框时,选择了“总是保持巴拉巴拉巴拉”,是下次需要弹出订阅提醒时不弹出了吗?那用户如何选择订阅呢?

    2020-09-02
    赞同
    回复 4
    • 拾忆
      拾忆
      2020-09-02
      用户订阅还是需要用户去点击按钮
      2020-09-02
      回复
    • 淇小淇鸭
      淇小淇鸭
      2020-09-02回复拾忆
      用户点击订阅后,不会弹窗,并且默认允许或者拒绝,我的理解对吧
      2020-09-02
      回复
    • 拾忆
      拾忆
      2020-09-02
      是的
      2020-09-02
      回复
    • 淇小淇鸭
      淇小淇鸭
      2020-09-02回复拾忆
      好的,谢谢你,另外想请教一下,如果用户允许推送一次,有两个模板,而本次订单只触发推送了A模板,那么B模板是会累计的吗?等到下个订单再次允许推送一次,却触发推送B的条件时,就会推送两条一毛一样的B,是这样吗
      2020-09-02
      回复
  • Maple 🍁
    Maple 🍁
    2020-08-19

    请问同一个订阅可以多次推送么? 比如用户下单通知, 同一个订单用户很可能取消了,再次下单,这样第二次就没办法 提醒了。

    2020-08-19
    赞同
    回复 2
    • 拾忆
      拾忆
      2020-08-19
      不可以,一个订阅只能推送一次,但是一次可以最多同时订阅3个模板
      2020-08-19
      回复
    • Maple 🍁
      Maple 🍁
      2020-08-20回复拾忆
      好吧,谢谢 之前看到了 果然不行。有些坑
      2020-08-20
      回复
  • New
    New
    2020-07-29

    请问订阅成功后,发送消息一般都是后台调 还是前台调呀

    2020-07-29
    赞同
    回复 2
    • 拾忆
      拾忆
      2020-07-29
      后台
      2020-07-29
      回复
    • New
      New
      2020-07-29回复拾忆
      好的  谢谢
      2020-07-29
      回复
  • 我的世界
    我的世界
    2020-05-12

    如果用户选择了不再接收消息会清空之前的订阅次数,但是这个不会主动告诉开发者,所以发送订阅消息失败后,需要根据返回内容自行清空记录,重新计算。

    我觉得大佬的这个点,给了很大的启示,之前为了解决发送用户太多所以用了数据库,但是没考虑数据库数目>微信累计次数时,数据库此时不做任何处理,下次还是会发一些无效的请求。感谢!

    2020-05-12
    赞同
    回复 3
    • 拾忆
      拾忆
      2020-05-12
      不用谢,都是踩过坑的人。
      2020-05-12
      回复
    • ssq_qin
      ssq_qin
      2020-06-18回复拾忆
      大神,,对于次数推送成功减一,,,怎么实现的呢,,前端怎么能检测到已经推送成功了呢
      2020-06-18
      回复
    • 拾忆
      拾忆
      2020-06-18
      这个需要自己去记录操作的,至于怎么弄就看你自己了,可以订阅一次加一条记录,发送后删除一条记录,或者每个用户一条记录,然后用字段去保存条数。
      2020-06-18
      回复
  • 太有才了丶
    太有才了丶
    2020-04-30

    大佬你好 所以现在想经可能多的推送只能引导用户设置“总是保持操作”然后所有的tap交互事件借鉴以前手机formid的方式各种静默调用 requestSubscribeMessage 储存尽量多的次数供发送?

    2020-04-30
    赞同
    回复 1
    • 拾忆
      拾忆
      2020-05-04
      是的
      2020-05-04
      回复
  • A丶W6
    A丶W6
    2020-03-21

    其实这样就没必要用数据库记录下来了,直接后台推送即可。反正推送成功不成功都不影响自己的主业务,反正前端每次操作之前都会提示 消息订阅,拒绝了再调用设置功能

    2020-03-21
    赞同
    回复 2
    • 拾忆
      拾忆
      2020-03-21

      如果几万个用户,每次都去试一遍?对后端的服务器是有多大的自信呢?

      2020-03-21
      回复
    • A丶W6
      A丶W6
      2020-03-21回复拾忆
      后台不用试啊,直接传对应的模板id调用微信推送消息的接口不就好了,数据库都不用查询了。
      2020-03-21
      回复
  • Pyz
    Pyz
    2020-03-06

    如果勾选了“总是保持以上选择,不再询问”,并点允许,是不是用户24小时内未活跃,超过24小时后就不能给用户发送订阅消息了?或者说有其他规则?目前出现一种情况:勾选总是保持以上选择后,有用户收到4次消息、有用户收到七八次的样子,然后就再也收不到了,表示摸不清这其中的规则

    2020-03-06
    赞同
    回复 3
    • 拾忆
      拾忆
      2020-03-06
      一次性订阅消息没有过期限制,只有次数限制,订阅次数就是发送次数。
      2020-03-06
      回复
    • Pyz
      Pyz
      2020-03-06回复拾忆
      比如用户第一次点订阅的时候,就点的允许并勾选总是保持以上选择,后面如果没有点击订阅操作的话,就只能收到1次订阅消息?“总是保持以上选择,不再询问”只是控制用户下次订阅操作时,授权弹框的出现与否对吗?
      2020-03-06
      回复
    • 拾忆
      拾忆
      2020-03-06
      是的。
      2020-03-06
      回复
  • wanspin
    wanspin
    2020-03-03

    不需要formId了是吗?


    2020-03-03
    赞同
    回复 1
    • 拾忆
      拾忆
      2020-03-03
      没有formid了
      2020-03-03
      回复
  • 仅此丶而已。
    仅此丶而已。
    2020-02-26

    我用小程序体验版订阅消息,后台服务发送消息 返回的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 里返回的是成功!服务通知里确没有收到消息,请教下这是什么原因呢?



    2020-02-26
    赞同
    回复
  • Ling
    Ling
    2020-01-11

    看标题以为是找到了能够收集订阅权限次数无限推送的方法,原来。。。这个操作感觉是基础操作啊!

    2020-01-11
    赞同
    回复 1
    • 拾忆
      拾忆
      2020-01-11
      无限推送?想太多了~不可能~
      2020-01-11
      回复

正在加载...

登录 后发表内容