小程序 订阅消息 一次授权多次接收

news/2024/7/20 2:39:58 标签: 小程序, 前端, 微信小程序

1、微信公众平台需要先使用模板,不符合要求的就重新申请模板(按照要求修改即可)

在这里插入图片描述
2、前端需手动调起用户授权(考虑到用户体验的问题,用户没有授权时会调用起来用户授权弹框,当用户授权完成后则无需再弹框提示授权问题)

  • 注意点1: 一定要让用户手动点击授权。否则报错 (requestSubscribeMessage : fail can only be invoked by user TAP gesture);
  • 注意点2: 业务逻辑最好抽离,看上去清晰 (下面代码看上去就比较糟糕)
// 开启订阅消息设置窗口
			onShow() {
	           this.is_authorization = wx.getStorageSync('is_authorization'); // 获取用户当前订阅消息的授权状态
	        },

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

3.服务端调用( page一定要写,否则不能通过消息进入小程序 )在这里插入图片描述


http://www.niftyadmin.cn/n/565013.html

相关文章

java stack方法_Java Stack类

Stack类是Vector类的一个子类,它实现了标准的后进先出堆栈。Stack类仅定义默认构造函数,该构造函数创建一个空堆栈。 Stack包含Vector定义的所有方法,并添加了几个自己的方法。除了从父类Vector继承的方法之外,Stack还定义了以下方…

java 设置pdf 编码_java – 使用itext将文本文件转换为pdf时设置编码

我正在努力让itext正确输出我的UTF-8编码文本,实际上输入文件包含像和拉丁字符(,,…)这样的符号.但我没有找到解决方案这是我正在使用的代码:BufferedReader input null;Document output null;System.out.println("Convert text file to pdf");System.o…

将用户所见网页提取为图片

封装的组件 <template><div class"box"><!-- 将可保存为图片的内容 通过一个 标签 框起来 --><div :id"id"><!-- 需要导出的内容 --><slot></slot></div></div> </template> <script>…

java jnlp applet_java – 使用JNLP部署Applet

我正在尝试使用新的Java JNLP规范部署Applet,但我总是收到Java插件控制台的以下错误&#xff1a;BadFieldException[ Il campo width presenta un valore non valido: 0,0]这是我的HTML代码&#xff1a;var attributes { id:signingApplet, code:it.insielmercato.web.signing…

java web 服务启动初始化类_spring 在web容器启动时执行初始化方法

开发框架&#xff1a;spingMVCmyBatis解决方案&#xff1a;给web容器添加一个Listener类&#xff0c;在容器启动的时候执行Listener的“初始化”方法&#xff0c;在这个初始化方法中执行查询数据库的所有操作&#xff0c;然后将数据库中的信息缓存起来问题&#xff1a;上面的方…

java正则表达式 文件后缀名_java 获取已知文件扩展名的代码

一、需求分析1、获取已知文件的扩展名----------------------------------------------》要先读到文件&#xff0c;得到文件名2、abc.txt的扩展名是txt, abc.Java.txt的扩展名也是txt-------------》获取扩展名的正确性保证二、技术难点1、将一个给出的路径转换成一个文件对象&…

provider java_Java里的Provider是什么?

敲了一段修改压缩文件内容的代码&#xff0c;如下&#xff1a;public static void rarWriteTest() {Path tempRar Paths.get("D:\\copy.rar");try (FileSystem workingFs FileSystems.newFileSystem(tempRar, null)) {Path pathForFile workingFs.getPath("/h…

python最大正方形_Python LeetCode-221. 最大正方形(难度-中等)

1.题目描述在一个由 0 和 1 组成的二维矩阵内&#xff0c;找到只包含 1 的最大正方形&#xff0c;并返回其面积。示例&#xff1a;输入:1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4注意&#xff1a;输入的1或者0均为字符串类型2.分析首先我第一步的想法是这道题目和岛屿的最大…