跳到主要内容

QXJIMSDK (iOS Pure-Swift) 功能清单与 API 完整参考手册

本文档提供 QXJIMSDK 的完整 API 参考,以及与原版 OpenIM SDK (OIMManager / Open_im_sdk*) 的 1:1 接口映射对照表。

结论先行:QXJIMSDK 在功能上与 OpenIM 官方 v3.8.3-patch.3 SDK 100% 完全一致(涵盖底层 Open_im_sdk.objc.h 导出的全部函数与监听协议),同时将调用方式升级为现代 Swift async throws 与 AsyncStream,并内置断线重连后自动恢复用户在线状态订阅的增强逻辑。


目录​

  1. 模块一:SDK 初始化、登录与生命周期
  2. 模块二:用户在线状态订阅 (Presence)
  3. 模块三:“对方正在输入”状态 (Typing)
  4. 模块四:会话管理 (Conversation)
  5. 模块五:消息创建与发送 (Message Creation & Sending)
  6. 模块六:历史消息、撤回、删除与本地搜索
  7. 模块七:群组与群成员管理 (Group)
  8. 模块八:好友关系与黑名单 (Friendship & Blacklist)
  9. 模块九:个人资料、收藏指令、文件上传与推送角标
  10. 模块十:7 大实时事件流 (AsyncStream) 对照表

1. 模块一:SDK 初始化、登录与生命周期​

功能说明原版 OpenIM (OIMManager / Go 导出函数)QXJIMClient.shared (Swift API)
获取 SDK 版本号getSdkVersion / Open_im_sdkGetSdkVersionvar sdkVersion: String
获取当前登录状态getLoginStatus / Open_im_sdkGetLoginStatusvar loginStatus: IMLoginStatus
获取当前登录用户 IDgetLoginUserID / Open_im_sdkGetLoginUserIDvar loginUserID: String
初始化 SDK 并注册监听initSDKWithConfig: / Open_im_sdkInitSDKfunc initSDK(config: IMConfig) throws -> Bool
反初始化 SDKunInitSDK / Open_im_sdkUnInitSDKfunc unInitSDK()
登录账号login:token: / Open_im_sdkLoginfunc login(userID: String, token: String) async throws
退出登录logoutWithOnSuccess: / Open_im_sdkLogoutfunc logout() async throws
设置前后台状态setAppBackgroundStatus: / Open_im_sdkSetAppBackgroundStatusfunc setAppBackgroundStatus(isBackground: Bool) async throws
网络状态变更通知重连networkStatusChanged: / Open_im_sdkNetworkStatusChangedfunc 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_sdkSubscribeUsersStatusfunc subscribeUsersStatus(userIDs: [String]) async throws -> [IMUserOnlineStatus]
取消订阅用户在线状态unsubscribeUsersStatus: / Open_im_sdkUnsubscribeUsersStatusfunc unsubscribeUsersStatus(userIDs: [String]) async throws
获取所有已订阅用户的在线状态getSubscribeUsersStatus: / Open_im_sdkGetSubscribeUsersStatusfunc getSubscribeUsersStatus() async throws -> [IMUserOnlineStatus]
查询指定用户在线状态(一次性)getUserStatus: / Open_im_sdkGetUserStatusfunc 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_sdkChangeInputStatesfunc changeInputStates(conversationID: String, focus: Bool) async throws
查询指定会话中某用户正在输入的平台列表getInputStates:userID: / Open_im_sdkGetInputStatesfunc getInputStates(conversationID: String, userID: String) async throws -> [IMPlatform]
实时监听“对方正在输入”状态变化onConversationUserInputStatusChanged:inputStatusEvents.stream() (AsyncStream<IMInputStatusChangedData>)
旧版单聊输入提示接口(兼容保留)typingStatusUpdate:msgTip: / Open_im_sdkTypingStatusUpdatefunc 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_sdkGetAllConversationListfunc getAllConversationList() async throws -> [IMConversation]
分页获取会话列表getConversationListSplit: / Open_im_sdkGetConversationListSplitfunc getConversationListSplit(offset: Int, count: Int) async throws -> [IMConversation]
获取或创建单个会话getOneConversationWithSessionType: / Open_im_sdkGetOneConversationfunc getOneConversation(sessionType: IMSessionType, sourceID: String) async throws -> IMConversation
批量获取多个会话getMultipleConversation: / Open_im_sdkGetMultipleConversationfunc getMultipleConversation(conversationIDs: [String]) async throws -> [IMConversation]
根据会话类型计算会话 IDgetConversationIDBySessionType: / Open_im_sdkGetConversationIDBySessionTypefunc getConversationIDBySessionType(sourceID: String, sessionType: IMSessionType) -> String
综合设置会话属性setConversation:req: / Open_im_sdkSetConversationfunc 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_sdkSetConversationDraftfunc setConversationDraft(conversationID: String, draftText: String) async throws
隐藏单个会话(不删消息)hideConversation: / Open_im_sdkHideConversationfunc hideConversation(conversationID: String) async throws
隐藏所有会话hideAllConversations: / Open_im_sdkHideAllConversationsfunc hideAllConversations() async throws
清空会话聊天记录clearConversationAndDeleteAllMsg: / Open_im_sdkClearConversationAndDeleteAllMsgfunc clearConversationAndDeleteAllMsg(conversationID: String) async throws
删除会话并清空聊天记录deleteConversationAndDeleteAllMsg: / Open_im_sdkDeleteConversationAndDeleteAllMsgfunc deleteConversationAndDeleteAllMsg(conversationID: String) async throws
获取未读消息总数getTotalUnreadMsgCount: / Open_im_sdkGetTotalUnreadMsgCountfunc getTotalUnreadMsgCount() async throws -> Int32
标记会话已读markConversationMessageAsRead: / Open_im_sdkMarkConversationMessageAsReadfunc markConversationMessageAsRead(conversationID: String) async throws
标记所有会话已读markAllConversationMessageAsRead: / Open_im_sdkMarkAllConversationMessageAsReadfunc markAllConversationMessageAsRead() async throws
按消息 ID 列表标记已读markMessagesAsReadByMsgID: / Open_im_sdkMarkMessagesAsReadByMsgIDfunc markMessagesAsReadByMsgID(conversationID: String, clientMsgIDs: [String]) async throws
搜索本地会话searchConversation: / Open_im_sdkSearchConversationfunc searchConversation(searchParam: String) async throws -> [IMConversation]

