耿健的个人博客

一个即将放飞理想的咸鱼博主

0%

44.浅谈微信小程序订阅消息交互体现

记录背景

订阅消息也是用了许久,不过总是懒得把各种场景整理一遍。
以至于每次产品问到我的时候,都是有些模棱两可的回答。
这次终于是下定决心要把各种情况整理好,这样再问到我的时候,直接把这篇文章丢过去就好了。

情况总结

  1. 无法判断是点击什么按钮,也无法判断订阅弹窗是否曝光。通过微信 api 的回调返回值,只能知道用户操作后各个模板的允许或拒绝状态。
  2. 勾选“总是保持以上选择”,点击取消,返回结果上述订阅都为”reject”,但是下次还是可以拉取弹窗的。
  3. 用户发生点击行为或者发起支付回调后,才可以调起订阅消息界面,否则会报错 fail 如下所示
1
2
3
{
"errMsg": "requestSubscribeMessage:fail can only be invoked by user TAP gesture."
}
  1. 一次性订阅、长期订阅混用模板 tmplIds 不能混用,否则会报错 fail 如下所示
1
2
3
4
{
"errCode": 20002,
"errMsg": "requestSubscribeMessage:fail Templates type must be same"
}
  1. tmplIds 值传空数组 []/非法值,会报错 fail 如下所示
1
2
3
4
{
"errCode": 10001,
"errMsg": "requestSubscribeMessage:fail TmplIds can't be empty"
}
  1. 如果消息订阅操作中选择了“总是保持以上选择”或者“全部拒绝,不再询问”,那么这个账号将再也不会拉起对应模板 id 的授权弹窗了,不过可以通过右上角设置页面对其修改“接收”或者“不接收”状态。
  2. 部分交互只有真机状态才能看出来。

结果示例

  1. 只选中一个,点击允许

返回结果如下:

1
2
3
4
5
6
{
"VCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX": "reject",
"QJXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX": "accept",
"errMsg": "requestSubscribeMessage:ok",
"B0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX": "reject"
}
  1. 点击“全部拒绝,不再询问”,多条订阅消息,一个选中,一个不选中,也为全部拒绝。

返回结果如下:

1
2
3
4
5
{
"errMsg": "requestSubscribeMessage:ok",
"I7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX": "reject",
"xCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX": "reject"
}

后续则再也不会弹出授权框,直接返回同上面一样的结果(即为全部拒绝)。

  1. 多条订阅消息,一个选中,一个不选中,勾选“总是保持以上选择”,点击确定。

结果返回如下:

1
2
3
4
5
{
"T9XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX": "reject",
"errMsg": "requestSubscribeMessage:ok",
"xcXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX": "accept"
}

后续则再也不会弹出授权框,直接返回同上面一样的结果(即为一个允许,一个拒绝)。

  1. 多条订阅消息。

其中一条消息为曾经选择了“总是保持以上选择”,
一条消息为层级选择了“全部拒绝,不再询问”,
一条消息为新的模板消息,则会弹窗授权框,
且只有那一条新的模板消息可操作,点击确定。
结果返回如下:

1
2
3
4
5
6
{
"T9XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX": "reject",
"ArXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX": "accept",
"errMsg": "requestSubscribeMessage:ok",
"xCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX": "reject"
}

参考资料