调用即时通讯API发消息时,引起异常推送,离线推送设置未生效

使用 即时通讯的 REST API 发送消息。
结果引发了一条异常的 推送:
如下图所示,发送了一条 hello 消息,结果后面收到了推送

异常的推送:

我们的APP收到的异常推送:

上次大概一个月前出现过此问题,我阅读相关文档,怀疑是离线推送通知导致的,然后我把离线通知设置为了 dev 环境:

但不幸的是,这次又出现问题了,而且是线上生产故障,求助一下 LeanCloud 的工程师,这是什么原因导致的?

有人吗?。。。

您好,如果您在发送消息时设置了 pushdata,离线推送的时候就会使用 pushData 设置的内容来发出推送通知,而不是使用静态配置的提醒消息。

如果还有疑问,请您提供 Appid 并复现问题,粘贴相关会话 ID,与消息 ID。

1 人赞了这个帖子.

调用即时通讯 REST API 时没有设置 push data,
复现了
AppID: hzU3vYqgtagihQwdGCTEaoJv-9Nh9j0Va
会话ID: 5ceb96750a83a200094c18ff
消息ID: ldA519UJHQwX29U9cjLfGz
还有就是,为什么LeanCloud控制台的即时通讯的消息记录里没有(很久没更新了)。

我不知道下图中,这个push data 是怎么产生的,我确认调用 Rest API 的时候没有设置 push data

而且自动推送到了6台设备,这是 一对一的即时通讯聊天。

您好,我这里能确认的是,您应用 hzU3vYqgtagihQwdGCTEaoJv-9Nh9j0Va 下已经很久没有即时通讯服务触发的离线消息推送了。并且能出现在推送记录中的推送,一定是由您应用调用推送 API 发出,我们是不会自动产生推送记录中能查到的推送的。

多一个 push data 的问题看上去确实不对,我们尽快排查。

确认了一圈,我们的 _messageReceived hook 参数里是不会将用户上传的 push data 参数发送过去的。从您打印的日志里也可以看到,request param 里并没有 push data。push data 字样是另起一行打印,也即您 hook 实现中自行拼接的。
_messageReceived Hook 我们会传递的参数说明在这里:https://leancloud.cn/docs/realtime-guide-systemconv.html#hash-1573260517

另外补充一下,这条消息 ldA519UJHQwX29U9cjLfGz 您在调用 REST API 时带着 transient 参数为 true,所以是暂态消息,只会下发消息而不会存入历史消息记录,所以您在控制台也无法找到这条消息。在您截图的 request.param 日志能看到,transient 是 true。

再补充一下,transient 为 true 的消息我们是不会触发离线消息推送的。也印证了我上面提到的,我们日志里已经很久没有看到您应用因即时通讯离线消息触发的推送了。

感谢您的回复,你的意思,这是由于我们自己在 hook 里配置的?

hook 是部署在云引擎里的吗?
可是我们云引擎已经一年多没有再重新部署了,而这个问题是一个月之前突然出现的。
这该怎么解释?

这个问题是一个月前突然出现的,之前都没出现过问题,而且我们云引擎应该是没有部署过 hook 函数,最近一次部署还是 2017年12月。

现在我们的即时通讯还处于瘫痪状态,我们临时下线了 LeanCloud 的即时通讯转而自己简单实现了。
但是还是想用起来 LeanCloud 的即时通讯,所以上周五(2019-09-20)测试即时通讯API,发现这个异常推送的问题还是存在。

您好,
我并不是说异常推送是您 Hook 发出的,只是说 Hook 中 push data 字样的日志是您 Hook 打印的。您需要去看一下您 Hook 实现。

对于异常推送,我确认是由您的应用通过 REST API 主动发出的,所以请排查是从哪里调用 API 发的推送。我这里能看到的您应用下已经很久没有即时通讯触发的推送了,最近一年多没有部署云引擎并不表示问题不存在,我理解只是您的逻辑没有走到异常调用 REST API 发推送。所以请排查是哪里调用的推送接口,什么时候会调用,以及为什么在调用推送接口时传递的是错误的数据,从而解决异常推送。

很奇怪
1. 我们没有实现那个 Hook,我甚至是第一次知道有 Hook 这么个东西。
2. 我们确实同时使用了 即时通讯的 API 和 推送的 API,分别是 1.1/rtm/messages1.1/push ,但我确定异常的推送只有在调用即时通讯API 时发生。也就是我们调用了即时通讯API,结果 LeanCloud 自动发了一条异常 Push,内容和即时通讯API 的消息内容一模一样。
3. 推送的API,我们在调用时,代码中传递的参数都是文本字符串(与即时通讯的消息内容不同),不是 json 字符串,而异常推送的内容都是 json 字符串。

比如,A 跟 B 发送聊天消息 “您的房源还在出租吗?”,我们调用即时通讯 REST API,发送了一个 JSON 对象。而调用推送 REST API 发送的是 “您有一条来自A的新消息”,不是 JSON 格式的。

所以我不觉得,这是由于我们自己调用推送的API,而导致的异常推送。
而且从现象看,就是由于即时通讯 API 引起的 LeanCloud 自动触发的异常推送,甚至还是全局推送,推送到多个用户。