5. 模块五:消息创建与发送 (Message Creation & Sending)​

功能说明原版 OpenIM (OIMMessageInfo / Go 导出函数)QXJIMClient.shared (Swift API)
获取 @所有人 标识常量getAtAllTag / Open_im_sdkGetAtAllTagvar atAllTag: String
创建纯文本消息createTextMessage: / Open_im_sdkCreateTextMessagefunc createTextMessage(text: String) throws -> IMMessage
创建富文本实体消息createAdvancedTextMessage: / Open_im_sdkCreateAdvancedTextMessagefunc createAdvancedTextMessage(text: String, messageEntities: [IMMessageEntity]) throws -> IMMessage
创建 @ 提醒消息createTextAtMessage: / Open_im_sdkCreateTextAtMessagefunc createTextAtMessage(text: String, atUserIDs: [String], atUsersInfo: [IMAtInfo], quoteMessage: IMMessage?) throws -> IMMessage
创建引用回复消息createQuoteMessage: / Open_im_sdkCreateQuoteMessagefunc createQuoteMessage(text: String, quoteMessage: IMMessage) throws -> IMMessage
创建富文本引用消息createAdvancedQuoteMessage: / Open_im_sdkCreateAdvancedQuoteMessagefunc createAdvancedQuoteMessage(text: String, quoteMessage: IMMessage, messageEntities: [IMMessageEntity]) throws -> IMMessage
创建图片消息(绝对路径,推荐)createImageMessageFromFullPath: / Open_im_sdkCreateImageMessageFromFullPathfunc createImageMessageFromFullPath(imageFullPath: String) throws -> IMMessage
创建图片消息(相对 DataDir 路径)createImageMessage: / Open_im_sdkCreateImageMessagefunc createImageMessage(imagePath: String) throws -> IMMessage
创建图片消息(外部直传 URL)createImageMessageByURL: / Open_im_sdkCreateImageMessageByURLfunc createImageMessageByURL(sourcePath: String, sourcePicture: IMPictureBaseInfo, bigPicture: IMPictureBaseInfo, snapshotPicture: IMPictureBaseInfo) throws -> IMMessage
创建语音消息(绝对路径,推荐)createSoundMessageFromFullPath: / Open_im_sdkCreateSoundMessageFromFullPathfunc createSoundMessageFromFullPath(soundPath: String, duration: Int64) throws -> IMMessage
创建语音消息(相对路径)createSoundMessage: / Open_im_sdkCreateSoundMessagefunc createSoundMessage(soundPath: String, duration: Int64) throws -> IMMessage
创建语音消息(外部直传 URL)createSoundMessageByURL: / Open_im_sdkCreateSoundMessageByURLfunc createSoundMessageByURL(soundBaseInfo: IMSoundElem) throws -> IMMessage
创建视频消息(绝对路径,推荐)createVideoMessageFromFullPath: / Open_im_sdkCreateVideoMessageFromFullPathfunc createVideoMessageFromFullPath(videoFullPath: String, videoType: String, duration: Int64, snapshotFullPath: String) throws -> IMMessage
创建视频消息(相对路径)createVideoMessage: / Open_im_sdkCreateVideoMessagefunc createVideoMessage(videoPath: String, videoType: String, duration: Int64, snapshotPath: String) throws -> IMMessage
创建视频消息(外部直传 URL)createVideoMessageByURL: / Open_im_sdkCreateVideoMessageByURLfunc createVideoMessageByURL(videoBaseInfo: IMVideoElem) throws -> IMMessage
创建文件消息(绝对路径,推荐)createFileMessageFromFullPath: / Open_im_sdkCreateFileMessageFromFullPathfunc createFileMessageFromFullPath(fileFullPath: String, fileName: String) throws -> IMMessage
创建文件消息(相对路径)createFileMessage: / Open_im_sdkCreateFileMessagefunc createFileMessage(filePath: String, fileName: String) throws -> IMMessage
创建文件消息(外部直传 URL)createFileMessageByURL: / Open_im_sdkCreateFileMessageByURLfunc createFileMessageByURL(fileBaseInfo: IMFileElem) throws -> IMMessage
创建地理位置消息createLocationMessage: / Open_im_sdkCreateLocationMessagefunc createLocationMessage(description: String, longitude: Double, latitude: Double) throws -> IMMessage
创建自定义消息createCustomMessage: / Open_im_sdkCreateCustomMessagefunc createCustomMessage(data: String, extensionData: String, description: String) throws -> IMMessage
创建名片消息createCardMessage: / Open_im_sdkCreateCardMessagefunc createCardMessage(card: IMCardElem) throws -> IMMessage
创建合并转发消息createMergerMessage: / Open_im_sdkCreateMergerMessagefunc createMergerMessage(messages: [IMMessage], title: String, summaryList: [String]) throws -> IMMessage
创建单条转发消息createForwardMessage: / Open_im_sdkCreateForwardMessagefunc createForwardMessage(message: IMMessage) throws -> IMMessage
创建表情消息createFaceMessage: / Open_im_sdkCreateFaceMessagefunc createFaceMessage(index: Int, data: String) throws -> IMMessage
发送消息(内置自动 OSS 上传与进度回调)sendMessage: / Open_im_sdkSendMessagefunc sendMessage(message: IMMessage, recvID: String, groupID: String, offlinePushInfo: IMOfflinePushInfo?, isOnlineOnly: Bool, onProgress: ((Int) -> Void)?) async throws -> IMMessage
发送消息(不经过内置 OSS,配合 *ByURL 使用)sendMessageNotOss: / Open_im_sdkSendMessageNotOssfunc 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_sdkGetAdvancedHistoryMessageListfunc getAdvancedHistoryMessageList(params: IMHistoryMessageListParams) async throws -> IMHistoryMessageListResult
拉取历史消息(向后/新消息方向分页)getAdvancedHistoryMessageListReverse: / Open_im_sdkGetAdvancedHistoryMessageListReversefunc getAdvancedHistoryMessageListReverse(params: IMHistoryMessageListParams) async throws -> IMHistoryMessageListResult
撤回消息(支持普通撤回与群主/管理员撤回)revokeMessage: / Open_im_sdkRevokeMessagefunc revokeMessage(conversationID: String, clientMsgID: String) async throws
删除单条消息(本地+服务端同步删除)deleteMessage: / Open_im_sdkDeleteMessagefunc deleteMessage(conversationID: String, clientMsgID: String) async throws
仅从本地数据库删除单条消息deleteMessageFromLocalStorage: / Open_im_sdkDeleteMessageFromLocalStoragefunc deleteMessageFromLocalStorage(conversationID: String, clientMsgID: String) async throws
清空本地所有消息deleteAllMsgFromLocal: / Open_im_sdkDeleteAllMsgFromLocalfunc deleteAllMsgFromLocal() async throws
清空本地与服务端所有消息deleteAllMsgFromLocalAndSvr: / Open_im_sdkDeleteAllMsgFromLocalAndSvrfunc deleteAllMsgFromLocalAndServer() async throws
插入单聊消息到本地存储insertSingleMessageToLocalStorage: / Open_im_sdkInsertSingleMessageToLocalStoragefunc insertSingleMessageToLocalStorage(message: IMMessage, recvID: String, sendID: String) async throws -> IMMessage
插入群聊消息到本地存储insertGroupMessageToLocalStorage: / Open_im_sdkInsertGroupMessageToLocalStoragefunc insertGroupMessageToLocalStorage(message: IMMessage, groupID: String, sendID: String) async throws -> IMMessage
按会话与消息 ID 精确查找消息findMessageList: / Open_im_sdkFindMessageListfunc findMessageList(conversationsArgs: [IMConversationArgs]) async throws -> IMFindMessageListResult
本地搜索消息(关键字/类型/发送者/时间段)searchLocalMessages: / Open_im_sdkSearchLocalMessagesfunc searchLocalMessages(params: IMSearchLocalMessagesParams) async throws -> IMSearchLocalMessagesResult
修改消息本地扩展字段 localExsetMessageLocalEx: / Open_im_sdkSetMessageLocalExfunc setMessageLocalEx(conversationID: String, clientMsgID: String, localEx: String) async throws

