前言

只有光头才能变强。

文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y

如果近期有看我文章的同学,会知道我最近在公司做的是推送系统。推送系统在我这也叫做消息管理平台,其实很容易理解:提供一个支持多渠道发送消息的系统。

推送系统支持的渠道

在前段时间,微信公布:小程序模板消息接口将于2020年1月10日下线,开发者可使用订阅消息功能

底层接口的变动,对程序员来说意味着什么,你懂的。

人在家中坐,班从天上来

本篇文章主要来聊聊我这边是怎么发送小程序消息的,以及改版后的简单介绍,希望对大家有帮助。

  • 本文不涉及任何的高深知识,放心观看。

一、前置知识

发送小程序消息其实很简单,微信提供了微信官方文档供我们开发者去查阅相关的基础知识,提供HTTP接口给我们去方便调用:

微信文档

对开发者来说,发送小程序消息总结来说就三步:

  • 在微信后台创建模板

  • 获取下发的权限

  • 调用发送接口,发送消息

无论是以前的模板消息,还是现在新的订阅消息,步骤都是一样的。

二、模板消息和订阅消息的区别

为什么微信要把模板消息下线,要上线订阅消息呢?我们从发送小程序的步骤来看,只有“获取下发的权限”是可动的,其余的两步都是相同的。

我们开发者要借助微信平台向用户发消息,需要一个理由(下发的权限)。因为微信还是注重用户体验的。

2.1 模板消息

模板消息下发的理由是:用户最近在小程序活跃过,有过交互的行为(比如说表单提交)。那么开发者可以从这些交互行为中收集formId

一条formId会保留7天,当我们调用发送接口的时候需要消耗一条formId。如果该用户没有formId的话,那么我们则会发送失败

  • 重点:发送模板消息一定要携带formId

说白了,这个formId就是用户与小程序的交互凭证。微信认为:用户最近使用过你的小程序,你才可以给他/她发送消息。

2.2 订阅消息

模板消息的下发理由我们可以发现:下发的权利是掌握在我们开发者手上的,只要我们通过用户的各种行为收集到大量的formId,那我们在7天内就可以发送多条消息给到用户。

订阅消息的下发理由是:把消息是否推送的权利还给用户。用户来决定能不能收到推送,简单来说就是:

  • 当用户触发某些场景时,给用户弹框,让用户决定是否收到推送(而且只会收到一次)

示例

2.3 让用户收到自己想要的消息

在最开始使用微信的时候,你可能还能收到一些营销类的小程序通知,但近期你应该就收不到的。

  1. 不允许恶意诱导用户进行触发操作,以达到可向用户下发模板目的

  2. 不允许恶意骚扰,下发对用户造成骚扰的模板

  3. 不允许恶意营销,下发营销目的模板

标题不能涉及营销相关内容,包括不限于:消费优惠类、购物返利类、商品更新类、优惠券类、代金券类、红包类、会员卡类、积分类、活动类等营销倾向通知

微信会检测你的模板有无问题,如果有问题就会把你的模板给删掉(当然了,也不让你创建可能是营销类的模板)。没有了模板,消费就发不出去了。

总的来说:微信会通过各种方式来限制你的消息下发,目的是想让用户收到他自己想要的消息。这次将模板消息改成订阅消息,更是把下发消息的权限交给用户了。

至于这件是好事,还是坏事。不同人有不同的看法。

有的人会觉得:让用户选择是否收到消息,用户所需要的操作就多了,弹窗也是对用户的一种打扰。如果用户不熟悉订阅消息或者直接点了“取消”,小程序就没法通知到用户了,用户可能因此错失服务,对商家和用户都是损失。

有的人也会觉得:把推送消息的权利掌握在用户手里,能很大程度上避免商家的恶意骚扰

对于此次的改版,可以在评论区下谈谈你的看法~

三、我们是怎么做的?

我这边来简单说一下我这边是怎么接入推送小程序消息的,希望对想要接入小程序消息的同学有一定的帮助。

首先,针对在微信后台创建的模板,我们是先把微信后台的模板拉取到自己的数据库保存起来,然后再做一个管理页面对模板进行管理。

后台管理页面

