# 会话管理

会话管理主要涉及 JCCloudDatabase 类中的方法,JCCloudDatabase 是数据库管理类,用于会话的增删改查。

数据库操作都是异步执行的。

# 创建会话

创建会话流程如下:

../_images/createconversation.png

# 发起会话

创建会话有两种方式:

  • 以当前时间创建
long conversationId = [JCCloudDatabase getOrCreateConversation:JCConversationType1To1 serverUid:@"服务器会话 uid" name:@"会话名字"];

输入参数介绍:

参数 类型 说明
type JCConversationType 会话类型,一对一和群聊
serverUid NSString 服务器会话 uid,一对一实际是对方的个人 uid,群组 id 要创建成功才能获得
name NSString 会话名字,只针对一对一会话有效

其中,JCConversationType 有下面两种:

/// 一对一
JCConversationType1To1 = JCMessageChannelType1To1,
/// 群组
JCConversationTypeGroup = JCMessageChannelTypeGroup,

返回值介绍:

返回值类型 说明
long 会话id,没有返回 -1
  • 通过自定义活跃时间创建,会话排序会根据传入的 activeTime 排列,开发者可根据需求是否需传入会话排序。
long conversationId = [JCCloudDatabase getOrCreateConversation:JCConversationType1To1 serverUid:@"服务器会话 uid" name:@"会话名字" lastActiveTime:lastActiveTime];

输入参数介绍:

参数 类型 说明
type JCConversationType 会话类型,一对一和群聊
serverUid NSString 服务器会话 uid,一对一实际是对方的个人 uid,群组 id 要创建成功才能获得
name NSString 会话名字,只针对一对一会话有效
lastActiveTime long 最后活跃时间, <=0 则按当前时间

返回值介绍:

返回值类型 说明
long 会话id,没有返回 -1

创建会话前会先根据传入的 serverUid 查询本地数据库有无此会话

long conversationId = [JCCloudDatabase getConversation:@"服务器会话 uid"];

输入参数介绍:

参数 类型 说明
serverUid NSString 服务器会话 uid,一对一实际是对方的个人 uid,群组 id 要创建成功才能获得

返回值介绍:

返回值类型 说明
long 会话id,没有返回 -1

如果已有此会话 id,则会直接返回会话 id;如果没有则会自动创建。

# 相关回调

创建会话会收到 onConversationAdd(新增会话) 回调

-(void)onConversationAdd:(long)conversationId {
    NSLog(@"收到新增会话回调,conversationId %ld", conversationId);
}

参数介绍:

参数 类型 说明
conversationId long 会话 id

# 删除会话

# 删除单一会话

通过传入本地会话 id 删除会话

[JCCloudDatabase deleteConversation:@"conversationId"];

输入参数介绍:

参数 类型 说明
conversationId long 会话 id

# 删除所有会话

[JCCloudDatabase deleteAllConversations];

# 相关回调

删除会话会触发 onConversationDelete 回调

-(void)onConversationDelete:(long)conversationId {
    NSLog(@"删除会话回调,conversationId %ld", conversationId);
}

参数介绍:

参数 类型 说明
conversationId long 会话数据库 id

# 更新会话

# 更新会话信息

[JCCloudDatabase updateConversation:@"旧的JCConversationData对象"];

输入参数介绍:

参数 类型 说明
oldConversationData JCConversationData 旧的会话

# 更新会话名字

[JCCloudDatabase updateConversationNameIfNeed:@"会话服务器id" name:@"会话名称"];

输入参数介绍:

参数 类型 说明
serverUid NSString 服务器会话 uid,一对一实际是对方的个人 uid,群组 id 要创建成功才能获得
name NSString 会话名字,只针对一对一会话有效

# 更新会话图标

[JCCloudDatabase updateConversationIconIfNeed:@"服务器会话 uid" icon:@"会话图标"];

输入参数介绍:

参数 类型 说明
serverUid NSString 服务器会话 uid
icon NSString 会话图标的路径

# 保存草稿