7. 模块七:群组与群成员管理 (Group)​

功能说明原版 OpenIM (OIMManager / Go 导出函数)QXJIMClient.shared (Swift API)
创建工作群createGroup: / Open_im_sdkCreateGroupfunc createGroup(request: IMCreateGroupRequest) async throws -> IMGroupInfo
申请加入群组joinGroup: / Open_im_sdkJoinGroupfunc joinGroup(groupID: String, reqMsg: String, joinSource: IMJoinGroupSource, ex: String) async throws
退出群组quitGroup: / Open_im_sdkQuitGroupfunc quitGroup(groupID: String) async throws
解散群组(仅群主)dismissGroup: / Open_im_sdkDismissGroupfunc dismissGroup(groupID: String) async throws
开启/关闭全员禁言changeGroupMute: / Open_im_sdkChangeGroupMutefunc changeGroupMute(groupID: String, isMute: Bool) async throws
禁言/解禁指定群成员(mutedSeconds = 0 解禁)changeGroupMemberMute: / Open_im_sdkChangeGroupMemberMutefunc changeGroupMemberMute(groupID: String, userID: String, mutedSeconds: Int) async throws
转让群主身份transferGroupOwner: / Open_im_sdkTransferGroupOwnerfunc transferGroupOwner(groupID: String, newOwnerUserID: String) async throws
踢出群成员kickGroupMember: / Open_im_sdkKickGroupMemberfunc kickGroupMember(groupID: String, reason: String, userIDs: [String]) async throws
修改群资料(群名/公告/头像/加群验证等)setGroupInfo: / Open_im_sdkSetGroupInfofunc setGroupInfo(request: IMSetGroupInfoRequest) async throws
修改群成员资料(群昵称/角色权限等)setGroupMemberInfo: / Open_im_sdkSetGroupMemberInfofunc setGroupMemberInfo(request: IMSetGroupMemberInfoRequest) async throws
获取已加入的所有群列表getJoinedGroupList: / Open_im_sdkGetJoinedGroupListfunc getJoinedGroupList() async throws -> [IMGroupInfo]
分页获取已加入的群列表getJoinedGroupListPage: / Open_im_sdkGetJoinedGroupListPagefunc getJoinedGroupListPage(offset: Int32, count: Int32) async throws -> [IMGroupInfo]
获取指定群 ID 列表的群信息getSpecifiedGroupsInfo: / Open_im_sdkGetSpecifiedGroupsInfofunc getSpecifiedGroupsInfo(groupIDs: [String]) async throws -> [IMGroupInfo]
搜索本地群组searchGroups: / Open_im_sdkSearchGroupsfunc searchGroups(param: IMSearchGroupsParam) async throws -> [IMGroupInfo]
分页获取群成员列表getGroupMemberList: / Open_im_sdkGetGroupMemberListfunc getGroupMemberList(groupID: String, filter: IMGroupMemberFilter, offset: Int32, count: Int32) async throws -> [IMGroupMember]
获取群主与管理员列表getGroupMemberOwnerAndAdmin: / Open_im_sdkGetGroupMemberOwnerAndAdminfunc getGroupMemberOwnerAndAdmin(groupID: String) async throws -> [IMGroupMember]
按入群时间范围过滤获取群成员getGroupMemberListByJoinTimeFilter: / Open_im_sdkGetGroupMemberListByJoinTimeFilterfunc getGroupMemberListByJoinTimeFilter(groupID: String, offset: Int32, count: Int32, joinTimeBegin: Int64, joinTimeEnd: Int64, filterUserIDs: [String]) async throws -> [IMGroupMember]
获取指定群成员信息getSpecifiedGroupMembersInfo: / Open_im_sdkGetSpecifiedGroupMembersInfofunc getSpecifiedGroupMembersInfo(groupID: String, userIDs: [String]) async throws -> [IMGroupMember]
搜索群成员searchGroupMembers: / Open_im_sdkSearchGroupMembersfunc searchGroupMembers(param: IMSearchGroupMembersParam) async throws -> [IMGroupMember]
邀请用户入群inviteUserToGroup: / Open_im_sdkInviteUserToGroupfunc inviteUserToGroup(groupID: String, reason: String, userIDs: [String]) async throws
判断当前用户是否已加入某群isJoinGroup: / Open_im_sdkIsJoinGroupfunc isJoinGroup(groupID: String) async throws -> Bool
查询指定用户列表中哪些人在该群内getUsersInGroup: / Open_im_sdkGetUsersInGroupfunc getUsersInGroup(groupID: String, userIDs: [String]) async throws -> [String]
获取收到的入群申请列表(群主/管理员视角)getGroupApplicationListAsRecipient: / Open_im_sdkGetGroupApplicationListAsRecipientfunc getGroupApplicationListAsRecipient() async throws -> [IMGroupApplication]
获取发出的入群申请列表(申请人视角)getGroupApplicationListAsApplicant: / Open_im_sdkGetGroupApplicationListAsApplicantfunc getGroupApplicationListAsApplicant() async throws -> [IMGroupApplication]
同意入群申请acceptGroupApplication: / Open_im_sdkAcceptGroupApplicationfunc acceptGroupApplication(groupID: String, fromUserID: String, handleMsg: String) async throws
拒绝入群申请refuseGroupApplication: / Open_im_sdkRefuseGroupApplicationfunc refuseGroupApplication(groupID: String, fromUserID: String, handleMsg: String) async throws

