小程序订阅消息之获取是否选择“不再提醒”

2,344 阅读2分钟

如何判断订阅消息用户是否点击总是保持以上选择,不再询问

背景:实际业务需求时出现需要判断用户是否点击了保持选项,业务正好是不统计那些默认保存的用户、并且不管选择同意或取消,和大多数需求正好相反。

最早查阅文档发现首先requestSubscribeMessage只返回接口失败/接口成功(选择取消/同意)。并没有返回是否保持选项。然后查阅getSetting发现有一个额外参数

withSubscriptionsBoolean是否同时获取用户订阅消息的订阅状态,默认不获取。注意:withSubscriptions 只返回用户勾选过订阅面板中的“总是保持以上选择,不再询问”的订阅消息。

发现如果withSubscriptions选择为true,会额外返回一个对象出来:

subscriptionsSetting = {
  mainSwitch: true, // 订阅消息总开关
  itemSettings: {   // 每一项开关
    SYS_MSG_TYPE_INTERACTIVE: 'accept', // 小游戏系统订阅消息
    SYS_MSG_TYPE_RANK: 'accept'
    zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: 'reject', // 普通一次性订阅消息
    ke_OZC_66gZxALLcsuI7ilCJSP2OJ2vWo2ooUPpkWrw: 'ban',
  }
}

可以看到mainSwitch是总开关,也就是通过右上角>设置才能关闭的,关闭后接口会返回fail:20004, 这个不是我很需要的,因为描述中写道只返回用户勾选过订阅面板中的“总是保持以上选择,不再询问,所以真机测试,切换保持以上选择勾选情况,打印出来确实有变化具体表现为:

// 未勾选
subscriptionsSetting: {
  mainSwitch: true
}
// 已勾选
subscriptionsSetting: {
  mainSwitch: true,
  itemSettings: {
    [id]: 'accept',
  },
  [id]: 'accept'
}

通过以上可以看出,勾选会出现你的订阅id为键名的键值对和itemsettings,所以我们可以判断res.subscriptionsSetting[key]subscriptionsSetting.itemSettings来确认是否勾选。 另外: mainSwitch的值,以及勾选时的弹窗选择并不影响结构,也就是就算在总开关选择关闭,或者某个id的值是reject,都可以判断是否保持以上选择。借此有跟多种组合判断来确定具体业务需求:

  • 勾选不再询问,禁止推送
  • 勾选不再询问,开启推送,不接收
  • 勾选不再询问,开启推送,接收
  • 未勾选不再询问,不接收
  • 未勾选不再询问,接收