
主要变更: 1. 新增 EPLoginViewController 和 EPLoginTypesViewController,提供新的登录界面和功能。 2. 引入 EPLoginInputView 和 EPLoginButton 组件,支持输入框和按钮的自定义。 3. 实现 EPLoginService 和 EPLoginManager,封装登录逻辑和 API 请求。 4. 添加 EPLoginConfig 和 EPLoginState,统一配置和状态管理。 5. 更新 Bridging Header,确保 Swift 和 Objective-C 代码的互操作性。 此更新旨在提升用户登录体验,简化登录流程,并提供更好的代码结构和可维护性。
103 lines
3.5 KiB
Swift
103 lines
3.5 KiB
Swift
//
|
||
// 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()
|
||
}
|
||
|
||
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()
|
||
}
|
||
|
||
print("[EPLoginManager] Ticket 请求失败,仍跳转到首页")
|
||
}
|
||
}
|
||
}
|
||
|
||
/// Apple Login 接口占位(不实现)
|
||
/// - Parameter viewController: 当前视图控制器
|
||
static func loginWithApple(from viewController: UIViewController) {
|
||
print("[EPLoginManager] Apple Login - 占位,Phase 2 实现")
|
||
// 占位,打印 log
|
||
}
|
||
|
||
// MARK: - Helper Methods
|
||
|
||
/// 获取 keyWindow(iOS 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
|
||
}
|
||
}
|
||
|