一、报错信息
“errMsg”:“requestSubscribeMessage:fail can only be invoked by user TAP gesture.”
二、在tabBar点击事件onTabItemTap里调用
除非是选择了总是保持以上选择才不会每次点击都调出订阅弹窗,否则,每次切换tabbar都会唤起
onTabItemTap () { // 它和onLoad同等级
this.subscribeMessage()
},
// 写个方法
/*
通过缓存一个上次唤起时间戳,来保持多久之内弹出一次,此例子是保持每天最多弹出一次
*/
subscribeMessage () {
let lastTime = uni.getStorageSync('lastSbuscribeShowTime')
let duration = (Date.now() - lastTime) > 3600 * 1000 * 24 * 1 // 一天内最多弹出一次
if (!lastTime || (lastTime && duration)) {
uni.getSetting({
withSubscriptions: true,
success: (res) => {
if (res.subscriptionsSetting.mainSwitch) {
if (!!res.subscriptionsSetting.itemSettings) {
// 这里是用户选择了总是保持以上选择
} else {
uni.requestSubscribeMessage({
tmplIds: ['xxxxxx', 'xxxxxxx', 'xxxx'],
success (res) {
let lastTime = Date.now()
uni.setStorageSync('lastSbuscribeShowTime', lastTime)
},
fail(err) {
console.log('订阅失败', err)
}
})
}
}
}
})
}
}
正常点击触发
需求:只要用户没有选择最下面的’总是保持以上选择’或者用户没有把多个的全部订阅,每次触发都弹出
subscribeMessage (callback) {
let isShow = uni.getStorageSync('isShowSubscript')
console.log('isShow', isShow)
if (isShow || isShow === '') {
const tmplIds = ['xxxx', '-xxxx', 'xxxxxx']
uni.getSetting({
withSubscriptions: true,
success: (res) => {
console.log('getSetting的res', res)
if (res.subscriptionsSetting.mainSwitch) {
if (!!res.subscriptionsSetting.itemSettings) {
// 这里是用户选择了总是保持以上选择
uni.setStorageSync('isShowSubscript', false)
} else {
uni.requestSubscribeMessage({
tmplIds,
success (res) {
let isShowSubscript = !tmplIds.every(item => res[item] === 'accept')
uni.setStorageSync('isShowSubscript', isShowSubscript)
callback && callback()
},
fail(err) {
console.log('订阅失败', err)
}
})
}
}
}
})
} else {
callback && callback()
}
}
用法
clickBtn () {
this.subscribeMessage (() => {
// 在这里写订阅弹窗点击过后该干嘛干嘛的代码
})
}