评论

针对新手很容易出现理解误区的微信小程序订阅消息模块

使用订阅消息也有一段时间了,感觉对新手订阅消息很容易让新开发者进入一个理解的误区,这里觉得有必要说出来

1. 写在前面

微信小程序下架了模板消息功能,取而代之的是订阅消息功能。这个订阅消息目前又分为「一次性订阅」和「永久订阅」。使用订阅消息也有一段时间了,感觉对新手订阅消息很容易让新开发者进入一个理解的误区,这里觉得有必要说出来

2. 理解误区

很多新手认为,只要用户勾选了小程序端订阅消息弹出时底部的「总是保持以上选择…」后,就可以「为所欲为」的不限次数的推送订阅消息给用户了。如下图:

3. 正确理解

如果你使用的「一次性订阅」模板(目前发现绝大多数开发者都是只能用一次性的,因为永久性的订阅消息申请门槛太高),那么勾选底部的「总是…」这个并不代表以后可以直接推送了。官方原话wx.requestSubscribeMessage的介绍里是这样写的:

3.1 官方说明

  1. wx.requestSubscribeMessage(Object object)
  2. 基础库 2.8.2 开始支持,低版本需做兼容处理。
  3. 调起客户端小程序订阅消息界面,返回用户订阅消息的操作结果。当用户勾选了订阅面板中的“总是保持以上选择,不再询问”时,模板消息会被添加到用户的小程序设置页,通过 wx.getSetting 接口可获取用户对相关模板消息的订阅状态。
  4. 注意事项
  5. 一次性模板 id 和永久模板 id 不可同时使用。
  6. 低版本基础库2.4.4~2.8.3 已支持订阅消息接口调用,仅支持传入一个一次性 tmplId / 永久 tmplId。
  7. 2.8.2 版本开始,用户发生点击行为或者发起支付回调后,才可以调起订阅消息界面。
  8. 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  
点赞 109
收藏
评论

45 个评论

  • surpriseli
    surpriseli
    08-01

    问题:既然用户订阅一次,只能给推送一次消息,我们的场景是用户一次订阅必须推送两条消息,那么可以用户点击一次,连续调用微信的订阅接口两次吗,微信侧有做短时间内的防重复订阅限制吗

    08-01
    赞同
    回复
  • 埃克斯眼
    埃克斯眼
    07-25

    请问楼主 我要实现的功能类似定时闹钟,后端使用定时器实现在,那我用户只点了一次授权,就再也不会进我的小程序了(我的小程序前端页面就是个摆设 只有一个登录获取openid和允许授权两个按钮),那是不是无解了?

    07-25
    赞同
    回复
  • Zakari
    Zakari
    05-06

    我搞不懂这个一次性推送api的原理,可以用触发器延迟推送吗。授权是不是有生命周期?我尝试不太稳定

    05-06
    赞同
    回复
  • 风
    2021-10-08

    我也觉得这2个解决方案都不是良策,之前官方的公告说要禁掉公众号的模板消息(https://developers.weixin.qq.com/community/minihome/doc/000a4e1df800d82acb9b7fb5e5b001);如果禁用,然后又申请不到长期订阅权限,这种情况意味着无解吗?(为啥1次性订阅,官方不禁用这个入口。。)

    2021-10-08
    赞同
    回复 2
    • 陶清清
      陶清清
      2021-12-07
      你可以反过来想想,如果开放长期订阅权限,基本上99%的程序最终都是成天给用户发各种推送。最后消息泛滥成灾,就像手机的推送一样。
      2021-12-07
      回复
    • 埃克斯眼
      埃克斯眼
      07-25回复陶清清
      自己可以点取消授权的铁子
      07-25
      回复
  • GULAI
    GULAI
    2021-09-07

    请问消息订阅是仅限线上版本吗 体验和开发版能使用吗

    2021-09-07
    赞同
    回复
  • Mark,麦
    Mark,麦
    2021-08-21

    “需要在用户主动点击某个组件是触发调用wx.requestSubscribeMessage方法再次订阅,订阅后,你才可以「为所欲为」推送一次模板消息,注意只能一次。下次再想推送时,需要用户再次点击触发wx.requestSubscribeMessage。”感谢楼主的经验分享,解决了,我的聊天信息通知的问题。在这里我也把我的经验回馈一下各位朋友,我的解决方案是根据相关场景把wx.requestSubscribeMessage()设置在用户可能必须点击的很多地方,虽然不会有弹窗,但是已经默认保持订阅(如果原来选择了总数允许订阅)。例如,用户点击查看新消息,就在点击按钮加个<view></view>把wx.requestSubscribeMessage()绑进去。

    2021-08-21
    赞同
    回复 1
    • Mark,麦
      Mark,麦
      2021-08-21
      更正:如果原来选择了总是允许订阅
      2021-08-21
      回复
  • Ecs
    Ecs
    2021-08-14

    非常有帮助,十分感谢


    2021-08-14
    赞同
    回复
  • ^_king^_
    ^_king^_
    2021-07-19

    使用服务号和小程序打通消息通知具体怎么实现呢?

    2021-07-19
    赞同
    回复
  • 潘铎
    潘铎
    2021-06-29

    小程序使用公众号消息模板推送优惠券会被封号吗?

    2021-06-29
    赞同
    回复
  • 小周周
    小周周
    2021-06-17

    2021-06-17
    赞同
    回复

正在加载...

登录 后发表内容