diff --git a/.gitignore b/.gitignore index cd1614f..6c7312c 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ build/ .idea/ *.log /.build/ +/XuqmDemo/.build/ diff --git a/Sources/XuqmSDK/Core/XuqmSDK.swift b/Sources/XuqmSDK/Core/XuqmSDK.swift index 44af928..ac07ddc 100644 --- a/Sources/XuqmSDK/Core/XuqmSDK.swift +++ b/Sources/XuqmSDK/Core/XuqmSDK.swift @@ -8,10 +8,8 @@ public final class XuqmSDK: NSObject { private(set) var tokenStore: TokenStore? public private(set) var currentUserId: String? - public var onUserSigExpired: (() -> Void)? private var userSig: String? - private var userSigTimer: Timer? private var cachedDeviceToken: String? private override init() { @@ -34,7 +32,6 @@ public final class XuqmSDK: NSObject { public func login(userId: String, userSig: String) async { self.currentUserId = userId self.userSig = userSig - startUserSigExpirationTimer(userSig: userSig) do { try await ImSDK.shared.loginWithUserSig(userId, userSig) @@ -52,9 +49,6 @@ public final class XuqmSDK: NSObject { } public func logout() async { - userSigTimer?.invalidate() - userSigTimer = nil - ImSDK.shared.disconnect() if let userId = currentUserId { @@ -81,42 +75,4 @@ public final class XuqmSDK: NSObject { } } - private func startUserSigExpirationTimer(userSig: String) { - userSigTimer?.invalidate() - guard let expDate = extractExpirationDate(from: userSig) else { return } - let interval = expDate.timeIntervalSinceNow - 300 // 5 minutes before expiry - guard interval > 0 else { - onUserSigExpired?() - return - } - userSigTimer = Timer.scheduledTimer( - timeInterval: interval, - target: self, - selector: #selector(userSigDidExpire), - userInfo: nil, - repeats: false - ) - } - - @objc private func userSigDidExpire() { - onUserSigExpired?() - } - - private func extractExpirationDate(from userSig: String) -> Date? { - let parts = userSig.split(separator: ".") - guard parts.count >= 2 else { return nil } - var base64 = String(parts[1]) - .replacingOccurrences(of: "-", with: "+") - .replacingOccurrences(of: "_", with: "/") - let padding = 4 - base64.count % 4 - if padding != 4 { - base64 += String(repeating: "=", count: padding) - } - guard let data = Data(base64Encoded: base64), - let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any], - let exp = json["exp"] as? TimeInterval else { - return nil - } - return Date(timeIntervalSince1970: exp) - } } diff --git a/Sources/XuqmSDK/IM/ImSDK.swift b/Sources/XuqmSDK/IM/ImSDK.swift index dacafa7..bb4efca 100644 --- a/Sources/XuqmSDK/IM/ImSDK.swift +++ b/Sources/XuqmSDK/IM/ImSDK.swift @@ -36,15 +36,13 @@ public final class ImSDK { client?.connect() } - public func login(userId: String, nickname: String? = nil, avatar: String? = nil) async throws { + public func login(userId: String) async throws { let config = XuqmSDK.shared.requireConfig() - var items = [ + let items = [ URLQueryItem(name: "appId", value: config.appId), URLQueryItem(name: "userId", value: userId), ] - if let nickname { items.append(URLQueryItem(name: "nickname", value: nickname)) } - if let avatar { items.append(URLQueryItem(name: "avatar", value: avatar)) } let res: ImLoginResponse = try await ApiClient.shared.request( path: "/api/im/auth/login",