【小程序】一次关于小程序消息推送能力的分析及实现

一、推送消息需求

        一个简单常见的需求:推送小程序消息通知到用户!

        需要解决的问题:

  • 小程序消息推送服务有什么限制?
  • 小程序可支持推送哪些类型消息?
  • 如何实现小程序消息通知推送服务?

二、小程序提供的能力

        小程序支持通过【消息模板】向“订阅消息”的用户推送消息通知!

  • 支持向主动“订阅消息”的用户推送通知(注意:这里是“订阅消息”而非订阅小程序),不支持主动向未订阅消息用户推送通知
  • 支持通过【消息模板】发送“订阅消息”,不支持发送任意无模板消息;
  • 一般小程序不支持自定义消息模板(目前自定义消息模板功能已废弃,暂不确定哪些类型小程序或仍可自定义消息模板,有哪些方面的限制)
  • 一般小程序仅支持从官方提供的公共模板库中选择【消息模板】
  • 一般小程序仅可支持发送“一次性订阅消息”,即“一次订阅,一次推送”
  • 目前仅公共服务类小程序可支持发送“长期订阅消息”,即“一次订阅,长期推送”

1、订阅消息能力

小程序订阅消息 | 微信开放文档

 2、三种消息类型

由于长期订阅目前仅面向公共服务开放,如此我等普通小程序就只能选择一次性订阅了!

 3、不支持自定义模板

1)自定义消息模板接口已废弃

 2)不支持新建自定义模板

三、订阅消息的实现流程分析

1、实现步骤

小程序订阅消息 | 微信开放文档

2、完整流程

        实现发送订阅消息,首先需要配置消息模板、获取小程序的appkey、secret、用户openid、token等,因此,从0到1的完整实现流程如下:

四、一次性订阅消息的实现及示例

1、配置消息模板+获取appid+secret

链接:微信公众平台

 1)配置消息模板

2)获取appid + secret

2、登录认证并获取openid

 小程序登录 | 微信开放文档

 

1)获取code

wx.login(Object object) | 微信开放文档

wx.login({
  success (res) {
    if (res.code) {
      //发起网络请求
      wx.request({
        url: 'https://example.com/onLogin',
        data: {
          code: res.code
        }
      })
    } else {
      console.log('登录失败!' + res.errMsg)
    }
  }
})

2)获取openid

auth.code2Session | 微信开放文档

GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

3、订阅消息

 wx.requestSubscribeMessage(Object object) | 微信开放文档

wx.requestSubscribeMessage({
  tmplIds: [''],
  success (res) { }
})

4、获取token

auth.getAccessToken | 微信开放文档

GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

5、发送订阅通知

subscribeMessage.send | 微信开放文档

POST https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN
Accept: */*
Cache-Control: no-cache
Content-Type: application/json;charset=UTF-8

{
  "touser": "OPENID",
  "template_id": "TEMPLATE_ID",
  "page": "index",
  "miniprogram_state":"developer",
  "lang":"zh_CN",
  "data":{
        "character_string1":{
            "value":"FK20220819001"
        },
        "phrase2":{
            "value":"审批通过"
        },
        "time3":{
            "value":"2022年08月19日 15:01"
        },
        "thing4":{
            "value":"领导同意了"
        }
    }
}

注意:data数据的key与消息模板定义一致

6、示例

四、链接

微信公众平台

小程序订阅消息 | 微信开放文档

小程序登录 | 微信开放文档

wx.login(Object object) | 微信开放文档

auth.code2Session | 微信开放文档

wx.requestSubscribeMessage(Object object) | 微信开放文档

auth.getAccessToken | 微信开放文档

subscribeMessage.send | 微信开放文档


 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Netty是一个基于Java的异步事件驱动的网络应用框架,而小程序消息推送是指将消息实时推送给用户的通知服务。Netty可以通过以下步骤实现小程序消息推送: 1. 小程序客户端向服务器发起连接请求:首先,小程序客户端需要与服务器建立连接,可以使用Netty的客户端模块来实现,在请求连接时可以携带所需的信息和权限认证。 2. 服务器端接收连接并处理:服务器端需要使用Netty的服务端模块来接收客户端的连接请求,并进行相应的处理。可以采用Netty的事件处理机制来监听连接事件,一旦有新的连接建立,就可以处理相关逻辑,如消息推送和处理。 3. 消息推送:一旦建立了连接,服务器端就可以向客户端发送消息了。Netty的Channel模块提供了丰富的消息传输方式,可以通过ChannelHandler来定义消息的处理逻辑,然后将消息推送给客户端。可以根据业务需求选择合适的消息传输方式,比如WebSocket、TCP等。 4. 异常处理:在消息推送过程中可能会出现各种异常情况,比如网络波动、连接断开等,Netty提供了丰富的异步事件处理机制和异常处理逻辑,可以及时处理这些异常,保证消息推送的可靠性和稳定性。 总的来说,Netty提供了灵活且高效的网络通信能力,可以很好地支持小程序消息推送实现。通过合理的使用Netty的各种模块和功能,可以实现小程序消息推送的即时性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Gary强z

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

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

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

打赏作者

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

抵扣说明:

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

余额充值