记录背景
订阅消息也是用了许久,不过总是懒得把各种场景整理一遍。
以至于每次产品问到我的时候,都是有些模棱两可的回答。
这次终于是下定决心要把各种情况整理好,这样再问到我的时候,直接把这篇文章丢过去就好了。
情况总结
- 无法判断是点击什么按钮,也无法判断订阅弹窗是否曝光。通过微信 api 的回调返回值,只能知道用户操作后各个模板的允许或拒绝状态。
- 勾选“总是保持以上选择”,点击取消,返回结果上述订阅都为”reject”,但是下次还是可以拉取弹窗的。
- 用户发生点击行为或者发起支付回调后,才可以调起订阅消息界面,否则会报错 fail 如下所示
1 2 3
| { "errMsg": "requestSubscribeMessage:fail can only be invoked by user TAP gesture." }
|
- 一次性订阅、长期订阅混用模板 tmplIds 不能混用,否则会报错 fail 如下所示
1 2 3 4
| { "errCode": 20002, "errMsg": "requestSubscribeMessage:fail Templates type must be same" }
|
- tmplIds 值传空数组 []/非法值,会报错 fail 如下所示
1 2 3 4
| { "errCode": 10001, "errMsg": "requestSubscribeMessage:fail TmplIds can't be empty" }
|
- 如果消息订阅操作中选择了“总是保持以上选择”或者“全部拒绝,不再询问”,那么这个账号将再也不会拉起对应模板 id 的授权弹窗了,不过可以通过右上角设置页面对其修改“接收”或者“不接收”状态。
- 部分交互只有真机状态才能看出来。
结果示例
- 只选中一个,点击允许
返回结果如下:
1 2 3 4 5 6
| { "VCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX": "reject", "QJXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX": "accept", "errMsg": "requestSubscribeMessage:ok", "B0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX": "reject" }
|
- 点击“全部拒绝,不再询问”,多条订阅消息,一个选中,一个不选中,也为全部拒绝。
返回结果如下:
1 2 3 4 5
| { "errMsg": "requestSubscribeMessage:ok", "I7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX": "reject", "xCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX": "reject" }
|
后续则再也不会弹出授权框,直接返回同上面一样的结果(即为全部拒绝)。
- 多条订阅消息,一个选中,一个不选中,勾选“总是保持以上选择”,点击确定。
结果返回如下:
1 2 3 4 5
| { "T9XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX": "reject", "errMsg": "requestSubscribeMessage:ok", "xcXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX": "accept" }
|
后续则再也不会弹出授权框,直接返回同上面一样的结果(即为一个允许,一个拒绝)。
- 多条订阅消息。
其中一条消息为曾经选择了“总是保持以上选择”,
一条消息为层级选择了“全部拒绝,不再询问”,
一条消息为新的模板消息,则会弹窗授权框,
且只有那一条新的模板消息可操作,点击确定。
结果返回如下:
1 2 3 4 5 6
| { "T9XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX": "reject", "ArXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX": "accept", "errMsg": "requestSubscribeMessage:ok", "xCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX": "reject" }
|
参考资料