Swift中Firebase Authentication实现用户自动登录跳转首页
在Swift中利用Firebase Auth状态监听实现自动登录跳转
UIKit 实现方案
在SceneDelegate(iOS 13+)或AppDelegate(iOS 12及以下)的启动回调中添加认证状态监听,直接根据用户状态切换根视图控制器即可:
import FirebaseAuth class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? private var authListener: AuthStateDidChangeListenerHandle? func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let windowScene = (scene as? UIWindowScene) else { return } window = UIWindow(windowScene: windowScene) // 添加状态监听,初始化时会立即触发一次 authListener = Auth.auth().addStateDidChangeListener { auth, user in // 根据用户状态设置根控制器 let rootVC: UIViewController if user != nil { rootVC = HomeViewController() // 你的首页控制器 } else { rootVC = LoginViewController() // 你的登录页控制器 } // 包装导航控制器(如果需要) self.window?.rootViewController = UINavigationController(rootViewController: rootVC) self.window?.makeKeyAndVisible() } } func sceneDidDisconnect(_ scene: UIScene) { // 场景销毁时移除监听,避免内存泄漏 if let listener = authListener { Auth.auth().removeStateDidChangeListener(listener) } } }
SwiftUI 实现方案
在App结构体中通过@State变量控制页面切换,结合onAppear添加监听:
import SwiftUI import FirebaseAuth @main struct YourApp: App { @State private var isUserLoggedIn = false private var authListener: AuthStateDidChangeListenerHandle? var body: some Scene { WindowGroup { Group { if isUserLoggedIn { HomeView() } else { LoginView() } } .onAppear { // 设置状态监听 authListener = Auth.auth().addStateDidChangeListener { _, user in isUserLoggedIn = user != nil } } .onDisappear { // 移除监听避免内存泄漏 if let listener = authListener { Auth.auth().removeStateDidChangeListener(listener) } } } } }
关键注意事项
addStateDidChangeListener会在调用时立即触发一次,刚好满足App启动时检测登录状态的需求- 后续用户登录/注销操作会自动触发监听回调,无需手动处理页面切换
- 如果在ViewController中单独添加监听,务必在
deinit方法中调用removeStateDidChangeListener移除监听,防止内存泄漏 - 确保Firebase Auth已正确配置(
GoogleService-Info.plist已添加到项目中)
内容的提问来源于stack exchange,提问作者Sulochana Fernando
相关产品推荐
相关产品推荐

