您好
我们公司现在用的Android实时通信这个服务,但是这个服务不会在客户端上线后主动下发离线消息,而是下发一个unredcount,具体消息需要我们主动拉取。
那现在有一种情况,就是:
A用户在B用户离线期间,向他发送了2条消息,当B用户上线时,A用户马上向他又发送了1条消息。根据我们实测,经常性的出现所以‘先回调onMessage方法,然后过一会儿回调onUnreadMessagesCountUpdated方法’,在onUnreadMessagesCountUpdated方法里,我是根据getUnreadMessagesCount调用queryMessages(final int limit, final AVIMMessagesQueryCallback callback)方法的,那这显然拉取到的消息是不正确的。另外我查看了其他方法,好像并没有能完美解决这个‘准确拉取离线期间未读消息’。所以我向请问下,你们对这个问题能提供什么解决思路吗,或者是用这个服务的其他客户一般是怎么解决这个问题的?

你好,我这边暂时还无法回答您的问题,需要先理解您的问题。请问

经常性的出现所以‘先回调onMessage方法,然后过一会儿回调onUnreadMessagesCountUpdated方法’,在onUnreadMessagesCountUpdated方法里,我是根据getUnreadMessagesCount调用queryMessages(final int limit, final AVIMMessagesQueryCallback callback)方法的,那这显然拉取到的消息是不正确的。

这一段最后说 不正确的 是指什么不正确?

假设有三条消息abc,那么根据我上面说的步骤,其中ab是在离线期间发送的,c是在线后发送的。因为queryMessages(final int limit, final AVIMMessagesQueryCallback callback)第一个参数我传的是getUnreadMessagesCount的数字,此时我拉下来的就是bc消息,而不是期望的ab消息了。不知道我说明白了吗。。。

你现在的实现方式有些问题。

当一个 clientId 离线期间收到某个 conversation 的 ab 两条消息后,这个 clientId 重新登录,在会话列表显示 2 条未读消息。此时 clientId 已经在线,如果 conversation 里再次发来一条消息 c 后,这时会话列表里的这个 conversation 需要更新为 3 条未读消息。然后当用户点击进去 conversation 的聊天页面时,queryMessages 要拉取 3 条未读消息加入到聊天记录。