8. 模块八:好友关系与黑名单 (Friendship & Blacklist)​

功能说明原版 OpenIM (OIMManager / Go 导出函数)QXJIMClient.shared (Swift API)
获取全部好友列表getFriendList: / Open_im_sdkGetFriendListfunc getFriendList(filterBlack: Bool) async throws -> [IMFriendInfo]
分页获取好友列表getFriendListPage: / Open_im_sdkGetFriendListPagefunc getFriendListPage(offset: Int32, count: Int32, filterBlack: Bool) async throws -> [IMFriendInfo]
获取指定好友资料getSpecifiedFriendsInfo: / Open_im_sdkGetSpecifiedFriendsInfofunc getSpecifiedFriendsInfo(userIDs: [String], filterBlack: Bool) async throws -> [IMFriendInfo]
搜索好友(按昵称/备注/ID)searchFriends: / Open_im_sdkSearchFriendsfunc searchFriends(param: IMSearchFriendsParam) async throws -> [IMSearchFriendItem]
批量检验是否为双向好友checkFriend: / Open_im_sdkCheckFriendfunc checkFriend(userIDs: [String]) async throws -> [IMCheckFriendResult]
发起添加好友申请addFriend: / Open_im_sdkAddFriendfunc addFriend(request: IMAddFriendRequest) async throws
批量更新好友属性(备注/置顶/扩展字段)updateFriends: / Open_im_sdkUpdateFriendsfunc 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_sdkDeleteFriendfunc deleteFriend(friendUserID: String) async throws
获取收到的好友申请列表getFriendApplicationListAsRecipient: / Open_im_sdkGetFriendApplicationListAsRecipientfunc getFriendApplicationListAsRecipient() async throws -> [IMFriendApplication]
获取发出的好友申请列表getFriendApplicationListAsApplicant: / Open_im_sdkGetFriendApplicationListAsApplicantfunc getFriendApplicationListAsApplicant() async throws -> [IMFriendApplication]
同意好友申请acceptFriendApplication: / Open_im_sdkAcceptFriendApplicationfunc acceptFriendApplication(toUserID: String, handleMsg: String) async throws
拒绝好友申请refuseFriendApplication: / Open_im_sdkRefuseFriendApplicationfunc refuseFriendApplication(toUserID: String, handleMsg: String) async throws
拉黑用户addBlack: / Open_im_sdkAddBlackfunc addBlack(blackUserID: String, ex: String) async throws
获取黑名单列表getBlackList: / Open_im_sdkGetBlackListfunc getBlackList() async throws -> [IMBlackUserInfo]
移除黑名单removeBlack: / Open_im_sdkRemoveBlackfunc removeBlack(removeUserID: String) async throws

