创建一对一会话回调问题

您可以把 onInvited 的 client 的相关信息也打印出来,两条记录的 client 是不同的,应该分别是 customer1 和 customer6 。

onInvited(AVIMClient client, AVIMConversation conversation, String invitedBy)

这个回调的三个参数的意思是:谁(client)被谁(invitedBy)加入到了会话(conversation)里。

两次的client 确实不一样 ,但是为什么两次的invitedBy都是一样的,而且为什么会触发两次呢?我明明只有一个创建了会话

当一个 ID 在多个设备同时在线时,需要数据同步;这个设计就是为了满足这个场景。

不对呀,这个是我测试用的,id肯定只有一个,我还是疑问为什么回调了两次。我后台设置了client,一个创建会话,一个不创建会话。

可能是我解释不够清晰,所以以 client-id-1 以及 client-id-2 为样例详细说明一下:

client-id-1 创建一个成员为 client-id-1 以及 client-id-2 的普通会话后,client-id-1 和 client-id-2 都会接收到 conversation#onInvited 事件。

client-id-2 接收到 conversation#onInvited 事件应该很好理解,指它被 client-id-1 邀请加入到会话中;让您疑虑的地方是 client-id-1 也接收到了 conversation#onInvited 事件。

client-id-1 作为会话的创建者,也接收到 conversation#onInvited 事件,这个设计的主要目的是为了解决「同一个 ID 在多设备保持在线时,需要同步事件或数据」这一需求。即当 client-id-1 在设备 A 以及设备 B 上同时在线时,设备 A 的 client-id-1 创建一个会话后,设备 B 的 client-id-1 需要知道或同步这一操作,所以就会出现会话的创建者也接收到 conversation#onInvited 事件,这里的行为乍一看确实有点难理解,甚至有些奇怪,但它确实是为了特定需求而设计的。

而 client-id-1 只在一台设备登录时也接收到了事件,是为了兼容历史包袱而保留的。接口的行为有冗余,您可以自行过滤掉不需要响应的事件。

我用的java sdk的maven依赖如下

cn.leancloud
storage-core
6.5.12


cn.leancloud
realtime-core
6.5.12

根据你们的例子,回调函数有问题


我想问一下,是不是我的maven依赖的版本,跟你们官网的文档不一致

你好,这里是文档有误,addMembers 对应的回调不是 AVIMConversationCallback,正确应该是 AVIMOperationPartiallySucceededCallback,我们稍后会更新文档:

conversation.addMembers(Arrays.asList("Mary"), new AVIMOperationPartiallySucceededCallback() {
    @Override
    public void done(AVIMException e, List<String> successfulClientIds, List<AVIMOperationFailure> failures) {
    }
});

好的,这个问题我发现了好几处。
我这边还有一个问题,假如一开始A跟B之间产生会话,聊了一段时间之后,A邀请了C,然后同时A把B剔除了会话。此时的会话id没有变,会话成员变成了A和C。请问:1、这个时候C能看到A跟B之前的聊天记录吗?2、如何查询A和B之间的聊天记录?

注:我说的是以java后台开发为例

B已经被移除会话,就无法查询会话记录了。

我记录这个会话的id,然后根据B和A最后的聊天记录时间,这样也没法查出A和B的聊天记录吗。会话Id应该是一直没有变化的

只要被移除会话,就没有查询聊天记录的权限了。

那么我用A根据会话id和B最后在会话的时间,也没办法查出聊天记录嘛

您好,我想请问几个问题。1、我的java服务端和前端都登陆了一个client,例如叫client1,当前端调用了client
1的close方法,让client1下线,这个时候我的Java后端能收到close方法的回调函数吗?2、client1登录,除了调用close方法会使该客户下线,请问其他什么情况下客户会由上线变为下线状态?

后端不会收到。

您好,假如前java后端和端登录了一个client(没有加标签,是同一个client)。这个时候前端用户关闭浏览器,这个时候前端登录的client应该会变成下线状态吧,这个时候client的状态是在线还是离线?我的java后端怎么监听到下线事件呢?

您好,再请教一个问题。假如前java后端和端登录了一个client(没有加标签,是同一个client)。这个时候前端用户关闭浏览器,这个时候前端登录的client应该会变成下线状态吧,这个时候client的状态是在线还是离线?我的java后端怎么监听到下线事件呢?

是的。

我们服务提供上下线通知的 hook 接口,详情见此文档: https://leancloud.cn/docs/realtime-guide-systemconv.html#hash-2017196884

另外,我们也提供了一篇查询客户端上下线状态的使用范例:
https://leancloud.cn/docs/realtime-guide-onoff-status.html

意思是前端需要在用户上下线的时候将状态信息存到缓存中,然后后端从缓存中获取客户状态信息?

并不是指「前端需要做什么」,而是使用我们的云引擎服务

你们写的我实在没看明白,到底该怎么用,麻烦可能写个简单的例子看一下。我搞不清楚首先要干嘛,然后要干嘛

您是对哪一步有疑问呢?是对云引擎使用有疑问吗?

是的,不知道从哪里入手,我想知道怎么在java后端实现hook函数?云引擎和云缓存之间的区别?还有hook函数和云函数怎么使用,而知有什么关系和区别

您是指在您自己的服务端实现 LeanCloud 即时通讯的 Hook 函数?

云引擎(LeanEngine)是 LeanCloud 推出的服务端托管平台。提供了多种运行环境(Node.js, Python 等)来运行服务端程序。你只需要提供服务端的业务逻辑(网站或云函数等),而服务端的多实例负载均衡,不中断服务的平滑升级等都由云引擎提供支持。

云缓存(LeanCache)使用 Redis (3.0.x)来提供高性能、高可用的 Key-Value 内存存储,主要用作缓存数据的存储,也可以用作持久化数据的存储。

云缓存是云引擎服务的一个子功能。

使用方面,建议您参考我们提供的使用文档:
https://leancloud.cn/docs/leanengine_cloudfunction_guide-java.html