微信小程序订阅消息开发总结

时间:2024-02-18 20:31:33

1.功能

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

2.订阅流程

步骤一:获取模板 ID

在微信公众平台手动配置获取模板 ID:
登录 https://mp.weixin.qq.com 获取模板,如果没有合适的模板,可以申请添加新模板,审核通过后可使用。

步骤二:获取下发权限

详见小程序端消息订阅接口 wx.requestSubscribeMessage

步骤三:调用接口下发订阅消息

详见服务端消息发送接口 subscribeMessage.send

注意事项

  • 用户勾选 “总是保持以上选择,不再询问” 之后,下次订阅调用 wx.requestSubscribeMessage 不会弹窗,保持之前的选择,修改选择需要打开小程序设置进行修改。

3.用户点击案例分析

3.1.用户取消订阅

用户点击“取消”按钮,回调结果

第二次点击会重新弹窗授权

3.2.多个订阅消息只订阅了其中一个订阅

比如,现在有两个订阅消息,第一个你勾选了,第二个没勾选。然后点击“允许”按钮

回调结果中显示允许了一个订阅内容,‘accept’表示同意,‘reject’表示拒绝

第二次点击不会重新弹窗授权,回调直接显示如上相同内容。

3.3.全部允许订阅

勾选所有订阅消息,并点击“允许”按钮。回调结果

第二次点击不会重新弹窗授权的

3.4.拒绝不再询问

点击最下方“拒绝不再询问”按钮

第二次点击不会重新弹窗授权的

3.5.用户手动关闭订阅按钮

用户再次请求不会重新弹窗授权,提示按钮是关闭状态

4.获取用户订阅通知权限记录

wx.getSetting()默认情况下,获取结果无法获取用户是否授权订阅消息。

为了获取具体订阅消息结果,我们需要传递参数withSubscriptions,微信文档描述如下:

5.点击查看详情可跳转至该小程序的页面

当用户订阅消息后,服务端可以通过接口发送订阅消息,用户微信客户端接收到订阅消息后,点击可跳转至小程序内页面。

5.1后端发送订阅消息卡片示例

5.2发送订阅消息接口参数

send接口配置跳转小程序页面参数如下:

 

page取值

eg:

若 page = "page/index2/index2?a=1&b=2"。

表示用户收到服务端推送的订阅消息后,点击订阅消息卡片后,将会直接跳转至小程序路由"page/index2/index2"所对应的页面。"?"后面的内容表示跳转页面时所携带的query请求参数。

miniprogram_state在开发模式下,应该配置为\'developer\'值,选为体验版本配置值为\'trail\',线上版本配置值为\'formal\'。配置不正确的话,微信上是收不到订阅消息的。 

5.3小程序页面接收订阅消息传递的参数

点击卡片后,小程序跳转页面(如上描述的page/index2/index2页面),在onLoad生命周期函数中将会可以接收到所携带的query请求参数。如下图所示:

 

巨坑,不要在onLaunch中或者用"wx.getLaunchOptionsSync()"接收订阅消息参数(虽然也能收到),因为和小程序冷启动有关,每次取得数据都将会是第一次启动时的参数。

6.问题总结

  • ①,wx.requestSubscribeMessage请求订阅消息权限api只能在点击按钮的时候,同步请求该api,若在异步操作后请求订阅消息权限,则会报错提示“需要用户手势点击操作”
  • ②,若用户拒绝过(1,对于多选的订阅,若有一条没有被允许,就相当于有一条被拒绝;2,点击拒绝不再访问),第二次请求将不再弹窗授权。

   处理:wx.openSetting() 打开设置界面,用户手动开启订阅开关,从而开启授权。当然用户全部允许订阅之后,也是不会重新弹窗授权的。

  • ③,wx.openSetting() 的回调中,没有订阅消息的相关授权数据,做法可以在回调函数中,主动wx.getSetting()获取订阅消息授权数据。参考④
  • ④,wx.getSetting() 获取订阅消息授权记录需要额外参数 withSubscriptions:true .

7.待解决问题

7.1.已接收订阅消息会显示已经拒绝标志

  

7.2.用户授权过,不能清除授权记录

若用户点击过订阅消息的允许或者拒绝,目前还没有找到方法可以清除用户订阅消息授权记录。(卸载小程序也不行)

以下截图为小程序官网对授权有效期的描述内容,但是对于订阅消息的授权,卸载小程序发现不可清除授权记录。(实测无效)以下为微信小程序官网对授权有效期的描述。

7.3.用户主动开启或者关闭订阅消息的授权

用户主动在设置界面开启或者关闭订阅消息的授权,小程序界面没有提供监听回调方法,需要主动查询授权信息(wx.getSetting()) 

 

 

 

@萍2樱释ღ( ´・ᴗ・` )