微信小程序开发笔记 进阶篇⑦——小程序订阅消息 | 发起订阅,获取当前设置

一、前言

微信小程序开发笔记——导读

  • 消息推送是小程序的重要功能。比如推送“订单完成”、“欠费缴费”、“异常报警”等通知。
  • 同时为了避免垃圾消息骚扰到用户
    • 消息内容格式需要在公共模板库中选用
    • 推送消息前,需要用户先订阅消息,否则消息推送会失败

二、消息推送流程

  • 小程序中不同的功能模块,订阅不同的消息
  • 服务器后台根据数据状态,给用户推送消息
  • 消息推送位置,在服务通知

三、订阅消息模板

  • 登录小程序
  • 功能—>订阅消息
  • 选用模块,复制模板ID

在这里插入图片描述

在这里插入图片描述

四、发起小程序订阅

wx.requestSubscribeMessage(Object object)

参数 说明
tmplIds 需要订阅的消息模板的 id 的集合,一次调用最多可订阅3条消息
success 接口调用成功的回调函数
fail 接口调用失败的回调函数
complete 接口调用结束的回调函数(调用成功、失败都会执行)
wx.requestSubscribeMessage({
    
    
    tmplIds: ['9FmhSwWYIhfgsXvGvvLlH9l-XtQf5WM_61PyDx_e6PU'],
    success (res) {
    
     
        console.log('requestSubscribeMessage success', res)
    },
    fail (res) {
    
     
        console.log('requestSubscribeMessage fail', res)
    },
})

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、获取用户当前设置

wx.getSetting(Object object)

参数 说明
withSubscriptions 是否同时获取用户订阅消息的订阅状态,默认不获取。
success 接口调用成功的回调函数
fail 接口调用失败的回调函数
complete 接口调用结束的回调函数(调用成功、失败都会执行)
wx.getSetting({
    
    
  withSubscriptions: true,
  success (res) {
    
    
    console.log("getSetting", res)
    console.log("getSetting", res.subscriptionsSetting.zrnNqXdbDZFVlhEew5LfQ2nOW8pUG5CdJ4Vw1J__S5Q)
    if(res.subscriptionsSetting==null || res.subscriptionsSetting==undefined || 
        res.subscriptionsSetting.itemSettings==null || res.subscriptionsSetting.itemSettings==undefined ||
        res.subscriptionsSetting["zrnNqXdbDZFVlhEew5LfQ2nOW8pUG5CdJ4Vw1J__S5Q"]!='accept' ||
        res.subscriptionsSetting["9FmhSwWYIhfgsXvGvvLlH9l-XtQf5WM_61PyDx_e6PU"]!='accept') 
    {
    
    
            console.log("requestSubscribeMessage")
            wx.requestSubscribeMessage({
    
    
                tmplIds: ['9FmhSwWYIhfgsXvGvvLlH9l-XtQf5WM_61PyDx_e6PU', 'zrnNqXdbDZFVlhEew5LfQ2nOW8pUG5CdJ4Vw1J__S5Q'],
                success (res) {
    
     
                    console.log('requestSubscribeMessage success', res)
                },
                fail (res) {
    
     
                    console.log('requestSubscribeMessage fail', res)
                },
            })
    }
  }
})

在这里插入图片描述

六、理论流程和实际应用

理论上的流程应该是

  • wx.getSetting(Object object)获取用户当前设置
    • 如果是accept,就不需要做其他处理
    • 如果是reject或者无,就wx.requestSubscribeMessage(Object object)发起消息订阅

但是,实际上你会发现有点参差

  • 用户第一次使用,wx.getSetting(Object object)没有对应模板ID的记录,于是wx.requestSubscribeMessage(Object object)发起消息订阅,accept接收订阅。
  • 某特定条件下,后端服务给用户推送消息,用户通过服务通知点击进入小程序。
  • 二次使用,wx.getSetting(Object object)对应模板ID的记录是accept,于是没有发起消息订阅。
  • 某特定条件下,后端服务给用户推送消息,但是,失败了。
  • 因为,我们订阅的是一次性订阅消息,只能发送一条订阅消息。
  • 但是,我们消耗完这一次推送消息的机会后,wx.getSetting(Object object)对应模板ID的记录没有改变,依旧是accept

所以,我们实际应用中不再以wx.getSetting(Object object)的结果作为判断,而是当用户点击某个功能模块,如果该功能模块需要消息推送,那么就直接发起消息订阅。

这样就会造成一个困扰,用户每次进入该功能模块的话,就会每次需要点击“允许”。除非,他勾选“总是保持以上选择,不再询问”。那么就不会再弹窗影响用户体验。

在这里插入图片描述

七、参考

觉得好,就一键三连呗(点赞+收藏+关注)

猜你喜欢

转载自blog.csdn.net/kangweijian/article/details/128999766
今日推荐