You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:20:28