跳转到正文

iOS 方法参考 ​

先按 iOS 接入加入本地 Swift Package。除 clientRequestHeaders() 外,PopoIM 的宿主操作在 MainActor 调用。用户、认证、目标、未读与错误字段见 SDK 对象说明。

下文优先展示 async 方法。同名 completion 版本也可使用:结果通过 completion(error: PopoError?) 返回,nil 表示成功。

创建配置:PopoConfig(...) ​

参数类型必填说明
serverURLString是部署根地址,例如 https://example.com。
webSocketURLString?否WS/WSS 地址;默认从部署地址派生 /ws。
authProvider@Sendable () async throws -> PopoAuthInfo是异步向宿主后端取票;失败时 throw,成功返回用户、Token 和秒级 expireAt。

返回: PopoConfig。这里创建配置,初始化时才检查并使用。

初始化:PopoIM.initialize(config) ​

参数 config: PopoConfig。

返回: Void;配置无效等情况 throw PopoError。每个进程初始化一次,之后调用 login。

登录:PopoIM.login() ​

无参数,调用 authProvider 完成认证和首次同步。

返回: async throws Void;正常完成没有额外数据,失败通过 throw 交付。回调版本为 login(completion:)。

恢复缓存:PopoIM.restoreCachedSession(user:) ​

参数 user: PopoUser 为宿主确认的当前本机用户。

返回: async throws Void。恢复当前账号的可读缓存,不请求 Token 或网络;之后仍调用 login。回调版本增加 completion。

退出:PopoIM.logout(clearLocalData:) ​

参数 clearLocalData: Bool 表示是否同时清理当前账号本地数据。也可调用无参数 logout(),保留可恢复缓存。

返回: Void。用户退出宿主账号时通常传 true,并同时清理宿主登录态。

更新资料:PopoIM.updateCurrentUser(user) ​

参数 user: PopoUser 为当前账号的新资料,不能用它切换身份。

返回: async throws Void;回调版本增加 completion。宿主统一管理资料时先在后端保存并同步,再更新 SDK。

打开会话:PopoIM.openConversation(...) ​

参数类型必填说明
targetPopoConversationTarget是使用 try .friend(userID) 或 try .group(groupID) 创建。
at messageIDString否带此参数的重载用于定位历史消息;填写正十进制消息 ID。
from navigationControllerUINavigationController是承载聊天页面的宿主导航控制器。

返回: async throws Void。正常完成表示聊天页已经打开,不代表对方已读。completion 版本使用相同参数并增加完成回调。

添加未读监听:PopoIM.addUnreadListener(listener) ​

参数 listener: (PopoUnreadCount) -> Void 接收 conversation 和 contact 两个当前未读总数。

返回: PopoUnreadObserver。保留此对象,稍后用于取消监听。

取消未读监听:PopoIM.removeUnreadListener(observer) ​

参数为添加时返回的 PopoUnreadObserver。

返回: Void。页面或宿主模块销毁时取消。

查询缓存:PopoIM.cacheSize() ​

无参数。

返回: async Int64,媒体缓存字节数。回调版本通过 completion(bytes: Int64) 返回。

清理缓存:PopoIM.clearCache() ​

无参数。

返回: async Int64,清理后剩余的媒体缓存字节数。回调版本通过 completion(bytes: Int64) 返回。

处理来电通知:PopoIM.handleCallNotification(callID:) ​

参数 callID: String 为推送中的通话 ID。

返回: async throws Void;completion 版本增加完成回调。先由 SDK 向服务器确认当前通话状态,避免把延迟推送当作仍然有效的来电。

设置 VoIP token:PopoIM.setVoIPPushToken(...) ​

参数类型说明
tokenData?PushKit 返回的 VoIP token;失效时传 nil。
environmentPopoPushEnvironment.development 或 .production。
bundleIDString当前应用 Bundle ID。

返回: throws Void。参数或配置错误时抛出错误。宿主仍需按 Apple 的 PushKit 与 CallKit 流程接线。

上报系统来电:PopoIM.reportIncomingCall(...) ​

参数类型说明
callIDString通话 ID。
callerIDString来电用户的身份标识。
callerNameString系统来电界面显示的姓名。
hasVideoBool是否视频通话。
completionPopoCompletion系统来电上报完成结果;nil 表示成功。

返回: Void,结果在 completion 中交付。

结束系统来电:PopoIM.endReportedCall(callID:) ​

参数 callID: String 为之前上报的通话 ID。

返回: Void。关闭对应的系统来电展示;通话业务状态仍由 SDK 通话流程维护。

请求诊断头:PopoIM.clientRequestHeaders() ​

无参数。

返回: [String: String],客户端版本与设备诊断请求头,不包含认证 Token。

创建根页面 ​

PopoConversationController() 与 PopoContactController() 均无参数,分别返回会话与通讯录 UIViewController。宿主将它们放入自己的导航和 Tab 结构中,后续复用页面实例。

创建好友二维码:PopoUIKit.createFriendQRCode(...) ​

参数 username: String 为完整账号,size: CGFloat 为二维码图像尺寸。

返回: throws UIImage。不是根据昵称查找好友。

创建分享文本:PopoShareItem.text(value) ​

参数 value: String 为要分享的文本。

返回: throws PopoShareItem,kind 为 text、text 为输入内容。内容无效时抛出错误。

创建分享文件:PopoShareItem.file(...) ​

参数类型必填说明
kindPopoShareItem.Kind是.image、.video 或 .file。
urlURL是可读取的本地文件 URL。
fileNameString是展示文件名。
mimeTypeString是文件实际 MIME 类型。
thumbnailURLURL?否本地封面文件 URL,默认 nil。

返回: throws PopoShareItem,包含 kind、fileURL、fileName、mimeType、thumbnailURL;文件类型的 text 为 nil。

创建分享页面:PopoUIKit.makeShareViewController(...) ​

参数 items: [PopoShareItem] 为待分享内容;completion: PopoShareCompletion 接收 PopoError?,nil 表示成功。

返回: throws UIViewController,宿主负责展示此分享页面。分享流程结果通过 completion 返回。