
- 在APIEndpoints.swift中新增tcToken端点以支持腾讯云COS Token获取。 - 在APIModels.swift中新增TcTokenRequest和TcTokenResponse模型,处理Token请求和响应。 - 在COSManager.swift中实现Token的获取、缓存和过期管理逻辑,提升API请求的安全性。 - 在LanguageSettingsView中添加调试功能,允许测试COS Token获取。 - 在多个视图中更新状态管理和导航逻辑,确保用户体验一致性。 - 在FeedFeature和HomeFeature中优化状态管理,简化视图逻辑。
89 lines
3.0 KiB
Swift
89 lines
3.0 KiB
Swift
import Foundation
|
||
import ComposableArchitecture
|
||
|
||
@Reducer
|
||
struct SplashFeature {
|
||
@ObservableState
|
||
struct State: Equatable {
|
||
var isLoading = true
|
||
var shouldShowMainApp = false
|
||
var authenticationStatus: UserInfoManager.AuthenticationStatus = .notFound
|
||
var isCheckingAuthentication = false
|
||
|
||
// 新增:导航目标
|
||
var navigationDestination: NavigationDestination?
|
||
}
|
||
|
||
// 新增:导航目标枚举
|
||
enum NavigationDestination: Equatable {
|
||
case login // 跳转到登录页面
|
||
case main // 跳转到主页面
|
||
}
|
||
|
||
enum Action: Equatable {
|
||
case onAppear
|
||
case splashFinished
|
||
case checkAuthentication
|
||
case authenticationChecked(UserInfoManager.AuthenticationStatus)
|
||
|
||
// 新增:导航 actions
|
||
case navigateToLogin
|
||
case navigateToMain
|
||
}
|
||
|
||
var body: some ReducerOf<Self> {
|
||
Reduce { state, action in
|
||
switch action {
|
||
case .onAppear:
|
||
state.isLoading = true
|
||
state.shouldShowMainApp = false
|
||
state.authenticationStatus = UserInfoManager.AuthenticationStatus.notFound
|
||
state.isCheckingAuthentication = false
|
||
state.navigationDestination = nil
|
||
|
||
// 1秒延迟后显示主应用 (iOS 15.5+ 兼容)
|
||
return .run { send in
|
||
try await Task.sleep(nanoseconds: 1_000_000_000) // 1秒 = 1,000,000,000 纳秒
|
||
await send(.splashFinished)
|
||
}
|
||
case .splashFinished:
|
||
state.isLoading = false
|
||
|
||
// Splash 完成后,开始检查认证状态
|
||
return .send(.checkAuthentication)
|
||
|
||
case .checkAuthentication:
|
||
state.isCheckingAuthentication = true
|
||
|
||
// 异步检查认证状态
|
||
return .run { send in
|
||
let authStatus = await UserInfoManager.checkAuthenticationStatus()
|
||
await send(.authenticationChecked(authStatus))
|
||
}
|
||
|
||
case let .authenticationChecked(status):
|
||
state.isCheckingAuthentication = false
|
||
state.authenticationStatus = status
|
||
|
||
// 根据认证状态决定导航目标
|
||
if status.canAutoLogin {
|
||
debugInfoSync("🎉 自动登录成功,进入主页")
|
||
return .send(.navigateToMain)
|
||
} else {
|
||
debugInfoSync("🔑 需要手动登录")
|
||
return .send(.navigateToLogin)
|
||
}
|
||
|
||
case .navigateToLogin:
|
||
state.navigationDestination = .login
|
||
return .none
|
||
|
||
case .navigateToMain:
|
||
state.navigationDestination = .main
|
||
state.shouldShowMainApp = true
|
||
return .none
|
||
}
|
||
}
|
||
}
|
||
}
|