环信超级社区(Circle)快速开始
集成准备
使用 Circle 之前,确保你已经集成环信即时通讯 IM iOS SDK 3.9.9.1,详见 环信即时通讯 IM iOS 快速开始。
技术原理
用户需加入一个社区,选择加入社区或社区下频道分组中的频道,然后才能在频道中发送消息。
发送和接收消息的逻辑如下:
- 发送方获取社区 ID;
- 发送方获取频道 ID;
- 发送方通过
sendMessage
发送消息; - 接收方通过
EMChatManagerDelegate
添加消息接收的回调通知。
实现方法
获取指定的社区
你可以通过三种方式获取指定的社区 ID:
- 创建社区;
- 加入一个现有社区;
- 获取已加入的社区列表。
创建社区
你可以调用 createServer
方法创建一个社区:
let attribute = EMCircleServerAttribute()
attribute.name = name
attribute.icon = icon
attribute.desc = desc
attribute.ext = ext
EMClient.shared().circleManager?.createServer(attribute) { server, error in
if let error = error {
Toast.show(error.errorDescription, duration: 2)
} else if server != nil {
Toast.show("创建成功", duration: 2)
}
}
加入一个现有社区
你可以调用 joinServer
方法加入一个现有社区:
EMClient.shared().circleManager?.joinServer(serverId) { server, error in
if let error = error {
Toast.show(error.errorDescription, duration: 2)
} else if let server = server {
Toast.show("加入成功", duration: 2)
}
}
获取已加入的社区列表
你可以调用 fetchJoinedServers
方法获取已加入的社区列表:
EMClient.shared().circleManager?.fetchJoinedServers(20, cursor: self.cursor) { result, error in
if let error = error {
Toast.show(error.errorDescription, duration: 2)
return
}
}
获取指定的频道
你可以通过三种方式获取指定的频道 ID:
- 创建频道;
- 加入一个现有频道;
- 获取已加入的频道列表;
- 获取社区中的频道列表;
创建频道
你可以调用 createChannel
方法创建频道:
let attribute = EMCircleChannelAttribute()
attribute.name = name
attribute.desc = desc
EMClient.shared().circleManager?.createChannel(self.serverId, categoryId: self.categoryId, attribute: attribute, mode: self.mode, completion: { channel, error in
if let error = error {
Toast.show(error.errorDescription, duration: 2)
} else {
Toast.show("创建成功", duration: 2)
}
}
加入一个现有频道
你可以调用 joinChannel
方法加入一个频道:
EMClient.shared().circleManager?.joinChannel(serverId, channelId: channelId) { channel, error in
if let error = error {
Toast.show(error.errorDescription, duration: 2)
} else {
Toast.show("加入成功", duration: 2)
}
}
获取社区的公开频道列表
你可以调用 fetchPublicChannelsInServer
方法获取社区下的公开频道列表:
EMClient.shared().circleManager?.fetchPublicChannels(inServer: serverId, limit: 20, cursor: nil) { result, error in
if let error = error {
Toast.show(error.errorDescription, duration: 2)
return
}
}
获取社区的私密频道列表
你可以调用 fetchPrivateChannelsInServer
方法获取社区下所有私密频道的列表:
EMClient.shared().circleManager?.fetchPrivateChannels(inServer: self.serverId, limit: 20, cursor: nil) { result, error in
if let error = error {
Toast.show(error.errorDescription, duration: 2)
return
}
}
此外,你还可以调用 fetchPublicChannelsInCategory
或 fetchPrivateChannelsInCategory
方法获取指定频道分组下的公开频道列表或私密频道列表。
发送和接收一条频道消息
在频道中发送和接收消息,你可以参考 发送和接收消息。
发送一条频道消息
你可以调用 sendMessage
方法在指定频道中发送一条消息:
let messageBody = EMTextMessageBody(text: text)
let message = EMChatMessage(conversationID: channelId, from: selfUserId, to: channelId, body: messageBody, ext: nil)
message.isChannelMessage = true
message.chatType = .groupChat
EMClient.shared().chatManager.send(message, progress: nil) { message, error in
if let error = error {
Toast.show(error.errorDescription, duration: 2)
} else {
Toast.show("发送成功", duration: 2)
}
}
接收一条频道消息
添加 ChatManager
回调的代理对象:
EMClient.shared().chatManager?.add(self, delegateQueue: nil)
代理对象实现 EMChatManagerDelegate
接口的 messagesDidReceive
方法。
extension ChatViewController : EMChatManagerDelegate {
func messagesDidReceive(_ aMessages: [EMChatMessage]) {
}
}