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

微信小程序一次性订阅封装

封装代码如下:

export async function subscribeMessage(tmplIds: string[]): Promise<ISubscribeMessagePromise> {// 模板ID// 1、获取设置状态const settings = (await wx.getSetting({ withSubscriptions: true })).subscriptionsSetting || {}console.log('---设置状态---', settings)// 2、总开关if (!settings.mainSwitch) {return Promise.resolve({ content: '请在设置中打开消息订阅开关', status: false })}// 3、单个开关if (settings.itemSettings) {const notSubscribeTxt: string[] = []const yesSubscribeIds: string[] = []for (const item in settings.itemSettings) {if (settings.itemSettings[item] !== 'accept') {notSubscribeTxt.push(SUBSCRIBE_NOTICE[item])continue}yesSubscribeIds.push(item)}// 已订阅的消息增加次数 对应上边说的第4点,如果订阅多条,但是只允许接受一条消息,这里应增加允许消息的订阅次数,否则无法推送消息【遇到的坑】if (notSubscribeTxt.length && yesSubscribeIds.length) {wx.requestSubscribeMessage({ tmplIds: yesSubscribeIds, entityIds: [] })}if (notSubscribeTxt.length) {return Promise.resolve({ content: `请在设置中打开${notSubscribeTxt.join('、')}消息通知开关`, status: false })}}// 4、请求订阅return new Promise((resolve, reject) => {wx.requestSubscribeMessage({tmplIds: tmplIds,entityIds: [],success: function (res) {resolve({ content: '', status: true })},fail: function (err) {resolve({ content: '', status: true })}})})
}

调用

三、其他问题点

1、如果wx.getSetting获取到 mainSwitch=false 则需要引导用户去小程序设置里面打开总订阅开关

2、在设置中总开关打开,但是要订阅的消息选择不接受,则消息无法推送

3、wx.requestSubscribeMessage每调用一次,订阅次数增加1次【重要】
4、当《总保持以上选项》选中,但是消息订阅开关没有打开,需要引导用户去设置中打开消息(允许接受消息)。如果用户选择接受消息,回到页面也需要调用wx.requestSubscribeMessage来增加订阅次数,否则消息还是无法推送【重要】

http://www.lryc.cn/news/2392579.html

相关文章:

  • Spring AI MCP的几个小问题
  • 安全帽检测算法AI智能分析网关V4守护工地/矿山/工厂等多场景作业安全
  • Pycharm的简单介绍
  • 重新安装解决mac vscode点击不能跳转问题
  • Go语言中flag包的用法详解
  • Python自动化之selenium语句——打开、关闭浏览器和网页
  • 【数据结构】--二叉树--堆(上)
  • Rust 学习笔记:使用迭代器改进 minigrep
  • 多线程(5)——单例模式,阻塞队列
  • React整合【ECharts】教程004:饼图的构建和基本设置
  • 视频监控汇聚平台EasyCVR工业与安全监控:防爆摄像机的安全应用与注意事项
  • Android 倒计时总结
  • 基于 Redis 实现分布式锁:原理及注意事项
  • 手机设备多?怎样设置IP保证不关联
  • Linux 中常见的安全与权限机制
  • Golang|单例模式
  • 哈尔滨工业大学计算机系统大作业程序人生-Hello’s P2P
  • 小程序定制开发:从需求到落地,打造企业专属数字化入口
  • 【C/C++】基于 Docker 容器运行的 Kafka + C++ 练手项目
  • Linux系统管理与编程24:基础条件准备-混搭“本地+阿里云”yum源
  • 新一代Python管理UV完全使用指南|附实际体验与效果对比
  • 如何在 Windows 10 PC 上获取 iPhone短信
  • STM32程序运行不了,仿真功能也异常,连断点和复位都异常了
  • Linux 系统中的软链接与硬链接
  • Python爬虫第22节- 结合Selenium识别滑动验证码实战
  • 【C/C++】chrono简单使用场景
  • Escrcpy(安卓手机投屏软件) v1.29.6 中文绿色版
  • Oracle MOVE ONLINE 实现原理
  • Linux:深入理解网络层
  • 【设计模式】简单工厂模式,工厂模式,抽象工厂模式,单例,代理,go案例区分总结