Files
real-e-party-iOS/YuMi/E-P/Login/Services/EPLoginManager.swift.backup
2025-10-17 14:52:29 +08:00

150 lines
5.5 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// EPLoginManager.swift
// YuMi
//
// Created by AI on 2025-01-27.
//
import UIKit
/// 登录管理器Swift 版本)
/// 替代 PILoginManager处理登录成功后的路由和初始化
@objc class EPLoginManager: NSObject {
// MARK: - Login Success Navigation
/// 登录成功后跳转首页
/// - Parameter viewController: 当前视图控制器
static func jumpToHome(from viewController: UIViewController) {
// 1. 获取当前账号信息
guard let accountModel = AccountInfoStorage.instance().getCurrentAccountInfo() else {
print("[EPLoginManager] 账号信息不完整,无法继续")
return
}
let accessToken = accountModel.access_token
guard !accessToken.isEmpty else {
print("[EPLoginManager] access_token 为空,无法继续")
return
}
// 2. 请求 ticket
let loginService = EPLoginService()
loginService.requestTicket(accessToken: accessToken) { ticket in
// 3. 保存 ticket
AccountInfoStorage.instance().saveTicket(ticket)
// 4. 切换到 EPTabBarController
DispatchQueue.main.async {
let epTabBar = EPTabBarController.create()
epTabBar.refreshTabBarWithIsLogin(true)
// 设置为根控制器
if let window = getKeyWindow() {
window.rootViewController = epTabBar
window.makeKeyAndVisible()
// 延迟检查专属颜色(登录成功后引导)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.8) {
Self.checkAndShowSignatureColorGuide(in: window)
}
}
print("[EPLoginManager] 登录成功,已切换到 EPTabBarController")
}
} failure: { code, msg in
print("[EPLoginManager] 请求 Ticket 失败: \(code) - \(msg)")
// Ticket 请求失败,仍然跳转到首页(保持原有行为)
DispatchQueue.main.async {
let epTabBar = EPTabBarController.create()
epTabBar.refreshTabBarWithIsLogin(true)
if let window = getKeyWindow() {
window.rootViewController = epTabBar
window.makeKeyAndVisible()
// 延迟检查专属颜色(登录成功后引导)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.8) {
Self.checkAndShowSignatureColorGuide(in: window)
}
}
print("[EPLoginManager] Ticket 请求失败,仍跳转到首页")
}
}
}
/// Apple Login 接口占位(不实现)
/// - Parameter viewController: 当前视图控制器
static func loginWithApple(from viewController: UIViewController) {
print("[EPLoginManager] Apple Login - 占位Phase 2 实现")
// 占位,打印 log
}
// MARK: - Helper Methods
/// 获取 keyWindowiOS 13+ 兼容)
private static func getKeyWindow() -> UIWindow? {
if #available(iOS 13.0, *) {
for windowScene in UIApplication.shared.connectedScenes {
if let windowScene = windowScene as? UIWindowScene,
windowScene.activationState == .foregroundActive {
for window in windowScene.windows {
if window.isKeyWindow {
return window
}
}
// 如果没有 keyWindow返回第一个 window
return windowScene.windows.first
}
}
} else {
// iOS 13 以下,使用旧方法(已废弃但仍然可用)
return UIApplication.shared.keyWindow
}
return nil
}
/// 检查并显示专属颜色引导页
private static func checkAndShowSignatureColorGuide(in window: UIWindow) {
let hasSignatureColor = EPEmotionColorStorage.hasUserSignatureColor()
// #if DEBUG
print("[EPLoginManager] Debug 模式:显示专属颜色引导页(已有颜色: \(hasSignatureColor)")
let guideView = EPSignatureColorGuideView()
// 设置颜色确认回调
guideView.onColorConfirmed = { (hexColor: String) in
EPEmotionColorStorage.saveUserSignatureColor(hexColor)
print("[EPLoginManager] 用户选择专属颜色: \(hexColor)")
}
// 如果已有颜色,设置 Skip 回调
if hasSignatureColor {
guideView.onSkipTapped = {
print("[EPLoginManager] 用户跳过专属颜色选择")
}
}
// 显示引导页,已有颜色时显示 Skip 按钮
guideView.show(in: window, showSkipButton: hasSignatureColor)
// #else
// // Release 环境:仅在未设置专属颜色时显示
// if !hasSignatureColor {
// let guideView = EPSignatureColorGuideView()
// guideView.onColorConfirmed = { (hexColor: String) in
// EPEmotionColorStorage.saveUserSignatureColor(hexColor)
// }
// guideView.show(in: window)
// }
// #endif
}
}