QXJIMSDK (iOS Pure-Swift) 功能清单与 API 完整参考手册
本文档提供 QXJIMSDK 的完整 API 参考,以及与原版 OpenIM SDK (OIMManager / Open_im_sdk*) 的 1:1 接口映射对照表。
结论先行:
QXJIMSDK在功能上与 OpenIM 官方v3.8.3-patch.3SDK 100% 完全一致(涵盖底层Open_im_sdk.objc.h导出的全部函数与监听协议),同时将调用方式升级为现代 Swiftasync throws与AsyncStream,并内置断线重连后自动恢复用户在线状态订阅的增强逻辑。
目录
- 模块一:SDK 初始化、登录与生命周期
- 模块二:用户在线状态订阅 (Presence)
- 模块三:“对方正在输入”状态 (Typing)
- 模块四:会话管理 (Conversation)
- 模块五:消息创建与发送 (Message Creation & Sending)
- 模块六:历史消息、撤回、删除与本地搜索
- 模块七:群组与群成员管理 (Group)
- 模块八:好友关系与黑名单 (Friendship & Blacklist)
- 模块九:个人资料、收藏指令、文件上传与推送角标
- 模块十:7 大实时事件流 (
AsyncStream) 对照表
1. 模块一:SDK 初始化、登录与生命周期
| 功能说明 | 原版 OpenIM (OIMManager / Go 导出函数) | QXJIMClient.shared (Swift API) |
|---|---|---|
| 获取 SDK 版本号 | getSdkVersion / Open_im_sdkGetSdkVersion | var sdkVersion: String |
| 获取当前登录状态 | getLoginStatus / Open_im_sdkGetLoginStatus | var loginStatus: IMLoginStatus |
| 获取当前登录用户 ID | getLoginUserID / Open_im_sdkGetLoginUserID | var loginUserID: String |
| 初始化 SDK 并注册监听 | initSDKWithConfig: / Open_im_sdkInitSDK | func initSDK(config: IMConfig) throws -> Bool |
| 反初始化 SDK | unInitSDK / Open_im_sdkUnInitSDK | func unInitSDK() |
| 登录账号 | login:token: / Open_im_sdkLogin | func login(userID: String, token: String) async throws |
| 退出登录 | logoutWithOnSuccess: / Open_im_sdkLogout | func logout() async throws |
| 设置前后台状态 | setAppBackgroundStatus: / Open_im_sdkSetAppBackgroundStatus | func setAppBackgroundStatus(isBackground: Bool) async throws |
| 网络状态变更通知重连 | networkStatusChanged: / Open_im_sdkNetworkStatusChanged | func networkStatusChanged() async throws |
代码示例
import QXJIMSDK
let docPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
let config = IMConfig(
platform: .iOS,
apiAddr: "https://im-api.qxj.com",
wsAddr: "wss://im-ws.qxj.com",
dataDir: "\(docPath)/qxj_im_db",
logLevel: 4
)
try QXJIMClient.shared.initSDK(config: config)
try await QXJIMClient.shared.login(userID: "user_1001", token: "user_jwt_token")
// App 进入后台 / 回到前台时调用
try await QXJIMClient.shared.setAppBackgroundStatus(isBackground: true)
2. 模块二:用户在线状态订阅 (Presence)
| 功能说明 | 原版 OpenIM (OIMManager / Go 导出函数) | QXJIMClient.shared (Swift API) |
|---|---|---|
| 订阅用户在线状态并返回当前状态 | subscribeUsersStatus: / Open_im_sdkSubscribeUsersStatus | func subscribeUsersStatus(userIDs: [String]) async throws -> [IMUserOnlineStatus] |
| 取消订阅用户在线状态 | unsubscribeUsersStatus: / Open_im_sdkUnsubscribeUsersStatus | func unsubscribeUsersStatus(userIDs: [String]) async throws |
| 获取所有已订阅用户的在线状态 | getSubscribeUsersStatus: / Open_im_sdkGetSubscribeUsersStatus | func getSubscribeUsersStatus() async throws -> [IMUserOnlineStatus] |
| 查询指定用户在线状态(一次性) | getUserStatus: / Open_im_sdkGetUserStatus | func getUserStatus(userIDs: [String]) async throws -> [IMUserOnlineStatus] |
| 实时监听用户在线状态变化 | onUserStatusChanged: (OIMUserListener) | userStatusEvents.stream() (AsyncStream<IMUserOnlineStatus>) |
代码示例
// 1. 订阅好友在线状态,立即拿到当前各端在线状态
let initialStatuses = try await QXJIMClient.shared.subscribeUsersStatus(userIDs: ["user_2001", "user_2002"])
for item in initialStatuses {
print("用户 \(item.userID) 是否在线: \(item.isOnline), 在线终端: \(item.onlinePlatforms)")
}
// 2. 监听实时状态变化(WebSocket 重连后 SDK 会自动恢复已订阅列表)
Task {
for await status in QXJIMClient.shared.userStatusEvents.stream() {
print("用户 \(status.userID) 状态变更为: \(status.isOnline ? "在线" : "离线")")
}
}
// 3. 页面销毁或无需关注时取消订阅
try await QXJIMClient.shared.unsubscribeUsersStatus(userIDs: ["user_2001"])
3. 模块三:“对方正在输入”状态 (Typing)
| 功能说明 | 原版 OpenIM (OIMManager / Go 导出函数) | QXJIMClient.shared (Swift API) |
|---|---|---|
| 上报当前会话输入焦点状态(推荐,支持多端与自动节流) | changeInputStates:focus: / Open_im_sdkChangeInputStates | func changeInputStates(conversationID: String, focus: Bool) async throws |
| 查询指定会话中某用户正在输入的平台列表 | getInputStates:userID: / Open_im_sdkGetInputStates | func getInputStates(conversationID: String, userID: String) async throws -> [IMPlatform] |
| 实时监听“对方正在输入”状态变化 | onConversationUserInputStatusChanged: | inputStatusEvents.stream() (AsyncStream<IMInputStatusChangedData>) |
| 旧版单聊输入提示接口(兼容保留) | typingStatusUpdate:msgTip: / Open_im_sdkTypingStatusUpdate | func typingStatusUpdate(recvID: String, msgTip: String) async throws |
代码示例
// 1. 当用户在输入框打字时调用(Go 内核自带 10 秒发送节流,频繁调用不会产生多余网络包)
try await QXJIMClient.shared.changeInputStates(conversationID: currentConversationID, focus: true)
// 2. 当用户清空输入框、发送消息或离开页面时调用
try await QXJIMClient.shared.changeInputStates(conversationID: currentConversationID, focus: false)
// 3. 聊天页监听对方输入状态(若对方停止输入超过 15 秒,Go 内核定时器会自动触发 isTyping = false)
Task {
for await data in QXJIMClient.shared.inputStatusEvents.stream() {
guard data.conversationID == currentConversationID else { continue }
self.showTypingIndicator = data.isTyping
}
}
4. 模块四:会话管理 (Conversation)
| 功能说明 | 原版 OpenIM (OIMManager / Go 导出函数) | QXJIMClient.shared (Swift API) |
|---|---|---|
| 获取全部会话列表 | getAllConversationList: / Open_im_sdkGetAllConversationList | func getAllConversationList() async throws -> [IMConversation] |
| 分页获取会话列表 | getConversationListSplit: / Open_im_sdkGetConversationListSplit | func getConversationListSplit(offset: Int, count: Int) async throws -> [IMConversation] |
| 获取或创建单个会话 | getOneConversationWithSessionType: / Open_im_sdkGetOneConversation | func getOneConversation(sessionType: IMSessionType, sourceID: String) async throws -> IMConversation |
| 批量获取多个会话 | getMultipleConversation: / Open_im_sdkGetMultipleConversation | func getMultipleConversation(conversationIDs: [String]) async throws -> [IMConversation] |
| 根据会话类型计算会话 ID | getConversationIDBySessionType: / Open_im_sdkGetConversationIDBySessionType | func getConversationIDBySessionType(sourceID: String, sessionType: IMSessionType) -> String |
| 综合设置会话属性 | setConversation:req: / Open_im_sdkSetConversation | func setConversation(conversationID: String, request: IMConversationSetRequest) async throws |
| 快捷设置会话置顶 | pinConversation: | func setConversationPinned(conversationID: String, isPinned: Bool) async throws |
| 快捷设置会话免打扰 | setConversationRecvMessageOpt: | func setConversationRecvMessageOpt(conversationID: String, opt: IMReceiveMessageOpt) async throws |
| 快捷设置阅后即焚(私聊) | setConversationPrivateChat: | func setConversationPrivateChat(conversationID: String, isPrivate: Bool, burnDuration: Int32?) async throws |
| 设置会话草稿 | setConversationDraft: / Open_im_sdkSetConversationDraft | func setConversationDraft(conversationID: String, draftText: String) async throws |
| 隐藏单个会话(不删消息) | hideConversation: / Open_im_sdkHideConversation | func hideConversation(conversationID: String) async throws |
| 隐藏所有会话 | hideAllConversations: / Open_im_sdkHideAllConversations | func hideAllConversations() async throws |
| 清空会话聊天记录 | clearConversationAndDeleteAllMsg: / Open_im_sdkClearConversationAndDeleteAllMsg | func clearConversationAndDeleteAllMsg(conversationID: String) async throws |
| 删除会话并清空聊天记录 | deleteConversationAndDeleteAllMsg: / Open_im_sdkDeleteConversationAndDeleteAllMsg | func deleteConversationAndDeleteAllMsg(conversationID: String) async throws |
| 获取未读消息总数 | getTotalUnreadMsgCount: / Open_im_sdkGetTotalUnreadMsgCount | func getTotalUnreadMsgCount() async throws -> Int32 |
| 标记会话已读 | markConversationMessageAsRead: / Open_im_sdkMarkConversationMessageAsRead | func markConversationMessageAsRead(conversationID: String) async throws |
| 标记所有会话已读 | markAllConversationMessageAsRead: / Open_im_sdkMarkAllConversationMessageAsRead | func markAllConversationMessageAsRead() async throws |
| 按消息 ID 列表标记已读 | markMessagesAsReadByMsgID: / Open_im_sdkMarkMessagesAsReadByMsgID | func markMessagesAsReadByMsgID(conversationID: String, clientMsgIDs: [String]) async throws |
| 搜索本地会话 | searchConversation: / Open_im_sdkSearchConversation | func searchConversation(searchParam: String) async throws -> [IMConversation] |
5. 模块五:消息创建与发送 (Message Creation & Sending)
| 功能说明 | 原版 OpenIM (OIMMessageInfo / Go 导出函数) | QXJIMClient.shared (Swift API) |
|---|---|---|
获取 @所有人 标识常量 | getAtAllTag / Open_im_sdkGetAtAllTag | var atAllTag: String |
| 创建纯文本消息 | createTextMessage: / Open_im_sdkCreateTextMessage | func createTextMessage(text: String) throws -> IMMessage |
| 创建富文本实体消息 | createAdvancedTextMessage: / Open_im_sdkCreateAdvancedTextMessage | func createAdvancedTextMessage(text: String, messageEntities: [IMMessageEntity]) throws -> IMMessage |
创建 @ 提醒消息 | createTextAtMessage: / Open_im_sdkCreateTextAtMessage | func createTextAtMessage(text: String, atUserIDs: [String], atUsersInfo: [IMAtInfo], quoteMessage: IMMessage?) throws -> IMMessage |
| 创建引用回复消息 | createQuoteMessage: / Open_im_sdkCreateQuoteMessage | func createQuoteMessage(text: String, quoteMessage: IMMessage) throws -> IMMessage |
| 创建富文本引用消息 | createAdvancedQuoteMessage: / Open_im_sdkCreateAdvancedQuoteMessage | func createAdvancedQuoteMessage(text: String, quoteMessage: IMMessage, messageEntities: [IMMessageEntity]) throws -> IMMessage |
| 创建图片消息(绝对路径,推荐) | createImageMessageFromFullPath: / Open_im_sdkCreateImageMessageFromFullPath | func createImageMessageFromFullPath(imageFullPath: String) throws -> IMMessage |
| 创建图片消息(相对 DataDir 路径) | createImageMessage: / Open_im_sdkCreateImageMessage | func createImageMessage(imagePath: String) throws -> IMMessage |
| 创建图片消息(外部直传 URL) | createImageMessageByURL: / Open_im_sdkCreateImageMessageByURL | func createImageMessageByURL(sourcePath: String, sourcePicture: IMPictureBaseInfo, bigPicture: IMPictureBaseInfo, snapshotPicture: IMPictureBaseInfo) throws -> IMMessage |
| 创建语音消息(绝对路径,推荐) | createSoundMessageFromFullPath: / Open_im_sdkCreateSoundMessageFromFullPath | func createSoundMessageFromFullPath(soundPath: String, duration: Int64) throws -> IMMessage |
| 创建语音消息(相对路径) | createSoundMessage: / Open_im_sdkCreateSoundMessage | func createSoundMessage(soundPath: String, duration: Int64) throws -> IMMessage |
| 创建语音消息(外部直传 URL) | createSoundMessageByURL: / Open_im_sdkCreateSoundMessageByURL | func createSoundMessageByURL(soundBaseInfo: IMSoundElem) throws -> IMMessage |
| 创建视频消息(绝对路径,推荐) | createVideoMessageFromFullPath: / Open_im_sdkCreateVideoMessageFromFullPath | func createVideoMessageFromFullPath(videoFullPath: String, videoType: String, duration: Int64, snapshotFullPath: String) throws -> IMMessage |
| 创建视频消息(相对路径) | createVideoMessage: / Open_im_sdkCreateVideoMessage | func createVideoMessage(videoPath: String, videoType: String, duration: Int64, snapshotPath: String) throws -> IMMessage |
| 创建视频消息(外部直传 URL) | createVideoMessageByURL: / Open_im_sdkCreateVideoMessageByURL | func createVideoMessageByURL(videoBaseInfo: IMVideoElem) throws -> IMMessage |
| 创建文件消息(绝对路径,推荐) | createFileMessageFromFullPath: / Open_im_sdkCreateFileMessageFromFullPath | func createFileMessageFromFullPath(fileFullPath: String, fileName: String) throws -> IMMessage |
| 创建文件消息(相对路径) | createFileMessage: / Open_im_sdkCreateFileMessage | func createFileMessage(filePath: String, fileName: String) throws -> IMMessage |
| 创建文件消息(外部直传 URL) | createFileMessageByURL: / Open_im_sdkCreateFileMessageByURL | func createFileMessageByURL(fileBaseInfo: IMFileElem) throws -> IMMessage |
| 创建地理位置消息 | createLocationMessage: / Open_im_sdkCreateLocationMessage | func createLocationMessage(description: String, longitude: Double, latitude: Double) throws -> IMMessage |
| 创建自定义消息 | createCustomMessage: / Open_im_sdkCreateCustomMessage | func createCustomMessage(data: String, extensionData: String, description: String) throws -> IMMessage |
| 创建名片消息 | createCardMessage: / Open_im_sdkCreateCardMessage | func createCardMessage(card: IMCardElem) throws -> IMMessage |
| 创建合并转发消息 | createMergerMessage: / Open_im_sdkCreateMergerMessage | func createMergerMessage(messages: [IMMessage], title: String, summaryList: [String]) throws -> IMMessage |
| 创建单条转发消息 | createForwardMessage: / Open_im_sdkCreateForwardMessage | func createForwardMessage(message: IMMessage) throws -> IMMessage |
| 创建表情消息 | createFaceMessage: / Open_im_sdkCreateFaceMessage | func createFaceMessage(index: Int, data: String) throws -> IMMessage |
| 发送消息(内置自动 OSS 上传与进度回调) | sendMessage: / Open_im_sdkSendMessage | func sendMessage(message: IMMessage, recvID: String, groupID: String, offlinePushInfo: IMOfflinePushInfo?, isOnlineOnly: Bool, onProgress: ((Int) -> Void)?) async throws -> IMMessage |
发送消息(不经过内置 OSS,配合 *ByURL 使用) | sendMessageNotOss: / Open_im_sdkSendMessageNotOss | func sendMessageNotOss(message: IMMessage, recvID: String, groupID: String, offlinePushInfo: IMOfflinePushInfo?, isOnlineOnly: Bool, onProgress: ((Int) -> Void)?) async throws -> IMMessage |
6. 模块六:历史消息、撤回、删除与本地搜索
| 功能说明 | 原版 OpenIM (OIMManager / Go 导出函数) | QXJIMClient.shared (Swift API) |
|---|---|---|
| 拉取历史消息(向前/旧消息方向分页) | getAdvancedHistoryMessageList: / Open_im_sdkGetAdvancedHistoryMessageList | func getAdvancedHistoryMessageList(params: IMHistoryMessageListParams) async throws -> IMHistoryMessageListResult |
| 拉取历史消息(向后/新消息方向分页) | getAdvancedHistoryMessageListReverse: / Open_im_sdkGetAdvancedHistoryMessageListReverse | func getAdvancedHistoryMessageListReverse(params: IMHistoryMessageListParams) async throws -> IMHistoryMessageListResult |
| 撤回消息(支持普通撤回与群主/管理员撤回) | revokeMessage: / Open_im_sdkRevokeMessage | func revokeMessage(conversationID: String, clientMsgID: String) async throws |
| 删除单条消息(本地+服务端同步删除) | deleteMessage: / Open_im_sdkDeleteMessage | func deleteMessage(conversationID: String, clientMsgID: String) async throws |
| 仅从本地数据库删除单条消息 | deleteMessageFromLocalStorage: / Open_im_sdkDeleteMessageFromLocalStorage | func deleteMessageFromLocalStorage(conversationID: String, clientMsgID: String) async throws |
| 清空本地所有消息 | deleteAllMsgFromLocal: / Open_im_sdkDeleteAllMsgFromLocal | func deleteAllMsgFromLocal() async throws |
| 清空本地与服务端所有消息 | deleteAllMsgFromLocalAndSvr: / Open_im_sdkDeleteAllMsgFromLocalAndSvr | func deleteAllMsgFromLocalAndServer() async throws |
| 插入单聊消息到本地存储 | insertSingleMessageToLocalStorage: / Open_im_sdkInsertSingleMessageToLocalStorage | func insertSingleMessageToLocalStorage(message: IMMessage, recvID: String, sendID: String) async throws -> IMMessage |
| 插入群聊消息到本地存储 | insertGroupMessageToLocalStorage: / Open_im_sdkInsertGroupMessageToLocalStorage | func insertGroupMessageToLocalStorage(message: IMMessage, groupID: String, sendID: String) async throws -> IMMessage |
| 按会话与消息 ID 精确查找消息 | findMessageList: / Open_im_sdkFindMessageList | func findMessageList(conversationsArgs: [IMConversationArgs]) async throws -> IMFindMessageListResult |
| 本地搜索消息(关键字/类型/发送者/时间段) | searchLocalMessages: / Open_im_sdkSearchLocalMessages | func searchLocalMessages(params: IMSearchLocalMessagesParams) async throws -> IMSearchLocalMessagesResult |
修改消息本地扩展字段 localEx | setMessageLocalEx: / Open_im_sdkSetMessageLocalEx | func setMessageLocalEx(conversationID: String, clientMsgID: String, localEx: String) async throws |
7. 模块七:群组与群成员管理 (Group)
| 功能说明 | 原版 OpenIM (OIMManager / Go 导出函数) | QXJIMClient.shared (Swift API) |
|---|---|---|
| 创建工作群 | createGroup: / Open_im_sdkCreateGroup | func createGroup(request: IMCreateGroupRequest) async throws -> IMGroupInfo |
| 申请加入群组 | joinGroup: / Open_im_sdkJoinGroup | func joinGroup(groupID: String, reqMsg: String, joinSource: IMJoinGroupSource, ex: String) async throws |
| 退出群组 | quitGroup: / Open_im_sdkQuitGroup | func quitGroup(groupID: String) async throws |
| 解散群组(仅群主) | dismissGroup: / Open_im_sdkDismissGroup | func dismissGroup(groupID: String) async throws |
| 开启/关闭全员禁言 | changeGroupMute: / Open_im_sdkChangeGroupMute | func changeGroupMute(groupID: String, isMute: Bool) async throws |
禁言/解禁指定群成员(mutedSeconds = 0 解禁) | changeGroupMemberMute: / Open_im_sdkChangeGroupMemberMute | func changeGroupMemberMute(groupID: String, userID: String, mutedSeconds: Int) async throws |
| 转让群主身份 | transferGroupOwner: / Open_im_sdkTransferGroupOwner | func transferGroupOwner(groupID: String, newOwnerUserID: String) async throws |
| 踢出群成员 | kickGroupMember: / Open_im_sdkKickGroupMember | func kickGroupMember(groupID: String, reason: String, userIDs: [String]) async throws |
| 修改群资料(群名/公告/头像/加群验证等) | setGroupInfo: / Open_im_sdkSetGroupInfo | func setGroupInfo(request: IMSetGroupInfoRequest) async throws |
| 修改群成员资料(群昵称/角色权限等) | setGroupMemberInfo: / Open_im_sdkSetGroupMemberInfo | func setGroupMemberInfo(request: IMSetGroupMemberInfoRequest) async throws |
| 获取已加入的所有群列表 | getJoinedGroupList: / Open_im_sdkGetJoinedGroupList | func getJoinedGroupList() async throws -> [IMGroupInfo] |
| 分页获取已加入的群列表 | getJoinedGroupListPage: / Open_im_sdkGetJoinedGroupListPage | func getJoinedGroupListPage(offset: Int32, count: Int32) async throws -> [IMGroupInfo] |
| 获取指定群 ID 列表的群信息 | getSpecifiedGroupsInfo: / Open_im_sdkGetSpecifiedGroupsInfo | func getSpecifiedGroupsInfo(groupIDs: [String]) async throws -> [IMGroupInfo] |
| 搜索本地群组 | searchGroups: / Open_im_sdkSearchGroups | func searchGroups(param: IMSearchGroupsParam) async throws -> [IMGroupInfo] |
| 分页获取群成员列表 | getGroupMemberList: / Open_im_sdkGetGroupMemberList | func getGroupMemberList(groupID: String, filter: IMGroupMemberFilter, offset: Int32, count: Int32) async throws -> [IMGroupMember] |
| 获取群主与管理员列表 | getGroupMemberOwnerAndAdmin: / Open_im_sdkGetGroupMemberOwnerAndAdmin | func getGroupMemberOwnerAndAdmin(groupID: String) async throws -> [IMGroupMember] |
| 按入群时间范围过滤获取群成员 | getGroupMemberListByJoinTimeFilter: / Open_im_sdkGetGroupMemberListByJoinTimeFilter | func getGroupMemberListByJoinTimeFilter(groupID: String, offset: Int32, count: Int32, joinTimeBegin: Int64, joinTimeEnd: Int64, filterUserIDs: [String]) async throws -> [IMGroupMember] |
| 获取指定群成员信息 | getSpecifiedGroupMembersInfo: / Open_im_sdkGetSpecifiedGroupMembersInfo | func getSpecifiedGroupMembersInfo(groupID: String, userIDs: [String]) async throws -> [IMGroupMember] |
| 搜索群成员 | searchGroupMembers: / Open_im_sdkSearchGroupMembers | func searchGroupMembers(param: IMSearchGroupMembersParam) async throws -> [IMGroupMember] |
| 邀请用户入群 | inviteUserToGroup: / Open_im_sdkInviteUserToGroup | func inviteUserToGroup(groupID: String, reason: String, userIDs: [String]) async throws |
| 判断当前用户是否已加入某群 | isJoinGroup: / Open_im_sdkIsJoinGroup | func isJoinGroup(groupID: String) async throws -> Bool |
| 查询指定用户列表中哪些人在该群内 | getUsersInGroup: / Open_im_sdkGetUsersInGroup | func getUsersInGroup(groupID: String, userIDs: [String]) async throws -> [String] |
| 获取收到的入群申请列表(群主/管理员视角) | getGroupApplicationListAsRecipient: / Open_im_sdkGetGroupApplicationListAsRecipient | func getGroupApplicationListAsRecipient() async throws -> [IMGroupApplication] |
| 获取发出的入群申请列表(申请人视角) | getGroupApplicationListAsApplicant: / Open_im_sdkGetGroupApplicationListAsApplicant | func getGroupApplicationListAsApplicant() async throws -> [IMGroupApplication] |
| 同意入群申请 | acceptGroupApplication: / Open_im_sdkAcceptGroupApplication | func acceptGroupApplication(groupID: String, fromUserID: String, handleMsg: String) async throws |
| 拒绝入群申请 | refuseGroupApplication: / Open_im_sdkRefuseGroupApplication | func refuseGroupApplication(groupID: String, fromUserID: String, handleMsg: String) async throws |
8. 模块八:好友关系与黑名单 (Friendship & Blacklist)
| 功能说明 | 原版 OpenIM (OIMManager / Go 导出函数) | QXJIMClient.shared (Swift API) |
|---|---|---|
| 获取全部好友列表 | getFriendList: / Open_im_sdkGetFriendList | func getFriendList(filterBlack: Bool) async throws -> [IMFriendInfo] |
| 分页获取好友列表 | getFriendListPage: / Open_im_sdkGetFriendListPage | func getFriendListPage(offset: Int32, count: Int32, filterBlack: Bool) async throws -> [IMFriendInfo] |
| 获取指定好友资料 | getSpecifiedFriendsInfo: / Open_im_sdkGetSpecifiedFriendsInfo | func getSpecifiedFriendsInfo(userIDs: [String], filterBlack: Bool) async throws -> [IMFriendInfo] |
| 搜索好友(按昵称/备注/ID) | searchFriends: / Open_im_sdkSearchFriends | func searchFriends(param: IMSearchFriendsParam) async throws -> [IMSearchFriendItem] |
| 批量检验是否为双向好友 | checkFriend: / Open_im_sdkCheckFriend | func checkFriend(userIDs: [String]) async throws -> [IMCheckFriendResult] |
| 发起添加好友申请 | addFriend: / Open_im_sdkAddFriend | func addFriend(request: IMAddFriendRequest) async throws |
| 批量更新好友属性(备注/置顶/扩展字段) | updateFriends: / Open_im_sdkUpdateFriends | func updateFriends(request: IMUpdateFriendsRequest) async throws |
| 快捷修改好友备注 | setFriendRemark: | func setFriendRemark(userID: String, remark: String) async throws |
| 快捷设置好友星标/置顶 | pinFriends: | func setFriendsPinned(userIDs: [String], isPinned: Bool) async throws |
| 删除好友 | deleteFriend: / Open_im_sdkDeleteFriend | func deleteFriend(friendUserID: String) async throws |
| 获取收到的好友申请列表 | getFriendApplicationListAsRecipient: / Open_im_sdkGetFriendApplicationListAsRecipient | func getFriendApplicationListAsRecipient() async throws -> [IMFriendApplication] |
| 获取发出的好友申请列表 | getFriendApplicationListAsApplicant: / Open_im_sdkGetFriendApplicationListAsApplicant | func getFriendApplicationListAsApplicant() async throws -> [IMFriendApplication] |
| 同意好友申请 | acceptFriendApplication: / Open_im_sdkAcceptFriendApplication | func acceptFriendApplication(toUserID: String, handleMsg: String) async throws |
| 拒绝好友申请 | refuseFriendApplication: / Open_im_sdkRefuseFriendApplication | func refuseFriendApplication(toUserID: String, handleMsg: String) async throws |
| 拉黑用户 | addBlack: / Open_im_sdkAddBlack | func addBlack(blackUserID: String, ex: String) async throws |
| 获取黑名单列表 | getBlackList: / Open_im_sdkGetBlackList | func getBlackList() async throws -> [IMBlackUserInfo] |
| 移除黑名单 | removeBlack: / Open_im_sdkRemoveBlack | func removeBlack(removeUserID: String) async throws |
9. 模块九:个人资料、收藏指令、文件上传与推送角标
| 功能说明 | 原版 OpenIM (OIMManager / Go 导出函数) | QXJIMClient.shared (Swift API) |
|---|---|---|
| 批量查询用户公开资料(带本地缓存自动更新) | getUsersInfo: / Open_im_sdkGetUsersInfo | func getUsersInfo(userIDs: [String]) async throws -> [IMPublicUser] |
| 获取当前登录用户个人资料 | getSelfUserInfo: / Open_im_sdkGetSelfUserInfo | func getSelfUserInfo() async throws -> IMUserProfile |
| 修改当前登录用户个人资料 | setSelfInfo: / Open_im_sdkSetSelfInfo | func setSelfInfo(request: IMSelfInfoUpdateRequest) async throws |
| 添加用户快捷指令/收藏 | addUserCommand: / Open_im_sdkAddUserCommand | func addUserCommand(type: Int32, uuid: String, value: String) async throws |
| 删除用户快捷指令/收藏 | deleteUserCommand: / Open_im_sdkDeleteUserCommand | func deleteUserCommand(type: Int32, uuid: String) async throws |
| 获取全部用户快捷指令/收藏 | getAllUserCommands: / Open_im_sdkGetAllUserCommands | func getAllUserCommands(type: Int32) async throws -> [IMUserCommand] |
| 分片上传独立文件(带 Hash/分片进度回调) | uploadFile: / Open_im_sdkUploadFile | func uploadFile(request: IMUploadFileRequest, onProgress: ((IMUploadProgressEvent) -> Void)?) async throws -> IMUploadFileResponse |
| 上报 APNs / FCM 推送 Token | updateFcmToken: / Open_im_sdkUpdateFcmToken | func updatePushToken(token: String, expireTime: Int64) async throws |
| 同步服务端 App 未读角标数 | setAppBadge: / Open_im_sdkSetAppBadge | func setAppBadge(unreadCount: Int32) async throws |
| 上传客户端本地 SDK 日志文件 | uploadLogs: / Open_im_sdkUploadLogs | func uploadLogs(line: Int, ex: String, onProgress: ((Int64, Int64) -> Void)?) async throws |
| 写入自定义日志到 SDK 日志文件 | logs: / Open_im_sdkLogs | func logs(logLevel: Int, file: String, line: Int, msgs: String, err: String, keyAndValue: String) async throws |
10. 模块十:7 大实时事件流 (AsyncStream) 对照表
在 QXJIMClient.shared 中,所有底层 Listener 均已自动挂载并转化为线程安全的多播流(IMEventBroadcaster),您可以在任意 Task 中通过 for await event in ... 监听,Task 取消时自动解除订阅:
| 事件分类 | 原版 Objective-C 协议 | QXJIMClient.shared 多播流属性 | 包含的枚举事件 (Swift Enum) |
|---|---|---|---|
| 连接与鉴权状态 | Open_im_sdk_callbackOnConnListener | connectionEvents.stream() | .connecting.connected.connectFailed(IMError).kickedOffline.userTokenExpired.userTokenInvalid(reason:) |
| 会话与同步进度 | Open_im_sdk_callbackOnConversationListener | conversationEvents.stream() | .syncServerStart(reinstalled:).syncServerProgress(progress:).syncServerFinish(reinstalled:).syncServerFailed(reinstalled:).newConversations([IMConversation]).conversationsChanged([IMConversation]).totalUnreadCountChanged(Int32).userInputStatusChanged(IMInputStatusChangedData) |
| 对方正在输入 (专项流) | onConversationUserInputStatusChanged: | inputStatusEvents.stream() | 直接产出 IMInputStatusChangedData(含 conversationID、userID、isTyping、activePlatforms) |
| 消息、已读回执与撤回 | Open_im_sdk_callbackOnAdvancedMsgListener | messageEvents.stream() | .receivedNewMessage(IMMessage).receivedOfflineNewMessage(IMMessage).receivedOnlineOnlyMessage(IMMessage).c2cReadReceipts([IMMessageReceipt]).messageRevoked(IMMessageRevoked).messageDeleted(IMMessage) |
| 群组与群成员变更 | Open_im_sdk_callbackOnGroupListener | groupEvents.stream() | .joinedGroupAdded(IMGroupInfo).joinedGroupDeleted(IMGroupInfo).groupMemberAdded(IMGroupMember).groupMemberDeleted(IMGroupMember).groupMemberInfoChanged(IMGroupMember).groupInfoChanged(IMGroupInfo).groupDismissed(IMGroupInfo).groupApplicationAdded(IMGroupApplication).groupApplicationDeleted(IMGroupApplication).groupApplicationAccepted(IMGroupApplication).groupApplicationRejected(IMGroupApplication) |
| 好友与黑名单变更 | Open_im_sdk_callbackOnFriendshipListener | friendshipEvents.stream() | .friendApplicationAdded(IMFriendApplication).friendApplicationDeleted(IMFriendApplication).friendApplicationAccepted(IMFriendApplication).friendApplicationRejected(IMFriendApplication).friendAdded(IMFriendInfo).friendDeleted(IMFriendInfo).friendInfoChanged(IMFriendInfo).blackAdded(IMBlackUserInfo).blackDeleted(IMBlackUserInfo) |
| 个人资料与在线状态 | Open_im_sdk_callbackOnUserListener | userEvents.stream() | .selfInfoUpdated(IMUserProfile).userStatusChanged(IMUserOnlineStatus).userCommandAdded(rawJSON:).userCommandDeleted(rawJSON:).userCommandUpdated(rawJSON:) |
| 用户在线状态 (专项流) | onUserStatusChanged: | userStatusEvents.stream() | 直接产出 IMUserOnlineStatus(含 userID、isOnline、onlinePlatforms) |
| 自定义业务通知 | Open_im_sdk_callbackOnCustomBusinessListener | customBusinessEvents.stream() | 直接产出业务 JSON 字符串 String |