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

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

封装代码如下:

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来增加订阅次数,否则消息还是无法推送【重要】

相关文章:

  • Linux 环境下C、C++、Go语言编译环境搭建秘籍
  • React 第四十七节 Router 中useLinkClickHandler使用详解及开发注意事项案例
  • 【Redis】过期键删除策略,LRU和LFU在redis中的实现,缓存与数据库双写一致性问题,go案例
  • Web安全测试-文件上传绕过-DVWA
  • 人该怎样活着呢?54
  • 【2025最新】Cline自定义API配置完全指南:接入Claude 3.7/GPT-4o
  • Python打卡第38天
  • Python map()函数详解:批量数据处理的瑞士军刀
  • (五)MMA(OpenTelemetry/Rabbit MQ/)
  • Android设置界面层级为最上层实现
  • 零基础远程连接课题组Linux服务器,安装anaconda,配置python环境(换源),在服务器上运行python代码【3/3 适合小白,步骤详细!!!】
  • 深信服防火墙拦截了DELETE、PUT请求,未达到nginx及后端服务
  • 如何将联系人从 Android 传输到 PC(正确步骤)
  • 亚马逊服务器磁盘扩容一般操作
  • R包安装报错解决案例系列|R包使用及ARM架构解决data.table安装错误问题
  • 使用pnpm、vite搭建Phaserjs的开发环境
  • Mico 1.33.1 | 解锁高级版 上千种自定义组件 动态壁纸
  • 评估Facebook的隐私保护:挑战与机遇并存
  • HarmonyOS-ArkUI 窗口层次简介
  • 案例分析|轴承座静力学分析
  • wordpress 维基/台州seo网站排名优化
  • 网站版式类型/怎么在百度上打广告
  • 做像58同城这样的网站能用mysql数据库吗/短视频运营培训学费多少
  • 做内容网站/深圳关键词
  • 百度为什么打不开网页无法访问/百度手机seo
  • 建设网站的源代码/网站域名注册查询