微信小程序获取用户授权的思路
发布于: 刚刚

1.小程序订阅消息
消息能力是小程序能力中的重要组成,我们为开发者提供了订阅消息能力,以便实现服务的闭环和更优的体验。
订阅消息推送位置:服务通知
订阅消息下发条件:用户自主订阅
订阅消息卡片跳转能力:点击查看详情可跳转至该小程序的页面
2.原理
类似 Android 系统的权限申请,用户有可能接受也有可能拒绝
拒绝的流程处理思路是,引导用户跳转到设置页面,打开通知开关
3.代码
export function requestSubscribeMessage(callback){ uni.requestSubscribeMessage({ tmplIds: [pushReservationTmplIds], success: (res)=>{ let value = res[pushReservationTmplIds] console.log("申请成功:", res, value) if(value == 'reject'){ guideOpenSubscribeMessage(callback) }else if(value == 'accept'){ // showToast('授权成功') if(isFunction(callback)) callback.call(null, true) }else { showToast("授权订阅消息有误") } }, fail: (error)=>{ console.error("异常情况:", error) if (error.errCode == 20004) { // console.log(res, 'fail:用户关闭了主开关,无法进行订阅,引导开启---'); guideOpenSubscribeMessage(callback); } } })}
export function guideOpenSubscribeMessage(callback){ uni.showModal({ title: '提示', showCancel: false, content: '检测到您没有开启订阅消息的权限,是否去设置?', success: function (res) { if (res.confirm) { console.log('用户点击确定'); uni.openSetting({ complete() { guidSubscribeMessageAuthAfter(callback) }, fail(error) { console.error("异常情况:", error) } }) } else if (res.cancel) { console.log('用户点击取消'); } } }) }
// res.subscriptionsSetting = {// mainSwitch: true, // 订阅消息总开关// itemSettings: { // 每一项开关// SYS_MSG_TYPE_INTERACTIVE: 'accept', // 小游戏系统订阅消息// SYS_MSG_TYPE_RANK: 'accept'// zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: 'reject', // 普通一次性订阅消息// ke_OZC_66gZxALLcsuI7ilCJSP2OJ2vWo2ooUPpkWrw: 'ban',// }// }export function guidSubscribeMessageAuthAfter(callback) {//引导用户 开启订阅消息 之后,「openSetting」 接口暂时不会返回,用户手动设置后的状态,所以采用「getSetting」接口重新进行查询 uni.getSetting({ withSubscriptions: true, success: res => { console.log(res.subscriptionsSetting) let { authSetting = {}, subscriptionsSetting: { mainSwitch = false, itemSettings = {} } = {} } = res;
if ((authSetting['scope.subscribeMessage'] || mainSwitch) && itemSettings[pushReservationTmplIds] === 'accept' ) { console.log('用户手动开启同意了,订阅消息'); if(isFunction(callback)) callback.call(null, true) } else { console.log('您没有同意授权订阅消息'); if(isFunction(callback)) callback.call(null, false) } } })}复制代码
划线
评论
复制
发布于: 刚刚阅读数: 2
版权声明: 本文为 InfoQ 作者【Changing Lin】的原创文章。
原文链接:【http://xie.infoq.cn/article/6b978068b75072cee55e181d7】。文章转载请联系作者。
Changing Lin
关注
获得机遇的手段远超于固有常规之上~ 2020.04.29 加入
我能做的,就是调整好自己的精神状态,以最佳的面貌去面对那些未曾经历过得事情,对生活充满热情和希望。











评论