小程序订阅消息

小程序订阅消息

效果图:

在这里插入图片描述

最近需要做小程序消息推送,踩坑记录,先看官方文档

小程序订阅消息官方文档


第一步:按小程序文档步骤,先在微信公众平台登录小程序后台配置模板,获取模板id:,这里的模板可以在公共库里面选用,也可以自己申请(自己申请审核需要时间):

示例图片

在这里插入图片描述

第二步:获取下发权限,代码注释都写的比较清楚了,部分是为了看执行结果,用不到的可以自行删除

	sendFn() {
        // 这里执行后台下发消息
    },
    openSettingFn(_content) {
        wx.showModal({
            title: '提示',
            content: _content,
            showCancel: true,
            confirmText: '去设置',
            success: function (ress) {
                if (ress.confirm) {
                    wx.openSetting({
                        withSubscriptions: true,
                        success (res) {
                            wx.showModal({
                                content: '设置页面openSetting:'+JSON.stringify(res)
                            })
                            /*
                                调起客户端小程序订阅消息界面,返回用户订阅消息的操作结果。当用户勾选了订阅面板中的“总是保持以上选择,不再询问”时,模板消息会被添加到用户的小程序设置页,通过 wx.getSetting 接口可获取用户对相关模板消息的订阅状态。
                            */
                            const {
                                subscriptionsSetting: { mainSwitch = false, itemSettings = {} } = {}
                            } = res
                            if (mainSwitch && itemSettings && itemSettings[tmplIds] === 'accept') { // 表示去设置页开启了主开关&&模板消息
                                wx.showModal({
                                    content: '您已手动开启订阅消息权限通知'
                                })
                                // 这里执行下发消息
                                _this.sendFn()
                            } else {
                                /*
                                    这里失败有3种可能:
                                        第1种:用户主开关未开启。
                                        第2种:用户只开启了主开关。(用户之前没有勾选过订阅面板中的“总是保持以上选择,不再询问”,此时模板消息在用户的小程序设置页是没有的。)
                                        第3种:用户开启了主开关&&模板消息未开启。
                                */
                                wx.showModal({
                                    content: '您未开启订阅消息权限通知'
                                })
                            }
                        }
                    })
                } else {
                    wx.showModal({
                        content: '您已取消去设置订阅消息授权'
                    })
                }
            }
        })
    },
    switchTipsFn(moIdState, name='') {
        wx.showModal({
            content: 'switchTipsFn'+name+moIdState
        })
        let _content = ''
        switch (moIdState) {
            case 'accept':
                _content = name+'操作:用户点击了允许 '
                // 这里执行下发消息时  当name == 'always'时 待接口调试 这种情况能否下发成功?
                this.sendFn()
                break;
            case 'reject':
                _content = name+'操作:用户点击了取消 '
                break;
            case 'ban':
                _content = name+'操作:已被后台禁止 '
                break;
            default:
                _content = name+'操作:该模板因为模板标题同名被后台过滤 '
                break;
        }
        wx.showModal({
            content: _content
        })
    },
    isAuthorizeFn() {
        const tmplIds = 'bQRb7eJrLKSZ2CcSJJ-cmemmn9pw2dpeT1EyCp4w7nU'
        let _this = this
        wx.showModal({
            content: 'await:settingData信息:'+JSON.stringify(settingData)
        })
        if (wx.requestSubscribeMessage) { // 检测微信版本是否存在这种方法(wx.requestSubscribeMessage需要基础库 2.4.4以上才支持)
                wx.requestSubscribeMessage({   // 拉起订阅消息弹框界面
                    tmplIds: [tmplIds],
                    success (res) { 
                        console.log('订阅消息 请求成功 ');
                        wx.showModal({
                            content: '订阅弹框操作后的信息:'+JSON.stringify(res)
                        })
                        const _tmplIds = res[tmplIds]
                        _this.switchTipsFn(_tmplIds)
                    },
                    fail (err){
                        console.log("订阅消息 请求失败 ");
                        if(err.errCode == 20004) { // 20004 表示用户关闭了主开关,无法进行订阅
                            // 引导用户去设置页手动开启
                            let tips = '检测到您没有开启接受订阅消息的权限,是否去设置?'
                            _this.openSettingFn(tips)
                        } else {
                            wx.showModal({
                                content: '订阅消息 请求失败'+JSON.stringify(err)
                            })
                        }
                        
                    }
                })
            
        } else { // 如果不支持,提示更新微信版本
            wx.showModal({
                title: '提示',
                content: '请更新您的微信版本,来获取订阅消息功能',
                showCancel: false
            })
        }
    },

第三步,小程序完结,服务端下发消息。


总结:

  1. 勾选“总是保持以上选择,不再询问”,下发消息前还是要调wx.requestSubscribeMessage,只是不会再出现弹窗。

  2. 如图
    在这里插入图片描述

  3. 关于不适合每次都点按钮调授权的需求,比如流程相关的,一个领导可能会同时收到多个需要处理的请求,他不可能每次都去点授权,这个时候可以考虑用公众号的模板消息(探索中…)


参考文章(可以重点看下下面的文章,写的很清晰):
小程序订阅消息(服务通知)实现 wx.requestSubscribeMessage
针对新手很容易出现理解误区的微信小程序订阅消息模块
问:小程序订阅消息用户拒绝后,如何引导用户开启?并获得用户的操作状态?
微信小程序订阅消息及遇到的种种坑解决方法(全)


写的不对的还请指正;以上引用,如有侵权,请联系删除。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值