iOS(SwiftUI)
本文会引导您构建聊天界面。
开发环境要求
Xcode 15 及以上
iOS 15.0 及以上
前置条件
在构建界面之前,请确保您已经完成了以下 4 件事:
1. 在控制台创建了一个应用。
2. 在控制台创建了至少 2 个用户账号。
3. 集成了
TUIKit SwiftUI。4. 调用
LoginStore 的 login 接口登录组件。注意:
1. 每次启动应用,登录一次即可。
2. 请确保登录成功,我们建议您在登录成功的回调里进行下文的操作。
如果您已经完成,请继续阅读下文。
步骤说明
单聊界面
群聊界面
如果跳转到群聊消息界面,需要传入有效 groupID。这里需要你有一个已经存在群组的 groupID。
创建成功后,您可以直接在当前页看到 groupID:

注意,如果你直接使用我们的示例代码,需要预填充这几个参数:
sdkAppID,上文获取的 sdkAppID。senderUserID,发送消息者的 userID,也就是 快速开始 中创建的 user1。senderUserSig,发送消息者的 userSig,也就是 快速开始 中创建的 user1 的 userSig。groupID,群组 ID。App 启动即加载群聊消息列表页,示例代码如下:
// ContentView.swiftimport SwiftUIstruct ContentView: View {var body: some View {GroupChatPage()}}// GroupChatPage.swiftimport AtomicXimport AtomicXCoreimport SwiftUIpublic struct GroupChatPage: View {@StateObject private var themeState = ThemeState.shared@State private var isLoggedIn = false@State private var isLoggingIn = true@State private var loginError: String? = nilprivate let sdkAppID: Int32 = 1234567890 // TODO: Fill in the sdkAppID hereprivate let senderUserID = "" // TODO: Fill in your userID hereprivate let senderUserSig = "" // TODO: Fill in your generated userSig hereprivate let groupID = "" // TODO: Fill in the groupID hereprivate var conversationID: String {// C2C conversationID: "c2c_\(userID)", Group conversationID: "group_\(groupID)""group_\(groupID)"}public var body: some View {Group {if isLoggedIn {groupChatContentView} else if isLoggingIn {ProgressView("Logging in...")} else {VStack(spacing: 12) {Image(systemName: "exclamationmark.triangle").font(.system(size: 40)).foregroundColor(.orange)Text(loginError ?? "Login failed").foregroundColor(.secondary)}}}.environmentObject(themeState).onAppear {login()}}// MARK: - Group Chat Contentprivate var groupChatContentView: some View {VStack(spacing: 0) {navigationBarViewDivider().background(.gray)VStack(spacing: 0) {// Add MessageList to this page.MessageList(conversationID: conversationID,onUserClick: { userID inprint(">>>>> onUserClick: \(userID)")})// Add MessageInput to this page.MessageInput(conversationID: conversationID)}.ignoresSafeArea(.keyboard)}}// MARK: - Navigation Barprivate var navigationBarView: some View {HStack {Image(systemName: "person.2.fill").font(.system(size: 20)).foregroundColor(.gray)Text(groupID).font(.system(size: 17, weight: .semibold)).foregroundColor(themeState.colors.textColorPrimary)Spacer()}.padding(.horizontal, 16).frame(height: 44)}// MARK: - Loginprivate func login() {guard !senderUserSig.isEmpty else {isLoggingIn = falseloginError = "userSig is empty. Please fill in a valid userSig."return}// Login is required when page appears.LoginStore.shared.login(sdkAppID: sdkAppID, userID: senderUserID, userSig: senderUserSig) { result inswitch result {case .success:print("Login success, userID: \(senderUserID)")isLoggedIn = trueisLoggingIn = falsecase .failure(let error):print("Login failed: \(error.code), \(error.message)")loginError = "Login failed: \(error.code), \(error.message)"isLoggingIn = false}}}}
运行效果示意图:

更多实践
联系我们