微信小程序订阅消息开发总结
<h2>1.功能</h2><p><img src="https://img2020.cnblogs.com/blog/2102264/202105/2102264-20210507123225771-841246741.png" alt="" width="189" height="202" loading="lazy"></p>
<ul>
<li>订阅消息推送位置:服务通知</li>
<li>订阅消息下发条件:用户自主订阅</li>
<li>订阅消息卡片跳转能力:点击查看详情可跳转至该小程序的页面</li>
</ul>
<h2>2.订阅流程</h2>
<h3>步骤一:获取模板 ID</h3>
<p>在微信公众平台手动配置获取模板 ID:<br>登录 https://mp.weixin.qq.com 获取模板,如果没有合适的模板,可以申请添加新模板,审核通过后可使用。</p>
<h3 id="步骤二:获取下发权限">步骤二:获取下发权限</h3>
<p>详见小程序端消息订阅接口 wx.requestSubscribeMessage</p>
<h3 id="步骤三:调用接口下发订阅消息">步骤三:调用接口下发订阅消息</h3>
<p>详见服务端消息发送接口 subscribeMessage.send</p>
<h3 id="注意事项">注意事项</h3>
<ul>
<li>用户勾选 “总是保持以上选择,不再询问” 之后,下次订阅调用 wx.requestSubscribeMessage 不会弹窗,保持之前的选择,修改选择需要打开小程序设置进行修改。</li>
</ul>
<h2>3.用户点击案例分析</h2>
<h3>3.1.用户取消订阅</h3>
<p>用户点击“取消”按钮,回调结果</p>
<p><img src="https://img2020.cnblogs.com/blog/2102264/202105/2102264-20210507104629455-2008380336.png" alt="" loading="lazy"></p>
<p><span style="color: rgba(0, 0, 0, 1)">第二次点击</span><span style="color: rgba(255, 0, 0, 1)">会重新弹窗授权</span></p>
<h3>3.2.多个订阅消息只订阅了其中一个订阅</h3>
<p>比如,现在有两个订阅消息,第一个你勾选了,第二个没勾选。然后点击“允许”按钮</p>
<p><img src="https://img2020.cnblogs.com/blog/2102264/202105/2102264-20210507123622364-2065216228.png" alt="" width="160" height="169" loading="lazy"></p>
<p> 回调结果中显示允许了一个订阅内容,‘accept’表示同意,‘reject’表示拒绝</p>
<p><img src="https://img2020.cnblogs.com/blog/2102264/202105/2102264-20210507104726801-585035847.png" alt="" loading="lazy"></p>
<p><span style="color: rgba(0, 0, 0, 1)">第二次点击<span style="color: rgba(255, 0, 0, 1)">不会重新弹窗授权</span>的</span>,回调直接显示如上相同内容。</p>
<h3>3.3.全部允许订阅</h3>
<p>勾选所有订阅消息,并点击“允许”按钮。回调结果</p>
<p><img src="https://img2020.cnblogs.com/blog/2102264/202105/2102264-20210507112819791-1338766707.png" alt="" loading="lazy"></p>
<p><span style="color: rgba(0, 0, 0, 1)">第二次点击<span style="color: rgba(255, 0, 0, 1)">不会重新弹窗</span>授权的</span></p>
<h3>3.4.拒绝不再询问</h3>
<p>点击最下方“拒绝不再询问”按钮</p>
<p><img src="https://img2020.cnblogs.com/blog/2102264/202105/2102264-20210507112451585-961180315.png" alt="" loading="lazy"></p>
<p><span style="color: rgba(0, 0, 0, 1)">第二次点击<span style="color: rgba(255, 0, 0, 1)">不会重新弹窗</span>授权的</span></p>
<h3>3.5.用户手动关闭订阅按钮</h3>
<p><img src="https://img2020.cnblogs.com/blog/2102264/202105/2102264-20210507123154416-1307603741.png" alt="" loading="lazy"></p>
<p><span style="color: rgba(255, 0, 0, 1)">用户再次请求</span><span style="color: rgba(255, 0, 0, 1)">不会重新弹窗授权</span>,提示按钮是关闭状态</p>
<p><img src="https://img2020.cnblogs.com/blog/2102264/202105/2102264-20210507111522379-1078687298.png" alt="" loading="lazy"></p>
<h2>4.获取用户订阅通知权限记录</h2>
<div>wx.getSetting()默认情况下,获取结果无法获取用户是否授权订阅消息。</div>
<p><img src="https://img2020.cnblogs.com/blog/2102264/202105/2102264-20210507140534281-1977584043.png" alt="" loading="lazy"></p>
<p>为了获取具体订阅消息结果,我们需要传递参数withSubscriptions,微信文档描述如下:</p>
<p><img src="https://img2020.cnblogs.com/blog/2102264/202105/2102264-20210510221356559-1693425067.png" alt="" width="647" height="169" loading="lazy"></p>
<p><img src="https://img2020.cnblogs.com/blog/2102264/202105/2102264-20210510221459247-1107564648.png" alt="" width="573" height="342" loading="lazy"></p>
<h2>5.点击查看详情可跳转至该小程序的页面</h2>
<p>当用户订阅消息后,服务端可以通过接口发送订阅消息,用户微信客户端接收到订阅消息后,点击可跳转至小程序内页面。</p>
<h3>5.1后端发送订阅消息卡片示例</h3>
<p><img src="https://img2020.cnblogs.com/blog/2102264/202105/2102264-20210508163531255-1891675469.png" alt="" width="252" height="164" loading="lazy"></p>
<h3>5.2发送订阅消息接口参数</h3>
<p>send接口配置跳转小程序页面参数如下:</p>
<p> <img src="https://img2020.cnblogs.com/blog/2102264/202105/2102264-20210508162257332-518461854.png" alt="" width="608" height="230" loading="lazy"></p>
<p><strong>page取值</strong></p>
<p>eg:</p>
<p>若 page = "page/index2/index2?a=1&b=2"。</p>
<p>表示用户收到服务端推送的订阅消息后,点击订阅消息卡片后,将会直接跳转至小程序路由"page/index2/index2"所对应的页面。"?"后面的内容表示跳转页面时所携带的query请求参数。</p>
<p><strong>miniprogram_state</strong>在开发模式下,应该配置为'developer'值,选为体验版本配置值为'trail',线上版本配置值为'formal'。配置不正确的话,微信上是收不到订阅消息的。 </p>
<h3>5.3小程序页面接收订阅消息传递的参数</h3>
<p>点击卡片后,小程序跳转页面(如上描述的page/index2/index2页面),在onLoad生命周期函数中将会可以接收到所携带的query请求参数。如下图所示:</p>
<p><img src="https://img2020.cnblogs.com/blog/2102264/202105/2102264-20210508170442703-351836576.png" alt="" loading="lazy"> </p>
<p>巨坑,<span style="color: rgba(255, 0, 0, 1)">不要在onLaunch中或者用"wx.getLaunchOptionsSync()"接收订阅消息参数</span>(虽然也能收到),因为和小程序冷启动有关,每次取得数据都将会是第一次启动时的参数。</p>
<h2>6.问题总结</h2>
<ul>
<li>①,wx.requestSubscribeMessage请求订阅消息权限api只能在点击按钮的时候,同步请求该api,若在异步操作后请求订阅消息权限,则会报错提示“需要用户手势点击操作”</li>
<li>②,若用户拒绝过(1,对于多选的订阅,若有一条没有被允许,就相当于有一条被拒绝;2,点击拒绝不再访问),第二次请求将不再弹窗授权。</li>
</ul>
<p style="margin-left: 30px"> 处理:wx.openSetting() 打开设置界面,用户手动开启订阅开关,从而开启授权。当然用户全部允许订阅之后,也是不会重新弹窗授权的。</p>
<ul>
<li>③,wx.openSetting() 的回调中,没有订阅消息的相关授权数据,做法可以在回调函数中,主动wx.getSetting()获取订阅消息授权数据。参考④</li>
<li>④,wx.getSetting() 获取订阅消息授权记录需要额外参数 withSubscriptions:true .</li>
</ul>
<h2>7.待解决问题</h2>
<h3>7.1.已接收订阅消息会显示已经拒绝标志
</h3>
<p> <img src="https://img2020.cnblogs.com/blog/2102264/202105/2102264-20210508190836349-1254705791.png" alt="" width="304" height="182" loading="lazy"> </p>
<h3>7.2.用户授权过,不能清除授权记录
</h3>
<p>若用户点击过订阅消息的允许或者拒绝,目前还没有找到方法可以清除用户订阅消息授权记录。(卸载小程序也不行)</p>
<p>以下截图为小程序官网对授权有效期的描述内容,但是对于订阅消息的授权,卸载小程序发现不可清除授权记录。(实测无效)以下为微信小程序官网对授权有效期的描述。</p>
<p><img src="https://img2020.cnblogs.com/blog/2102264/202105/2102264-20210510181712135-1321550658.png" alt="" width="465" height="74" loading="lazy"></p>
<h3>7.3.用户主动开启或者关闭订阅消息的授权
</h3>
<p>用户主动在设置界面开启或者关闭订阅消息的授权,小程序界面没有提供监听回调方法,需要主动查询授权信息(wx.getSetting()) </p>
<p> </p>
<p> </p>
<p> </p>
<p><span style="color: rgba(255, 102, 0, 1); font-size: 18px">@<span style="color: rgba(255, 102, 0, 1)">萍2樱释ღ( ´・ᴗ・` )</span></span></p>
</div>
<div id="MySignature" role="contentinfo">
打不死的小强<br><br>
来源:https://www.cnblogs.com/mggahui/p/14738041.html
頁:
[1]