当前位置: 首页 > article >正文

小程序如何完成订阅

小程序如何完成订阅

  • 参考相关文档
  • 实践
  • 问题处理
    • 授权弹窗不再触发
    • 引导用户重新授权

参考相关文档

微信小程序实现订阅消息推送的实现步骤
发送订阅消息
小程序订阅消息(用户通过弹窗订阅)开发指南

实践

我们需要先选这一个模板,具体流程参考官方的操作。然后这个模板ID就是前后端所需要的重要数据啦。
在这里插入图片描述

我们在获取到模板id之后,现在需要弹出订阅弹窗让用户完成订阅,查看上面官方文档中可以知道,我们需要用户触发uni.requestSubscribeMessage这个方法。那我们可以是用弹窗,或者操作按钮来达到这个目的。我们这里是采用的进入页面之后就弹窗(各人按需调整)

subscribeMessage() {
	let tmplId = 'XXXXXXXXXXXXX';
	uni.showModal({
		title: '提示',
		content: '邀请您订阅消息',
		editable: false,
		confirmText: '同意',
		cancelText: '拒绝',
		placeholderText: '',
		success: function (res) {
			console.log('success', res);
			if (res.confirm) {
				//调用订阅
				// 添加用户授权操作 uniapp封装了uni.requestSubscribeMessage接口
				uni.requestSubscribeMessage({
					tmplIds: [tmplId],
					success(res) {
						console.log('success', res);
					}
				});
			} else if (res.cancel) {
				console.log('用户点击取消');
			}
		}
	});
},

我们这里使用的是弹窗点击同意之后我们去调用uni.requestSubscribeMessage这个方法,可以唤起授权弹窗。
在这里插入图片描述在这里插入图片描述
我们点击允许之后就订阅成功了,然后后端同事通过获取到用户的openid,就可以给用户发送对应的模板消息了。

问题处理

授权弹窗不再触发

我们第一次进入小程序,点击同意之后进行授权弹窗唤起,我们选择允许或拒绝。重新刷新页面加载,这一次点击同意,并没有如愿的唤起订阅授权了。
这是怎么回事呢?
观察操作细节,如果我们没有勾选(总是保持以上选择),那么每一次重新进入小程序会正常升起订阅授权的弹窗,但是一旦我们勾选了就不会再升起订阅授权的弹窗。
在这里插入图片描述

经过查询文档我们发现,勾选了之后(总是保持以上选择)之后,订阅授权弹窗就不再唤起,如果我们还需要用户再次授权怎么办呢?

引导用户重新授权

那我们需要先使用uni.getSetting(方法查询一下用户的订阅状态,如果发现用户勾选了(总是保持以上选择),根据业务需求,我们可以重新指引用户打开授权,uni.openSetting(这个操作也需要用户点击之后才能触发)。用户可以在这里重新打开授权。

showMessage() {
	let that = this;
	let tmplId = 'XXXXXXXXXXXXXX';
	uni.getSetting({
		withSubscriptions: true,
		success(res) {
			console.log(res);
			if (res.subscriptionsSetting.mainSwitch) {
				// 用户打开了订阅消息总开关
				if (res.subscriptionsSetting.itemSettings) {
					// 用户同意总是保持是否推送消息的选择, 这里表示以后不会再拉起推送消息的授权
					let moIdState = res.subscriptionsSetting.itemSettings[tmplId]; // 用户同意的消息模板id
					if (moIdState === 'accept') {
						// 同意了消息推送
					} else if (moIdState === 'reject') {
						console.log('拒绝了消息推送');
						//引导用户重新打开授权
						uni.showModal({
							title: '提示',
							content: '用户已关闭订阅授权,是否重新打开订阅授权',
							editable: false,
							confirmText: '同意',
							cancelText: '拒绝',
							placeholderText: '',
							success: function (res) {
								if (res.confirm) {
									uni.openSetting({
										withSubscriptions: true,
								}
							}
						});
					} else if (moIdState === 'ban') {
						uni.showToast({
							title: '已被后台封禁'
						});
					}
				} else {
					// 开始订阅
					that.subscribeMessage();
				}
			} else {
				// 总开关已关闭清空下,是否重新打开授权
				uni.showModal({
					title: '提示',
					content: '用户已关闭订阅授权,是否重新打开订阅授权',
					editable: false,
					confirmText: '同意',
					cancelText: '拒绝',
					placeholderText: '',
					success: function (res) {
						if (res.confirm) {
							uni.openSetting({
								withSubscriptions: true,
							});
						}
					}
				});
			}
		}
	});
},

在这里插入图片描述在这里插入图片描述


http://www.kler.cn/a/397254.html

相关文章:

  • 数据仓库在大数据处理中的作用
  • 已解决:spark代码中sqlContext.createDataframe空指针异常
  • Nginx: 实现Websocket代理
  • 第三百二十三节 Java线程教程 - Java同步器
  • 英伟达基于Mistral 7B开发新一代Embedding模型——NV-Embed-v2
  • Tensorflow基本概念
  • 每天五分钟机器学习:支持向量机算法数学基础之核函数
  • Centos 9 安装 PostgreSQL 16 并支持远程访问
  • 编程初学者的第一个 Rust 系统
  • java模拟键盘实现selenium上下左右键 table中的左右滚动条实现滚动
  • NVR录像机汇聚管理EasyNVR多品牌NVR管理工具视频汇聚技术在智慧安防监控中的应用与优势
  • Docker 命令大全
  • 力扣 LeetCode 541. 反转字符串II(Day4:字符串)
  • Vue3 模板语法
  • C#调用方法时获取方法名、类名、命名空间
  • Spring-boot 后端java配置接口返回jsp页面
  • leetcode100:相同的树
  • 前端面试笔试(三)
  • MySQL:表设计
  • Ubuntu24.04上安装和配置MariaDB
  • 内容营销专家刘鑫炜:AI搜索会让内容营销变得更容易吗?
  • html + css 自适应首页布局案例
  • 如何编译 Cesium 源码
  • 机器学习基础02_特征工程
  • 介绍一下整数在内存的储存形式(c基础)
  • 第 15 章 -Go 语言 并发编程