当前位置:网站首页>【微信小程序开发(七)】订阅消息

【微信小程序开发(七)】订阅消息

2022-07-28 14:49:00 袜子是一只狗


订阅消息

在这里插入图片描述


一、小程序订阅消息逻辑处理

可以将其挂在APP上,使用起来会更加便捷

subscribeMessage: (val, callback) => {
    
    //需要订阅的消息模板,在微信公众平台手动配置获取模板ID
    let message = val; // 模板id
    //如果总是拒绝(subscriptionsSetting,2.10.1库才支持)
    // wx.setStorageSync("subType",1)
    if (versionCompare('2.10.1')) {
    
      wx.getSetting({
    
        withSubscriptions: true,//是否同时获取用户订阅消息的订阅状态,默认不获取
        success: (res) => {
    
          console.info("res",res)
          if (res.subscriptionsSetting && res.subscriptionsSetting.itemSettings &&
            res.subscriptionsSetting.itemSettings[message] == "reject") {
    
            //打开设置去设置
            openConfirm('检测到您没打开推送权限,是否去设置打开?');
          } else if (res.subscriptionsSetting && res.subscriptionsSetting.itemSettings &&
            res.subscriptionsSetting.itemSettings[message] == "accept") {
     // 已有授权过
            console.log('已有订阅授权过')
            wx.requestSubscribeMessage({
    
              tmplIds: message,
              success: (res) => {
    
                if (res[message] == 'accept') {
    
                  console.log("resrequestSubscribeMessage",res)
                  //用户允许
                 
                }
                callback()
              },
              fail: (res) => {
     console.log("res",res)
                  callback()
              },
            })
          } else {
    
            wx.requestSubscribeMessage({
    
              tmplIds: message,
              success: (res) => {
    
                if (res[message] == 'accept') {
    
                  console.log("resrequestSubscribeMessage",res)
                  //用户允许
                  
                }
                callback()
              },
              fail: (res) => {
     console.log("res",res) 
                callback()
              },
            })
          }
        }
      })
    } else if (versionCompare('2.4.4')) {
    
      wx.requestSubscribeMessage({
    
        tmplIds: message,
        success: (res) => {
    
          if (res[message] == 'accept') {
    
            //用户允许
            
          }
          callback()
        },
        fail: (res) => {
     console.info(res) 
          callback()
        },
      })
    }
    //打开设置
    function openConfirm(message) {
    
      wx.showModal({
    
        content: message,
        confirmText: "确认",
        cancelText: "取消",
        success: (res) => {
    
          //点击“确认”时打开设置页面
          if (res.confirm) {
    
            wx.openSetting({
    
              success: (res) => {
    
                console.log(res.authSetting)
              },
              fail: (error) => {
    
                console.log(error)
              }
            })
          } else {
    
            console.log('用户点击取消')
          }
        }
      });
    }
    //基础库版本比较
    function versionCompare(v) {
    
      const version = wx.getSystemInfoSync().SDKVersion
      if (compareVersion(version, v) >= 0) {
    
        return true
      } else {
    
        return false
      }
    }
    function compareVersion(v1, v2) {
    
      v1 = v1.split('.')
      v2 = v2.split('.')
      var len = Math.max(v1.length, v2.length)
  
      while (v1.length < len) {
    
        v1.push('0')
      }
      while (v2.length < len) {
    
        v2.push('0')
      }
  
      for (var i = 0; i < len; i++) {
    
        var num1 = parseInt(v1[i])
        var num2 = parseInt(v2[i])
  
        if (num1 > num2) {
    
          return 1
        } else if (num1 < num2) {
    
          return -1
        }
      }
      return 0
    }
  },

二、使用步骤

    app.subscribeMessage(['这里放模板ID'],()=>{
    

      // 订阅后的回调方法
    });

三、不订阅也能收到一次性模板消息?

用户点击一次就相当于订阅了一次,相当于你拥有了一次获取系统通知的门票,理论上用户多次点击就相当于订阅了多次,此时是会将这些订阅次数储存起来,如果服务器下发通知时就会消耗一次订阅次数(实际是这样的,文档没有说,需要确保每次下发前触发一次订阅交互);产品是可以接受的。不是bug.

原网站

版权声明
本文为[袜子是一只狗]所创,转载请带上原文链接,感谢
https://blog.csdn.net/sinat_29843547/article/details/126031607