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

SwiftUI中FirebaseUI未调用指定代理函数问题求助

FirebaseUI代理方法未触发的解决方案

你的邮箱登录成功但代理函数没触发,问题出在AuthUI实例未被正确持有,导致代理对象提前释放,无法接收回调。以下是具体修复步骤:

1. 在结构体中持有AuthUI实例

在FirebaseUIView中添加存储属性,确保AuthUI对象不会被提前释放:

struct FirebaseUIView: UIViewControllerRepresentable {
    // 持有AuthUI实例,保证生命周期匹配
    private let authUI: FUIAuth
    
    init() {
        guard let ui = FUIAuth.defaultAuthUI() else {
            fatalError("FirebaseUI初始化失败,请检查Firebase配置是否正确")
        }
        self.authUI = ui
    }
    
    // 其余代码保持不变
}

2. 调整代理与提供者的配置顺序(可选但更规范)

在makeUIViewController中先设置代理,再配置登录提供者,确保代理绑定优先生效:

func makeUIViewController(context: Context) -> UINavigationController {
    // 先绑定代理
    authUI.delegate = context.coordinator
    // 再配置登录方式
    let providers: [FUIAuthProvider] = [FUIEmailAuth()]
    authUI.providers = providers
    
    let authViewController = authUI.authViewController()
    return authViewController
}

3. 验证Firebase初始化完整性

确保App启动时已完成Firebase核心配置,比如在AppDelegate或App结构体中调用:

FirebaseApp.configure()

问题根源解释

原代码中,FUIAuth.defaultAuthUI()创建的实例仅在makeUIViewController方法内存在,方法执行完毕后会被系统回收,关联的Coordinator代理对象也随之失去触发回调的依托。通过在结构体中持有AuthUI实例,能保证它的生命周期与FirebaseUIView同步,代理回调就能正常触发。

内容的提问来源于stack exchange,提问作者ZackOne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:12:25