[JCCloudDatabase saveDraft:conversationId content:@"文本内容" contentType:@"text" filePath:@"文件路径"];

输入参数介绍:

参数 类型 说明
conversationId long 会话数据库id
content NSString 文本内容
contentType NSString 类型
filePath NSString 文件路径

# 清除草稿

[JCCloudDatabase clearDraft:conversationId];

输入参数介绍:

参数 类型 说明
conversationId long 会话数据库id

# 设置会话所有消息本地已读

在会话界面中调用下面的方法将会话所有消息标为本地已读

[JCCloudDatabase markConversationRead:conversationId];

输入参数介绍:

参数 类型 说明
conversationId long 本地会话 id

# 设置会话置顶

在会话界面中调用 JCCloudManager 类中的 setConversationPriority 方法设置会话置顶

[JCCloudManager.shared setConversationPriority:conversationId isPriority:true usingBlock:^(bool, int, NSObject * _Nullable) {
    NSLog(@"设置优先级")
}

输入参数介绍:

参数 类型 说明
conversationId long 本地会话 id
isPriority bool 是否置顶
block CloudOperationBlock 结果函数

# 设置会话免打扰

在会话界面中调用 JCCloudManager 类中的 setConversationDnd 方法设置会话免打扰

[JCCloudManager.shared setConversationDnd:conversationId dnd:true usingBlock:^(bool, int, NSObject * _Nullable) {
    NSLog(@"设置会话免打扰")
}

输入参数介绍:

参数 类型 说明
conversationId long 会话 id
dnd bool 是否免打扰
block CloudOperationBlock 结果函数

# 相关回调

更新会话会触发 onConversationUpdate(会话更新)的回调

-(void)onConversationUpdate:(long)conversationId {
    NSLog(@"会话:%ld 更新", conversationId);
}

参数介绍:

参数 类型 说明
conversationId long 会话数据库 id

# 查询会话

# 查询单个会话

查询单个会话有两种方式,开发者可以根据需求选择调用

  • 通过会话 id 查询单个会话
JCConversationData* data = [JCCloudDatabase queryConversation:@"会话id"];

输入参数介绍:

参数 类型 说明
conversationId long 会话id

返回值介绍:

返回值类型 说明
JCConversationData 会话对象
  • 通过 ServerUid 查询会话
JCConversationData* data = [JCCloudDatabase queryConversationByServerUid:@"服务器会话 uid"];

输入参数介绍:

参数 类型 说明
serverUid NSString 服务器会话 uid

返回值介绍:

返回值类型 说明
JCConversationData 会话对象

# 查询所有会话

登录成功之后,开发者可以调用下面接口获取 SDK 在本地数据库生成的会话列表,获取到的会话列表按照时间倒序排列,置顶会话会排在最前。

NSArray<JCConversationData*>* conversationsData = [JCCloudDatabase queryConversations];

返回值介绍:

返回值类型 说明
JCConversationData 对象数组 返回数据库中所有的会话

JCConversationData 对象原型请参考 API reference 中的 JCCloudDatabase 类。

# 查询本地会话 id

  • 根据 serverUid 获得本地会话 id
long conversationId = [JCCloudDatabase getConversation:@"serverUid"];

输入参数介绍:

参数 类型 说明
serverUid NSString 服务器会话 uid,一对一实际是对方的个人 uid,群组 id 要创建成功才能获得

返回值介绍:

返回值类型 说明
long 会话id,没有返回 -1
  • 根据消息服务器 id 获得本地会话 id
long conversationId = [JCCloudDatabase getConversationByMessageId:serverMessageId];

输入参数介绍:

参数 类型 说明
serverMessageId long 消息服务器 id

返回值介绍:

返回值类型 说明
long 本地会话 id

# 获得所有的未读消息数

[JCCloudDatabase getToltalUnreadMessageCount:false];

输入参数介绍:

参数 类型 说明
includeDndConversation bool 是否包含免打扰会话

返回值介绍:

返回值类型 说明
long 所有的未读消息数