小程序“订阅消息”采坑记

我在小程序的【每日一题】中新增了订阅功能,这篇文章就来讲讲设计及开发过程中遇到的坑。

什么是订阅消息

消息能力是小程序能力中的重要组成,我们为开发者提供了订阅消息能力,以便实现服务的闭环和更优的体验。

订阅消息推送位置:服务通知
订阅消息下发条件:用户自主订阅
订阅消息卡片跳转能力:点击查看详情可跳转至该小程序的页面

在这里插入图片描述

订阅消息包括两种:

一次性订阅消息

一次性订阅消息用于解决用户使用小程序后,后续服务环节的通知问题。用户自主订阅后,开发者可不限时间地下发一条对应的服务消息;每条消息可单独订阅或退订。

长期订阅消息

一次性订阅消息可满足小程序的大部分服务场景需求,但线下公共服务领域存在一次性订阅无法满足的场景,如航班延误,需根据航班实时动态来多次发送消息提醒。为便于服务,我们提供了长期性订阅消息,用户订阅一次后,开发者可长期下发多条消息。

目前长期性订阅消息仅向政务民生、医疗交通金融教育等线下公共服务开放,后期将逐步支持到其他线下公共服务业务。

开始开发

首先要明白一点,当用户订阅【每日一题】后,并不是马上发送订阅消息。用户订阅的目的是,当下次发布题目时,可以提醒用户去答题。因此需要建一个数据库表,把订阅的用户信息存起来。于是就建了一个非常简单的表,只需要保存订阅用户的 openid 即可。

在这里插入图片描述

然后想到以后万一其他地方有新的订阅功能时,岂不是又要新建表?

为了更好的扩展性,于是增加了一个字段,叫做 template_id,用来存订阅模板的ID。这样所有的订阅都可以只用这一个表解决。

首次测试

在页面中订阅消息,然后可以在任意时间通过服务端发送消息。

在这里插入图片描述

在微信的“服务通知”中成功收到消息,NICE

于是迫不及待的又调用了一次,结果报错了,字面意思很容易理解,“用户拒绝接受消息”

{
  errcode: 43101,
  errmsg: 'user refuse to accept the msg rid: 601cebc4-6c7fee57-1d276794'
}

定位问题

在上面提到了有两种订阅消息,我是用的是一次性订阅消息,在描述中有一句话很关键:开发者可不限时间地下发一条对应的服务消息。

也就是说用户订阅后只能发送一条服务消息,如果需要再次发送,那么需要用户重新订阅。经过测试,如果用户订阅了一次后,在服务端发送消息前,用户再次订阅了一次,那么此时服务端可以向用户发送两条服务消息。也就是说用户订阅的次数是可以累加的。

那之前设计的数据库表就有很大的问题,现在无法判断是否还可以向每个用户发送消息,有可能之前已经发送过了,如果对每个用户都尝试发送,那会产生很多不必要的请求。

改进

还是从数据表着手,新增一个 count 字段,用来表示可以向该用户发送对应订阅消息的次数。

订阅:用户首次订阅,count默认值为1,若重复订阅,count + 1。

发送消息:获取对应消息模板ID,及count值大于0的用户。发送成功后把count值减1,拒绝接受则把count置为0,其他错误则不做任何处理。

在这里插入图片描述

界面改进

"明日提醒"按钮最开始是设计成一直显示的,用户可以多次点击订阅,如果点击5次,那接下来的5天内,用户都会收到订阅消息。

到了第六天就会发送失败,这就会导致用户产生误解,难道是今天没发布题目吗?

为了避免这样的误解发生,当用户订阅成功后,会隐藏该按钮。

当然在进入该界面时,也需要查询用户是否已经订阅过“明日提醒”,这里我只需要判断是否有该用户订阅信息及 count 的值是否大于0即可。

在这里插入图片描述

自动化脚本

这个功能上线后,那必然是一个每天都要进行的任务,如果每天都手动的发送是一个相当无脑的行为。

来看看整个发送过程要进行哪些步骤吧:

第一步:获取今日题目,如果今日未发布题目,那就无需进行后面的操作,直接终止本次发送任务。并在随后每隔一小时定时执行。

第二步:获取当月的排名信息

第三步:获取当前可以发送订阅消息的用户

