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

封装代码如下:

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

相关推荐
云迈科技-软件定制开发13 小时前
2026年湖南长沙软件定制开发公司怎么选?本地企业做APP、小程序、管理系统的合作参考
小程序
admin and root14 小时前
「移动安全」安卓APP 反编译&frida脱壳技巧分享
android·开发语言·python·web安全·微信小程序·移动安全·攻防演练
m0_462803882 天前
【无标题】
微信小程序
小码哥0682 天前
从三甲综合医院到连锁诊所:医院管理小程序的场景化突围逻辑(陪诊系统-陪诊APP-陪诊小程序)
小程序·医院管理系统·陪诊小程序·陪诊系统·陪诊app
2501_916007472 天前
iOS和macOS应用程序性能分析和优化工具使用综合指南
android·macos·ios·小程序·uni-app·iphone·webview
正在走向自律2 天前
用豆包Seed Evolving打造全功能【AI智能记账】小程序,开源可落地
人工智能·小程序·开源·智能记账
小羊Yveesss3 天前
模板建站哪个平台好?模板数量之外还要比较编辑与SEO能力
大数据·人工智能·小程序
2501_916007473 天前
深入理解HTTPS对称与非对称加密机制及Charles抓包实践
网络协议·http·ios·小程序·https·uni-app·iphone
郑州光合科技余经理3 天前
家政O2O平台解析:从0搭建上门预约小程序解决方案
android·java·开发语言·前端·小程序·架构·php
维双云3 天前
小程序商城制作一个需要多少钱?2026报价明细与成本拆解
小程序