小程序订阅消息

博主最近在开发小程序订阅消息,在此简单记录下遇到的问题。

1、订阅,我们调用wx.requestSubscribeMessage(Object object)的时机是用户点击或者支付回调中。在授权弹窗中,用户点击允许或者取消,在回调中我们可以拿到相应的结果:

const tmplId = '' // 模板消息ID
wx.requestSubscribeMessage({
    tmplIds: [tmplId],
    success (res) { 
        if (res[tmplId] === 'accept') {
            // 用户点击【允许】
        } else if (res[tmplId] === 'reject') {
            // 用户点击【取消】
        }
    },
    fail (err) {
        console.log(err)
    }
})

2、在授权弹窗中,最下方有一行小字【总是保持以上选择,不再提示】。如果勾选了这个,无论点击【允许】或者【取消】,订阅消息的设置都会记录在小程序的设置中。官方原话如下: 

调起客户端小程序订阅消息界面,返回用户订阅消息的操作结果。当用户勾选了订阅面板中的“总是保持以上选择,不再询问”时,模板消息会被添加到用户的小程序设置页,通过 wx.getSetting 接口可获取用户对相关模板消息的订阅状态。

一旦某个订阅消息记录在小程序设置中,再去调用wx.requestSubscribeMessage(Object object)是不会出现授权弹窗的。如果我们需要知道当前订阅消息的设置做一些处理(比如隐藏订阅按钮),可以通过wx.getSetting来获取订阅状态。

wx.getSetting({
    // 是否同时获取用户订阅消息的订阅状态,默认不获取。
    // 注意:withSubscriptions 只返回用户勾选过订阅面板中的“总是保持以上选择,不再询问”的订阅消息。
    withSubscriptions: true,
    success (res) {
        console.log(res.authSetting)
        // res.authSetting = {
        //   "scope.userInfo": true,
        //   "scope.userLocation": true
        // }
        console.log(res.subscriptionsSetting)
        // res.subscriptionsSetting = {
        //   mainSwitch: true, // 订阅消息总开关
        //   itemSettings: {   // 每一项开关
        //     SYS_MSG_TYPE_INTERACTIVE: 'accept', // 小游戏系统订阅消息
        //     SYS_MSG_TYPE_RANK: 'accept'
        //     zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: 'reject', // 普通一次性订阅消息
        //     ke_OZC_66gZxALLcsuI7ilCJSP2OJ2vWo2ooUPpkWrw: 'ban',
        //   }
        // }
    }
})

 注意:只返回用户勾选过订阅面板中的“总是保持以上选择,不再询问”的订阅消息。所以我们只需要判断itemSettings是否有值,如果itemSettings有值的话,对应的模板消息是否有值就可以判断用户有无勾选【总是保持以上选择,不再询问】,从而决定显示或隐藏订阅按钮。

wx.getSetting({
    withSubscriptions: true, // 是否同时获取用户订阅消息的订阅状态
    success (res) {
        const mainSwitch = res.subscriptionsSetting.mainSwitch // 订阅消息总开关
        const itemSettings = res.subscriptionsSetting.itemSettings // 每一项开关(类型:对象)
        // 总开关为开,且itemSettings为空或者对应模板id的值为空,则展示订阅消息引导卡片
        if (mainSwitch && (!itemSettings || itemSettings && !itemSettings[tmplId])) {
            // 显示或隐藏订阅按钮等逻辑操作
        }
    }
})

 以上就是开发中遇到的问题,希望能帮到有同样问题的小伙伴~

发布了1 篇原创文章 · 获赞 0 · 访问量 69

猜你喜欢

转载自blog.csdn.net/conan0214/article/details/104590178