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
相关产品推荐
相关产品推荐