第四步:处理数据,这里有许多的情况,如:某个订阅用户在当月无任何打卡信息,那么他的排名应该是最后一名;每日更换“温馨提示”内容;

第五步:给符合条件的用户发送订阅消息

第六步:保存每次发送消息的返回信息,便于出现问题时定位原因

第七步:上面的步骤每天定时执行

扫码体验一下吧,每天不仅可以学到支持,还可以获得奖金哦
欢迎访问我的个人网站 www.dengzhanyong.com
我的公众号:【前端筱园

在这里插入图片描述

内容概要:本文档详细介绍了在三台CentOS 7服务器(IP地址分别为192.168.0.157、192.168.0.158和192.168.0.159)上安装和配置Hadoop、Flink及其他大数据组件(如Hive、MySQL、Sqoop、Kafka、Zookeeper、HBase、Spark、Scala)的具体步骤。首先,文档说明了环境准备,包括配置主机名映射、SSH免密登录、JDK安装等。接着,详细描述了Hadoop集群的安装配置,包括SSH免密登录、JDK配置、Hadoop环境变量设置、HDFS和YARN配置文件修改、集群启动与测试。随后,依次介绍了MySQL、Hive、Sqoop、Kafka、Zookeeper、HBase、Spark、Scala和Flink的安装配置过程,包括解压、环境变量配置、配置文件修改、服务启动等关键步骤。最后,文档提供了每个组件的基本测试方法,确保安装成功。 适合人群:具备一定Linux基础和大数据组件基础知识的运维人员、大数据开发工程师以及系统管理员。 使用场景及目标:①为大数据平台建提供详细的安装指南,确保各组件能够顺利安装和配置;②帮助技术人员快速掌握Hadoop、Flink等大数据组件的安装与配置,提升工作效率;③适用于企业级大数据平台的建与维护,确保集群稳定运行。 其他说明:本文档不仅提供了详细的安装步骤,还涵盖了常见的配置项解释和故障排查建议。建议读者在安装过程中仔细阅读每一步骤,并根据实际情况调整配置参数。此外,文档中的命令和配置文件路径均为示例,实际操作时需根据具体环境进行适当修改。
在无线通信领域,天线阵列设计对于信号传播方向和覆盖范围的优化至关重要。本题要求设计一个广播电台的天线布局,形成特定的水平面波瓣图,即在东北方向实现最大辐射强度,在正东到正北的90°范围内辐射衰减最小且无零点;而在其余270°范围内允许出现零点,且正西和西南方向必须为零。为此,设计了一个由4个铅垂铁塔组成的阵列,各铁塔上的电流幅度相等,相位关系可自由调整,几何布置和间距不受限制。设计过程如下: 第一步:构建初级波瓣图 选取南北方向上的两个点源,间距为0.2λ(λ为电磁波波长),形成一个端射阵。通过调整相位差,使正南方向的辐射为零,计算得到初始相位差δ=252°。为了满足西南方向零辐射的要求,整体相位再偏移45°,得到初级波瓣图的表达式为E1=cos(36°cos(φ+45°)+126°)。 第二步:构建次级波瓣图 再选取一个点源位于正北方向,另一个点源位于西南方向,间距为0.4λ。调整相位差使西南方向的辐射为零,计算得到相位差δ=280°。同样整体偏移45°,得到次级波瓣图的表达式为E2=cos(72°cos(φ+45°)+140°)。 最终组合: 将初级波瓣图E1和次级波瓣图E2相乘,得到总阵的波瓣图E=E1×E2=cos(36°cos(φ+45°)+126°)×cos(72°cos(φ+45°)+140°)。通过编程实现计算并绘制波瓣图,可以看到三个阶段的波瓣图分别对应初级波瓣、次级波瓣和总波瓣,最终得到满足广播电台需求的总波瓣图。实验代码使用MATLAB编写,利用polar函数在极坐标下绘制波瓣图,并通过subplot分块显示不同阶段的波瓣图。这种设计方法体现了天线阵列设计的基本原理,即通过调整天线间的相对位置和相位关系,控制电磁波的辐射方向和强度,以满足特定的覆盖需求。这种设计在雷达、卫星通信和移动通信基站等无线通信系统中得到了广泛应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端筱园

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值