feat: 简化登录模型,移除 nickname/avatar/expiresAt

这个提交包含在:
XuqmGroup 2026-05-01 22:44:24 +08:00
父节点 e7067d03cb
当前提交 8cf9699441
共有 3 个文件被更改,包括 3 次插入48 次删除

1
.gitignore vendored
查看文件

@ -9,3 +9,4 @@ build/
.idea/
*.log
/.build/
/XuqmDemo/.build/

查看文件

@ -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)
}
}

查看文件

@ -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",