zoukankan      html  css  js  c++  java
  • 微信小程序订阅消息开发总结

    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樱释ღ( ´・ᴗ・` )

    打不死的小强
  • 相关阅读:
    c# linq.Where+Func<object,bool>筛选数据
    【转】深入线程安全容器的实现方法
    c# 泛型+反射
    c# List<接口>小技巧
    winfrom的右击菜单项事件中如何获取关联控件的引用
    ASP.NET 1.0
    让包含GridView的div或panel的滚动条自己拉到底部怎么做?
    微软的IE中调试JavaScript的工具下载链接
    ASP.NET调试启动默认浏览器如何设置
    C# WinForm的PictureBox控件图片的拉伸或收缩方式跟随着控件的大小
  • 原文地址:https://www.cnblogs.com/mggahui/p/14738041.html
Copyright © 2011-2022 走看看