900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 微信小程序中服务器主动向小程序多个客户端发送通知消息(模板消息)的解决方法

微信小程序中服务器主动向小程序多个客户端发送通知消息(模板消息)的解决方法

时间:2021-06-10 02:23:41

相关推荐

微信小程序中服务器主动向小程序多个客户端发送通知消息(模板消息)的解决方法

因公司做的一项目,需要用到移动端,但是移动端的操作功能不是很多。如果开发app的话,就需要开发两个版本;为了方便,经过商量后就采用了微信小程序开发。但是,由于小程序的局限性,导致某些功能不太好实现,本文主要针对小程序消息通知(实现服务器主动向不同客户端发送消息通知)进行一种解决思路的介绍。

小程序开发官方API中的消息通知有下发条件且只有两种情况:如果我们在开发的过程中需要实现某个用户操作完成之后,需要通知下个用户来进行操作,我们需要发送一条通知消息给接下来需要操作的用户。但是小程序官方文档中的消息通知只有在支付与表单提交的时候,才能下发消息通知。因此我们只能从这两种里面选择实现。我们用排除法,支付肯定不行,所以就只剩下表单提交了,但是表单提交又涉及到一个问题,就是要求小程序内发生提交表单的行为,而且只能是通知到操作本人。因此,我们就需要换种思路来解决问题,下面就解决思路做以介绍。既然不能直接用表单的提交操作,我们就需要想办法间接的用表单方式实现消息通知。我们可以先获取到表单提交的数据(主要是获取formId,微信小程序的模板消息发送提供的接口中必要参数--表单提交方式条件下),将数据保存到后端,然后在用的时候,取出即可。

具体做法就是,前台获取formId发送到后台服务器,后台调用接口实现发送消息通知,由于formId只能有用户触发表单提交操作产生,英雌需要前台将每次获取得到的formId都要发送到后台服务器,后台将收集到的formId与对应的用户绑定存储,代码实现如下:

小程序端:

<form bindsubmit="submit" report-submit='true' ><button form-type="submit" type="default" size="mini">提交</button></form>

submit: function (e) {console.log(e.detail.formId);}

注意:表单的需要添加属性 report-submit='true'。

后台服务器保存实体:

public class WeChatUserMapper implements Serializable{private Integer id;private String formId;//表单Idprivate String openId;//微信账号的openIdprivate String templateId;//消息模板Idprivate Date createDate;//创建日期public WeChatUserMapper() {}public WeChatUserMapper(Integer id, String formId, String openId, String templateId, Date createDate) {this.id = id;this.formId = formId;this.openId = openId;this.templateId = templateId;this.createDate = createDate;}@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "id")public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}@Column(name = "form_id")public String getFormId() {return formId;}public void setFormId(String formId) {this.formId = formId;}@Column(name = "open_id")public String getOpenId() {return openId;}public void setOpenId(String openId) {this.openId = openId;}@Column(name = "template_id")public String getTemplateId() {return templateId;}public void setTemplateId(String templateId) {this.templateId = templateId;}@Temporal(TemporalType.TIMESTAMP)@Column(name = "create_date",length = 23)public Date getCreateDate() {return createDate;}public void setCreateDate(Date createDate) {this.createDate = createDate;}}

当然,存储的formId肯定需要给一个上限,要不然,formId的个数会无限存储。将获取的formId存储后,最后就是调用模板消息发送接口,实现消息通知发送。当然,发送之前必须得判断,formId是否还有效,因为,formId获取后,只有7天的生命周期,一旦超过这个时间,该formId就无效,从而会导致发送消息通知失败,因此,在每次获取你保存的formId对应的映射信息时,你必须保证formId的有效性,将无效的formId清除掉。同时也要讲已用过的formId删除掉。

下面就是最终的消息通知展示:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。