随笔 - 315  文章 - 1  评论 - 12  阅读 - 24万

uni-app 小程序订阅消息

背景分析:

1、微信公众平台需要先使用模板,不符合要求的就重新申请模板(提交了10余次才通过,要求很严格,按照要求修改即可)

 

 

2、前端需调起用户授权(考虑到用户体验的问题,用户没有授权时会调用起来用户授权弹框,当用户授权完成后则无需再弹框提示授权问题)

复制代码

onShow() {
            let loginRes = this.checkLogin();
            if (!loginRes) {
                return false;
            } else {
                this.is_authorization = uni.getStorageSync('is_authorization'); // 获取用户当前订阅消息的授权状态
            }
        },

 

    


复制代码
    // 开启订阅消息设置窗口
            openMsg() {
                var that = this;
                // 获取用户的当前设置,判断是否点击了“总是保持以上,不在询问”
                wx.getSetting({
                    withSubscriptions: true, //是否获取用户订阅消息的订阅状态,默认false不返回
                    success(res) {
                        console.log("订阅消息的订阅状态",res);
                        if(that.is_authorization){
                            uni.showToast({
                                title: "您已订阅商机消息提醒,无需重复订阅!",
                                icon: "none"
                            });
                        }else{
                            if (res.subscriptionsSetting['bjshmNY6Z4R-EM_vunOfa0-YbbbpqDA0huiNy7FQytI'] == "reject") { //用户点击了“总是保持以上,不再询问”
                                wx.showModal({
                                    title: '温馨提示',
                                    content: "检测到您没有开启订阅消息的权限,是否去设置?",
                                    success: function(modal) {
                                        if (modal.confirm) { // 点击肯定
                                            wx.openSetting({
                                                withSubscriptions: true
                                            });
                                            that.is_authorization = true;
                                            uni.setStorageSync('is_authorization',true);
                                        }else{
                                            uni.showToast({
                                                title:"您已拒绝订阅消息授权,无法预约领取",
                                                icon:"error"
                                            });
                                            that.is_authorization = false;
                                        }
                                    }
                                })
                            } else { // 用户没有点击“总是保持以上,不再询问”则每次都会调起订阅消息
                                // var templateid = that.setting.templateid.map(item => item.tempid);
                                let tmpid = ['bjshmNY6Z4R-EM_vunOfa0-YbbbpqDA0huiNy7FQytI'];
                                uni.requestSubscribeMessage({
                                    tmplIds: tmpid,
                                    success(res) {
                                        if (res[tmpid[0]] == "accept") {
                                            uni.showToast({
                                                title: "订阅成功",
                                                icon: "none"
                                            });
                                            that.is_authorization = true;
                                            uni.setStorageSync('is_authorization',true);
                                        }else{
                                            uni.showToast({
                                                title:"您拒绝订阅消息授权,无法预约领取",
                                                icon:"none"
                                            });
                                            that.is_authorization = false;
                                        }
                                    },
                                    fail: (res) => {
                                        wx.showModal({
                                            title: '温馨提示',
                                            content: "检测到您没有开启订阅消息的权限,是否去设置?",
                                            success: function(modal) {
                                                if (modal.confirm) { // 点击肯定
                                                    wx.openSetting({
                                                        withSubscriptions: true
                                                    });
                                                    that.is_authorization = true;
                                                    uni.setStorageSync('is_authorization',true);
                                                }else{
                                                    uni.showToast({
                                                        title:"您已拒绝订阅消息授权,无法预约领取",
                                                        icon:"error"
                                                    });
                                                    that.is_authorization = false;
                                                }
                                            }
                                        })
                                    }
                                })
                            }
                        }
                        
                    }
                })
            },
复制代码

 

 
复制代码

注意:由于无法获取红框部分的参数,所以无法判断用户是否已经授权,所以我就使用了一个参数来判断  is_authorization  只要用户点击允许,这个变量就为true并且立马存session,有且只有当该变量为true时才表示用户已经授权了,也就不用再次要求弹框授权  否则就视为没有授权。(吐槽:当用户没有勾选【总是】选项时就没有itemSetting这个参数,也就无法判断是否授权了。官方这么明显的bug为啥一直存在,一点也不考虑用户体验的么,醉都醉了,既然推出这个玩意就整得稍微好点不行么,开发人员一直在爬坑!!!yue了)

 

 

 3、后台使用链接  https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=“xxxxx”;; 一定是这个链接,否则会一直报错40081没有授权!

     并且一定要有page 参数: 对应的值是前端页面的首页链接“pages/index/index”

 否则发送的商机信息是没有进入小程序入口的

 

 

正常如下:

 

posted on   小虾米吖~  阅读(1942)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
历史上的今天:
2021-01-19 VueX理解
2020-01-19 el-select选择一个选项,在对应输入框填入该选项对应的id
2020-01-19 vue表单:输入身份证号码则自动获取对应的年龄和性别,,若不输入身份证号则自己填写年龄和性别
2020-01-19 el-input 电话号码输入时加上空格(344)
2020-01-19 vue图片上传---融合裁剪功能

点击右上角即可分享
微信分享提示