小程序订阅(前端)

最近用uniapp做了个微信小程序订阅功能,也遇到了一些坑,做个记录。同时也希望能帮助一些人,也算是c/v完以后反哺一下。哈哈!写的不对的地方还望大佬批评。。。

我是封装了一个方法

import subscription from '@/mixin/subscription.js'

export default {
    onShow() {
			let _this = this;
			this.$nextTick(function() {
				subscription(_this);//订阅消息
			})
		},

}
export default async function subscription(_this, data) {
	let that = _this
	let templateId = []
	await _this.$http.user.getSubscriptionTemplate().then(res => {
		console.log(res, '获取订阅模板信息');
		templateId = res.data.map(item => {
			return item.priTmplId
		})
		console.log(templateId, '获取订阅模板信息筛选');
	})
	// var tmplIds = 'r25mFlVaIJ18pPcQ42ueQklZUugsCO5JxaDEDJpU_cE' // 用户同意的消息模板id
	// 这里是获取下发权限地方,根据官方文档,可以根据  wx.getSetting() 的 withSubscriptions   这个参数获取用户是否打开订阅消息总开关。后面我们需要获取用户是否同意总是同意消息推送。所以这里要给它设置为true 。
		await wx.getSetting({
			withSubscriptions: true, //  这里设置为true,下面才会返回mainSwitch
			success: function(res) {
				console.log(res, '调起授权界面弹窗');
				// 调起授权界面弹窗
				if (res.subscriptionsSetting.mainSwitch) { // 用户打开了订阅消息总开关
					// 每次执到这都会拉起授权弹窗
					wx.showModal({
						title: '提示',
						content: '请授权开通服务通知',
						showCancel: true,
						success: function(ress) {
							if (ress.confirm) {
								wx.requestSubscribeMessage({ // 调起消息订阅界面
									tmplIds: [...templateId],//需要订阅的消息模板的 id 的集合
									success(res) {
										console.log(res, '订阅消息 成功 ');
									},
									fail(err) {
										console.log(err, "订阅消息 失败 ");
									},
									complete(config) {
                                        //无论成功失败都会触发
										console.log(config, "订阅消息 最终结果 ");
										let Ids = []
										for (let i in config) {
											if (config[i] == 'accept') {
												Ids.push(i)
											}
										}
										let params = {
											customerId: uni.getStorageSync(
												'USERDATA').id,
											templateIds: Ids,
											status: "accept"
										}
                                        //我的需求是要存储所获取用户的订阅的模板,以便之后发送向用户发送订阅消息
										that.$http.user.getAddUserStatus(params)
											.then(res => {
												console.log(res,
													'向后端传递订阅消息 最终结果');
											})
									}
								})

							} else if (ress.cancel) {
								// console.log('用户点击取消')
							}
						}
					})
				} else {
					console.log('订阅消息未开启')
				}
			},
			fail: function(error) {
				console.log(error);
			}
		})
}

我做的功能是每次进入小程序就给用户要一下权限,因为公司没有长期订阅的权限,这里就有一个坑。wx.requestSubscribeMessage这个接口只能在产生tap的时候调用(绑定一个点击事件就可直接调用)。而我需要在app.vue文件的onshow中就调用,所以就只能再外层套一个wx.showModal方法才能唤起订阅弹窗,

正常可以这样写

<u-button text="点击订阅" @click="subscription"></u-button>
export default async function subscription(_this, data) {
	let that = _this
	let templateId = []
	await _this.$http.user.getSubscriptionTemplate().then(res => {
		console.log(res, '获取订阅模板信息');
		templateId = res.data.map(item => {
			return item.priTmplId
		})
		console.log(templateId, '获取订阅模板信息筛选');
	})
	// var tmplIds = 'r25mFlVaIJ18pPcQ42ueQklZUugsCO5JxaDEDJpU_cE' // 用户同意的消息模板id
	// 这里是获取下发权限地方,根据官方文档,可以根据  wx.getSetting() 的 withSubscriptions   这个参数获取用户是否打开订阅消息总开关。后面我们需要获取用户是否同意总是同意消息推送。所以这里要给它设置为true 。
		await wx.getSetting({
			withSubscriptions: true, //  这里设置为true,下面才会返回mainSwitch
			success: function(res) {
				console.log(res, '调起授权界面弹窗');
				// 调起授权界面弹窗
				if (res.subscriptionsSetting.mainSwitch) { // 用户打开了订阅消息总开关
					// 每次执到这都会拉起授权弹窗
					wx.requestSubscribeMessage({ // 调起消息订阅界面
						tmplIds: [...templateId],
						success(res) {
							console.log(res, '订阅消息 成功 ');
						},
						fail(err) {
							console.log(err, "订阅消息 失败 ");
						},
						complete(config) {
							console.log(config, "订阅消息 最终结果 ");
							let Ids = []
							for (let i in config) {
								if (config[i] == 'accept') {
									Ids.push(i)
								}
							}
							let params = {
								customerId: uni.getStorageSync(
									'USERDATA').id,
								templateIds: Ids,
								status: "accept"
							}
							that.$http.user.getAddUserStatus(params)
								.then(res => {
									console.log(res,
										'向后端传递订阅消息 最终结果');
								})
						}
					})
				} else {
					console.log('订阅消息未开启')
				}
			},
			fail: function(error) {
				console.log(error);
			}
		})
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值