如何判断订阅消息用户是否点击总是保持以上选择,不再询问
背景:实际业务需求时出现需要判断用户是否点击了
保持选项,业务正好是不统计那些默认保存的用户、并且不管选择同意或取消,和大多数需求正好相反。
最早查阅文档发现首先requestSubscribeMessage只返回接口失败/接口成功(选择取消/同意)。并没有返回是否保持选项。然后查阅getSetting发现有一个额外参数
| withSubscriptions | Boolean | 是否同时获取用户订阅消息的订阅状态,默认不获取。注意: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,都可以判断是否保持以上选择。借此有跟多种组合判断来确定具体业务需求:
- 勾选不再询问,禁止推送
- 勾选不再询问,开启推送,不接收
- 勾选不再询问,开启推送,接收
- 未勾选不再询问,不接收
- 未勾选不再询问,接收