如果某个消息使用到了该模板,我们同样也会做关联起来(因为这样可以方便查阅哪些消息使用了这个模板)

  • 正因为有了这个功能,所以我们这次迁移就可以很方便整理出目前还在使用的模板有哪些,使用的场景在哪。后续只要将消息的模板ID改成订阅消息的模板ID就好了。

将模板同步到自己的数据库

像我司不单单只有一个小程序,所以要对小程序进行分类,这里就不再赘述了。实际上就是封装了一层,例如:蘑菇街女装 标识为88,蘑菇街直播购物台标识为 99

在设计和写代码的时候要考虑后续的可扩展性

模板消息的时候,前端会打formId的点,我这边会在StormMQ的数据清洗放到Redis里边。然后我这边在发送之前就判断用户有没有对应的formId

formId流程

现在微信将模板消息改为订阅消息,formId的收集到我这边的Storm解析进Redis的操作都免去了。微信貌似也没有提供接口给我判断用户是否有授权过。所以我只能在调用下发接口时,根据返回值来判断用户是否授权。

如果新接入微信小程序消息的同学,那整块流程就简单很多了。

  • 前端同学只要在必要的场景下弹窗,让用户授权

  • 后端的同学直接下发到用户,根据返回值判断下发的情况。

所以,现在我这边如果要下发一条消息主要有两个步骤:

  1. 在推送后台新建一条消息(选择微信的模板、消息创建者的基本信息、消息相关的规则处理(是否去重等等)

  2. 业务方调用我暴露的接口

业务方调用我这边的暴露接口,我主要做以下的事情:

  1. 对业务方的传入参数进行简单的校验,拼接成完整的一个模板消息内容

  2. 如果业务方传入的是userId,我这边需要转为openId

  3. 对消息速度限流,调用微信的下发接口

流程

除了消息下发以后,我们还会考虑到消息下发是否成功以及效果的问题(有无实时数据供查看,有无离线报表分析),所以我这边是这样做的:

  • 在关键的链路上进行打点

  • 业务方调用我接口,我已经确认收到消息了

  • 这条消息由于业务原因被过滤掉了(可能是userId转openId失败了)

  • 在下发时可能由于模板/token/用户无授权等等情况

  • 将打点的信息写到Kafka,再由Storm清洗,实时的查询的进Redis,离线的落到Hive表

这里的打点实际上就是我们打日志

报表or查询消息发送状态

比如下面是我实时推送后,根据userId查询推送的情况:

实时查看消息的发送情况

最后

总的来说,小程序推送消息并不难,也仅仅是几个接口而已。现在改版为订阅消息后,那接入起来就更加方便了。再过一个月,你们使用小程序的时候可能就会收到各种的弹窗提醒你们是否要授权xxx模板消息。

不知道大家看完我这篇文章有什么看法,欢迎在评论区留言。我会经常分享我在工作中遇到的问题以及学习后精心整理后的笔记,希望对大家有所帮助,觉得我的文章还有点东西,不妨关注我!

欢迎加入交流群学习,备注加群

说实话在这个群,哪怕您不说话,光看聊天记录,都能学到东西

推荐阿里云推广服务器89/年,229/3年,买来送自己,送女朋友马上过年再合适不过了,买了搭建个项目给面试官看也香,还可以熟悉技术栈,(老用户用家人账号买就好了,我用我女朋友的????)。扫码购买

我这里还有一个:搭建教程,从0开始一步一步带你搭建 

人在家中坐,班从天上来「小程序推送」相关推荐

  1. zhi hu7w阅读,如何人在家中坐,offer天上来!年薪百万,财务自由只是刚刚开始?(内容太过真实,Android高级工程师必经之路!)

    前言 在这一个月里,我利用闲余的时间看了下最近Android职业发展这块该怎么选择?这个问题各位大神的回答都非常透彻,相信对大家或多或少都在一定程度上有很大的帮助,今天在这里写这篇文章更多的是想以我开 ...

  2. 1000艘星舰,2050年送100万人润去火星!马斯克再吹「当代诺亚方舟」

      视学算法报道   编辑:袁榭 [新智元导读]2022年6月初,马斯克再弹老调,又一次宣布要送千艘星舰上火星.完成当代的诺亚方舟壮举. 世界首富.兼人类梗王马斯克院士,又在推特上字面意义上的例行满嘴 ...

  3. 拓宽你的认知,优秀的人都掌握的40个经典思维模型「附全部模型PPT」

    查理·芒格说:"思维模型会给你提供-种视角或思维框架,从而决定你观察事物和看待世界的视角.顶级的思维模型能提高你成功的可能性,并帮你避免失败." 思维模型,简单来看,就是我们大脑中 ...

  4. 流水线“厂哥”的华丽转变!小程序带动就业超500万人

    近年来,一些新兴职业不断进入人们的视野. 例如,电子竞技运营师.无人机驾驶员.物联网安装调试员等.此外,还有一个新的工种应运而生:小程序开发者. 在他们之中,有些人没有高学历,也并非计算机专业,甚至相 ...

  5. 基于Springboot+Vue2前后端分离框架的智慧校园系统源码,智慧学校源码+微信小程序+人脸电子班牌

    ▶ 智慧校园开发环境: 1.使用springboot框架Java+vue2 2.数据库MySQL5.7 3.移动端小程序使用小程序原生语音开发 4.电子班牌固件安卓7.1:使用Java Android ...

  6. Java数字化智慧校园平台源码,智慧学校源码+微信小程序+人脸电子班牌

    这是一套JAVA语言开发的智慧校园源码,有演示,有文档,源码完整开源,商用级别,可以私信博主. 技术开发环境:Java+springboot+vue+element-ui+mysql 用的是最新的技术 ...

  7. Java智慧校园系统源码,智慧学校源码 +小程序+电子班牌

    Java智慧校园系统源码 智慧学校源码 小程序+电子班牌 有演示,可正常上线运营+可授权 开发环境:Java+springboot+vue+element-ui+mysql 一款集智慧教学.智慧教务. ...

  8. Java智慧校园系统源码 智慧校园源码 智慧学校源码 智慧校园管理系统源码 小程序+电子班牌+人脸识别系统

    开发语言:Java+springboot+VUE +小程序  全套源码 正版授权 了解更多内容,可以私信我! 功能介绍: 一.基础数据维护 校区.年级.系统时间等系统信息的设置,学校信息展示.老师信息 ...

  9. 火柴人小程序linux,这里居然有火柴人的一些不一样的小程序?要不来玩一下

    火柴人还有不一样的玩法?是的,这几个火柴人结合了搭桥,结合了跑酷,结合了划线小游戏,是不是感觉有一些意外呢?小编推荐的这几款关于火柴人的小游戏考验着玩家种种能力,如果你觉得自己对游戏的天赋好,那就赶紧 ...

最新文章

  1. valgrind的说明使用和原理
  2. Android开发实践:掌握Camera的预览方向和拍照方向
  3. 汇编语言随笔(9)-实验11(用条件转移指令来编写子程序)
  4. jQuery操作标签--样式、文本、属性操作, 文档处理
  5. HTML CSS简介与图片映射
  6. 开启AngularJS 1.X的学习之路(1)
  7. 2 文件处理、权限管理、搜索
  8. 图文:详解数据库Oracle 11g的基本安装
  9. 如何防止softmax函数上溢出(overflow)和下溢出(underflow)
  10. ASIO音频驱动开发指南
  11. 华为防火墙IPSec详解与配置实验
  12. L. Ray in the tube
  13. kvm虚拟化管理工具
  14. 2021年计算机类 人工智能 软件SCI一区期刊
  15. APP运营推广人员必备通讯录
  16. 虚拟机centos7克隆
  17. 高级程序语言c 平时作业,东北大学20秋学期《高级语言程序设计基础X》在线平时作业3...
  18. 【Spring Boot】21.集成elasticsearch
  19. 重新整理秋招准备的思路-9.20
  20. BFS最强—如龙题解

热门文章

  1. 方法-MathType加载到word2016和powerpoint2016
  2. java潭州教育_潭州教育:大半年学习java的简单梳理,希望给大家提供一点帮助...
  3. 《啊哈算法》第四章之深度优先搜索
  4. windows登录oracle
  5. Html5+CSS3+JS代码实现圣诞节动态表白特效,祝你成功
  6. 谷歌浏览器被360导航篡改了如何更改回来?
  7. magento 赠品_免费赠品发布:“ Left Behind”壁纸
  8. Dataguard基本简介及三大保护模式介绍
  9. php购物车商品价格变了,php – WooCommerce:购物车价格覆盖文字
  10. ctfshow RCE极限挑战