跳到主要内容

初始化、登录与生命周期

QXJIMClient.shared 管理底层 Go IM 核心引擎的初始化、WebSocket 长连接建立、本地 SQLite 数据库挂载以及应用前后台切换。


1. 初始化配置 (IMConfig)​

在调用任何其他 SDK 接口前,必须在应用启动阶段调用 initSDK(config:):

字段名类型默认值说明
systemTypeString"ios"系统标识
platformIDInt321 (.iOS)平台枚举:iOS = 1, iPad = 9
apiAddrString必填OpenIM HTTP API 地址(如 https://im-api.example.com)
wsAddrString必填OpenIM WebSocket 地址(如 wss://im-ws.example.com)
dataDirString必填本地 SQLite 数据库存储目录绝对路径(SDK 会自动创建目录)
logLevelUInt324日志级别:6=Debug, 4=Info, 3=Warn, 2=Error
isLogStandardOutputBooltrue是否在 Xcode 控制台打印日志
logFilePathString同 dataDir本地日志文件输出目录
isExternalExtensionsBoolfalse是否启用外部扩展
let docDir = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
let config = IMConfig(
platform: .iOS,
apiAddr: "https://im-api.qxj.com",
wsAddr: "wss://im-ws.qxj.com",
dataDir: "\(docDir)/qxj_im_data",
logLevel: 4,
isLogStandardOutput: true
)

try QXJIMClient.shared.initSDK(config: config)

2. 登录与登出 (login / logout)​

2.1 登录 (login)​

try await QXJIMClient.shared.login(userID: "u_10001", token: "eyJhbGciOi...")
  • 登录成功后,SDK 会自动初始化 u_10001 专属的本地 SQLite 数据库并建立 WebSocket 长连接,随后触发会话与消息增量同步(可通过 conversationEvents 监听 syncServerStart / syncServerProgress / syncServerFinish)。

2.2 查询登录状态与当前用户​

let status: IMLoginStatus = QXJIMClient.shared.loginStatus
// .uninitialized (0) | .loggedOut (1) | .loggingIn (2) | .loggedIn (3)

let currentUserID: String = QXJIMClient.shared.loginUserID
let version: String = QXJIMClient.shared.sdkVersion // "v3.8.3-patch.3"

2.3 退出登录 (logout)​

try await QXJIMClient.shared.logout()
  • 用户主动退出账号时调用。若收到 .kickedOffline(被踢下线)或 .userTokenExpired(Token 过期)事件,底层连接已自动断开,无需再次调用 logout(),直接清理业务态跳转登录页即可。

3. 前后台切换与网络变化通知​

在 SwiftUI scenePhase 变化或 NWPathMonitor 监听到网络切换时调用:

// SwiftUI App 监听前后台切换
.onChange(of: scenePhase) { _, newPhase in
Task {
switch newPhase {
case .active:
try? await QXJIMClient.shared.setAppBackgroundStatus(isBackground: false)
case .background:
try? await QXJIMClient.shared.setAppBackgroundStatus(isBackground: true)
default:
break
}
}
}

// 当 Wi-Fi / 蜂窝网络切换时立即触发底层重连
try? await QXJIMClient.shared.networkStatusChanged()