9. 模块九:个人资料、收藏指令、文件上传与推送角标​

功能说明原版 OpenIM (OIMManager / Go 导出函数)QXJIMClient.shared (Swift API)
批量查询用户公开资料(带本地缓存自动更新)getUsersInfo: / Open_im_sdkGetUsersInfofunc getUsersInfo(userIDs: [String]) async throws -> [IMPublicUser]
获取当前登录用户个人资料getSelfUserInfo: / Open_im_sdkGetSelfUserInfofunc getSelfUserInfo() async throws -> IMUserProfile
修改当前登录用户个人资料setSelfInfo: / Open_im_sdkSetSelfInfofunc setSelfInfo(request: IMSelfInfoUpdateRequest) async throws
添加用户快捷指令/收藏addUserCommand: / Open_im_sdkAddUserCommandfunc addUserCommand(type: Int32, uuid: String, value: String) async throws
删除用户快捷指令/收藏deleteUserCommand: / Open_im_sdkDeleteUserCommandfunc deleteUserCommand(type: Int32, uuid: String) async throws
获取全部用户快捷指令/收藏getAllUserCommands: / Open_im_sdkGetAllUserCommandsfunc getAllUserCommands(type: Int32) async throws -> [IMUserCommand]
分片上传独立文件(带 Hash/分片进度回调)uploadFile: / Open_im_sdkUploadFilefunc uploadFile(request: IMUploadFileRequest, onProgress: ((IMUploadProgressEvent) -> Void)?) async throws -> IMUploadFileResponse
上报 APNs / FCM 推送 TokenupdateFcmToken: / Open_im_sdkUpdateFcmTokenfunc updatePushToken(token: String, expireTime: Int64) async throws
同步服务端 App 未读角标数setAppBadge: / Open_im_sdkSetAppBadgefunc setAppBadge(unreadCount: Int32) async throws
上传客户端本地 SDK 日志文件uploadLogs: / Open_im_sdkUploadLogsfunc uploadLogs(line: Int, ex: String, onProgress: ((Int64, Int64) -> Void)?) async throws
写入自定义日志到 SDK 日志文件logs: / Open_im_sdkLogsfunc 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_callbackOnConnListenerconnectionEvents.stream().connecting
.connected
.connectFailed(IMError)
.kickedOffline
.userTokenExpired
.userTokenInvalid(reason:)
会话与同步进度Open_im_sdk_callbackOnConversationListenerconversationEvents.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_callbackOnAdvancedMsgListenermessageEvents.stream().receivedNewMessage(IMMessage)
.receivedOfflineNewMessage(IMMessage)
.receivedOnlineOnlyMessage(IMMessage)
.c2cReadReceipts([IMMessageReceipt])
.messageRevoked(IMMessageRevoked)
.messageDeleted(IMMessage)
群组与群成员变更Open_im_sdk_callbackOnGroupListenergroupEvents.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_callbackOnFriendshipListenerfriendshipEvents.stream().friendApplicationAdded(IMFriendApplication)
.friendApplicationDeleted(IMFriendApplication)
.friendApplicationAccepted(IMFriendApplication)
.friendApplicationRejected(IMFriendApplication)
.friendAdded(IMFriendInfo)
.friendDeleted(IMFriendInfo)
.friendInfoChanged(IMFriendInfo)
.blackAdded(IMBlackUserInfo)
.blackDeleted(IMBlackUserInfo)
个人资料与在线状态Open_im_sdk_callbackOnUserListeneruserEvents.stream().selfInfoUpdated(IMUserProfile)
.userStatusChanged(IMUserOnlineStatus)
.userCommandAdded(rawJSON:)
.userCommandDeleted(rawJSON:)
.userCommandUpdated(rawJSON:)
用户在线状态 (专项流)onUserStatusChanged:userStatusEvents.stream()直接产出 IMUserOnlineStatus(含 userID、isOnline、onlinePlatforms)
自定义业务通知Open_im_sdk_callbackOnCustomBusinessListenercustomBusinessEvents.stream()直接产出业务 JSON 字符串 String