zoukankan      html  css  js  c++  java
  • uniapp 小程序订阅消息

    背景分析:

    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”

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

    正常如下:

    本文来自博客园,作者:💞Travelerᘗ,转载请注明原文链接:https://www.cnblogs.com/LindaBlog/p/15821403.html

  • 相关阅读:
    android 中使用AsyncTask实现简单的异步编程
    android TextView 垂直自动滚动
    (转)c3p0配置大全
    Android中在底端显示选项卡
    android 中ImageView的scaletype属性
    android 权限大全
    Palm应用开发之六 常用命令及debug
    android spinner 实现Text 和 value
    [转载]【职场宝典】面试官如何看待学历?
    起跑
  • 原文地址:https://www.cnblogs.com/LindaBlog/p/15821403.html
Copyright © 2011-2022 走看看