因公司做的一项目,需要用到移动端,但是移动端的操作功能不是很多。如果开发app的话,就需要开发两个版本;为了方便,经过商量后就采用了微信小程序开发。但是,由于小程序的局限性,导致某些功能不太好实现,本文主要针对小程序消息通知(实现服务器主动向不同客户端发送消息通知)进行一种解决思路的介绍。
小程序开发官方API中的消息通知有下发条件且只有两种情况:具体做法就是,前台获取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;//表单Id private String openId;//微信账号的openId private String templateId;//消息模板Id private 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删除掉。
下面就是最终的消息通知展示:













