微信小程序订阅消息及遇到的种种坑解决方法(全) 您所在的位置:网站首页 订阅方法 微信小程序订阅消息及遇到的种种坑解决方法(全)

微信小程序订阅消息及遇到的种种坑解决方法(全)

#微信小程序订阅消息及遇到的种种坑解决方法(全)| 来源: 网络整理| 查看: 265

前言

微信小程序「订阅消息」能力,来了!搜集分享使用订阅消息的流程方法以及各种奇葩问题统一整理,欢迎讨论~

在这里插入图片描述

不同点

与「模板消息」不同的是,其是在用户点击触发或者支付成功之后,开发者可在 7天内推送1-3条服务通知。而「订阅消息」则需要用户主动订阅消息通知,开发者才可向用户推送,但不受时间限制,具体发送信息条数根据该能力的不同类型有不同标准。

此外,值得注意的是,使用「订阅消息」后,原小程序模板消息接口将于2020年1月10日下线,也就无法再使用原接口推送模板消息,开发者们需要注意及时调整接口。但是,微信服务号模板消息暂不受影响。

特点

1、选择权回到用户手中。在小程序中,「订阅消息」像是一个开关,需要用户主动点击授权之后,小程序才能向其推送服务通知,当然,用户也可以随时拒收该小程序的服务通知。而此前,用户只能被动地接收消息。

2、时长不受限制。「订阅消息」取消了7天内推送消息的时间限制,只要用户没有主动拒收消息推送,开发者就可以随时推送服务通知。对于服务周期超过7天的小程序而言,这就完美解决了此前的疑虑。

好了那我们来看看如何使用这个订阅消息吧~

结合微信小程序官方文档「订阅消息」部分进行配合阅读,更加深刻哦~ ↓ 直通车链接 ↓ 订阅授权弹窗部分 服务端下发订阅通知部分

简述大概流程 小程序端发起的授权弹窗过程

顺便说一下如何获取用户授权信息wx.getting,及当用户关闭授权如何跳到设置授权页一条龙服务,附上其他诸多问题

授权后服务端下发订阅消息流程

整理一下订阅发送各参数的具体意思,虽然文档有,但是有例子的话对着看更好理解

搜集解疑各种疑难杂症请添加图片描述 小程序端发起的授权弹窗过程

调起客户端小程序订阅消息界面,返回用户订阅消息的操作结果。当用户勾选了订阅面板中的“总是保持以上选择,不再询问”时,模板消息会被添加到用户的小程序设置页,通过 wx.getSetting 接口可获取用户对相关模板消息的订阅状态。

留意文档中的这句话 → 如果用户之前设置过不在询问的话,其实是调不起授权弹窗的,那我们怎么获取用户的授权信息呢?

wx.getSetting可以获取这些信息:对应的wx.getting文档 文档后面有示例代码这边就不在贴出来了

如果要获取 订阅消息的订阅状态 需要设置 withSubscriptions 为true即可(默认为false,不开不获取),成功获取后 authSetting 是有关于用户的一些权限,而 subscriptionsSetting 则是我们需要的订阅权限信息,里面有一个总开关 mainSwitch 就是你是否接受当前小程序的订阅信息,如果这个为false的话其实你根本调不起弹窗,那小伙伴就会问如果我要让他知道关闭了权限并且怎么引导他去开呢?

先贴出代码:

发送订阅消息逻辑处理 const SUBSCRIBE_ID = 'RHPuVfEyGe0q0n7lZyzz4r-zyGe07lZyzz4r3' // 模板ID goCollectSet() { let that = this; if (wx.requestSubscribeMessage) { wx.requestSubscribeMessage({ tmplIds: [SUBSCRIBE_ID], success(res) { if (res[SUBSCRIBE_ID] === 'accept') { // 用户主动点击同意...do something } else if (res[SUBSCRIBE_ID] === 'reject') { // 用户主动点击拒绝...do something } else { wx.showToast({ title: '授权订阅消息有误', icon: 'none' }) } }, fail(res) { // 20004:用户关闭了主开关,无法进行订阅,引导开启 if (res.errCode == 20004) { // 显示引导设置弹窗 that.setData({ isShowSetModel: true }) }else{ // 其他错误信息码,对应文档找出原因 wx.showModal({ title: '提示', content: res.errMsg, showCancel: false }) } } }); } else { wx.showModal({ title: '提示', content: '请更新您微信版本,来获取订阅消息功能', showCancel: false }) } }

【wx.requestSubscribeMessage文档】

简述一下上面的代码,goCollectSet 方法则是授权订阅消息权限执行的方法,由于 wx.requestSubscribeMessage 需要基础库 2.4.4 后才支持,因此我们要做个判断,如果发现用户当前微信没有此方法,则提示更新微信版本;然后 tmplIds Array字段里面是填对应的订阅模板ID

【问】订阅模板ID哪里获取、哪里新建呢? · 【答】 微信公众号平台 登录后,如果有多个小程序,选择当前开发的小程序,成功进入界面后,在 功能 板块 -> 订阅消息,里面可以新建模板也可以使用公共订阅模板,有模板的话直接复制对应的ID即可

然后如果此时用户开启了订阅消息通知权限的话,则会出现授权订阅消息的窗口啦,如图: 在这里插入图片描述 如果此时用户点【允许】此时就会返回 accept 状态,反之点【取消】则返回 reject,具体的状态字段如图 在这里插入图片描述 我们可以发现这个返回值,是用你的模板id作为键,所以获取的时候要根据模板ID获取,这边只说允许和拒绝的返回,对于 filter 的返回就是因为模板标题同名导致过滤的,所以新建的时候记得区分开已有的标题的模板禁止同名,success成功一般就这些,主要是用户自行的操作,【允许】后就会订阅一次,注意这里是说一次性订阅的订阅消息哦,关于区别可以看下面:

【问】一次性订阅模板和永久性订阅有什么区别?如果我需要用永久性订阅怎么操作? · 【答】 1、一次性订阅消息:用户订阅一次后,开发者可下发一条消息,不限时间。若用户勾选了“总是保持以上选择,不再询问”且点击了允许,那么以后都默认同意订阅这条消息。用户不再做多次选择,开发者也避免了更繁琐的提醒。 · 2、长期性订阅消息:用户订阅一次后,可长期下发多条消息。目前长期性订阅消息向 政务、医疗、交通、金融、教育 等线下公共服务开放,后续将综合评估行业需求和用户体验持续完善。(长期订阅消息只针对特定行业开放,所以普通开发者并无法使用)

好了回到正题,此时用户点击一次就相当于订阅了一次,相当于你拥有了一次获取系统通知的门票,理论上用户多次点击就相当于订阅了多次,此时是会将这些订阅次数储存起来,如果服务器下发通知时就会消耗一次订阅次数(理论上是这样的,文档也没有说,只要确保每次下发前触发一次订阅交互,所以想想还是长期性订阅香呀,一次授权终身使用~)

其次说说弹窗下面的【总是保持以上选择,不再询问】如果没有勾选,每次订阅时都是会弹窗的,而如果用户勾选了,此时执行的逻辑是没有变的,你勾选后点【允许】其实就直接执行了 'accept' 里的逻辑,反之如果你勾选了然后点了【取消】就是一直执行 reject 里的逻辑,所以有些小伙伴就会说,为什么每次授权时都没有弹窗还自动拒绝,其实【取消】就是拒绝的意思再加上勾选了不再询问就尴尬了…

这个误操作成本就很高了,以后不再弹窗还直接拒绝,如果用户某天想订阅了就不知道哪里订阅了,知道哪里设置(设置页)开启还好,如果不知道就尴尬了,有小伙伴就说那我们再拒绝的逻辑上加上引导弹窗的话不就行了?但是从执行逻辑来看,有无勾选不再询问下点拒绝都是走 reject 的逻辑,如果这边就引导用户去设置页是不是有点奇怪,所以这边其实很蛋疼,只能祈求微信小程序开发大哥加个不再询问的拒绝返回标识多好,这样我们开发也可以根据对应标识返回来判断用户是普通的拒绝,还是不再询问的拒绝

对应的祈求论坛在这可以看看 → https://developers.weixin.qq.com/community/develop/doc/00044c5ef086b0c616594cb9651809

当然上面的问题并不是没有解决方法,只是需要自定义一个弹窗,这个下面细讲,我们慢慢来…我们先说 fail 失败的逻辑

能走到 fail 失败的逻辑直接查文档的错误代码表,这边就说几个常见的吧

【问】返回错误代码 20001、20002、20003、20004什么意思,怎么解决? · 【答】 20001 :没有模板数据,一般是模板 ID 不存在 或者和模板类型不对应 导致的 20001解决 :一般要注意代码写入的模板id有没有在微信公众号中,如果没有就新建;还有注意 tmplIds: [‘订阅模板id1’, ‘订阅模板id2’] 这种格式不要写错 · 20002 :模板消息类型 既有一次性的又有永久的 20002解决 :文档已经说明不能混用,所以检查写入tmplIds中的id是否同一种类型 · 20003 :模板消息数量超过上限 20003解决 :需要订阅的消息模板的id的集合,一次调用最多可订阅3条消息(注意:iOS客户端7.0.6版本、Android客户端7.0.7版本之后的一次性订阅/长期订阅才支持多个模板消息,iOS客户端7.0.5版本、Android客户端7.0.6版本之前的一次订阅只支持一个模板消息) 这个骚限制如果遇到的话,首先找产品开干,为什么这边要一下子搞那么多订阅一下让用户选择,能分开就分开;其次对于低版本的微信用户只支持一个模板消息的话,如果此时有必要两个一起订阅的话就直接提醒用户更新版本就行,否则会影响功能使用就行了 · 20004 :用户关闭了主开关,无法进行订阅 20004解决 :这个就是用户设置页将订阅通知消息的总开关关闭了,这边就可以引导用户去设置页开启了

好了,这边主要说 20004 的错误返回,也就是如何引导用户去设置页;不是网上那些用图案去引导操作,我们这边直接利用 微信中button标签 open-type="openSetting" 直接直达,首先我们看看这个功能的基础库 2.0.7 ,丝毫不慌能用订阅模板消息 2.4.4 那这个功能也是可以用的,那我们看看wxml,对应的样式不贴出来了自定DIY

引导跳授权设置wxml


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有