微信小程序订阅消息报错,by user TAP gesture (适用于tabBar页面)

一、报错信息

“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 (() => {
		// 在这里写订阅弹窗点击过后该干嘛干嘛的代码
	})
}

你可能感兴趣的:(uniapp,微信小程序,小程序,javascript)