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

iOS Firebase短信验证reCAPTCHA流程后verifyPhoneNumber卡在空白页

解决Firebase Phone Auth reCAPTCHA流程卡在about:blank的问题

问题概述

基于firebase-ios-sdk v11.2的quickstart-ios实现手机号认证,模拟器环境已禁用Swizzling,尝试走reCAPTCHA作为APNs的 fallback方案,但调用PhoneAuthProvider.provider().verifyPhoneNumber后,页面卡在about:blank。已完成GoogleService-Info.plist配置、添加REVERSED_CLIENT_ID的URL Scheme、实现了canHandle、openURLContexts等代理方法。

核心修复点

1. 关联SceneDelegate到场景配置

AppDelegate中注释了SceneDelegate的关联代码,导致reCAPTCHA验证完成后的URL回调无法触发,页面无法关闭。修改configurationForConnecting方法:

func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
    let sceneConfig = UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
    sceneConfig.delegateClass = SceneDelegate.self // 启用这行代码
    return sceneConfig
}

2. 修正URL回调的处理逻辑

SceneDelegate中仅调用Auth.auth().canHandle(url)不足以完成reCAPTCHA的回调闭环,需要调用handle(url)让Firebase处理并关闭验证页面:

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    guard let url = URLContexts.first?.url else { return }
    if Auth.auth().canHandle(url) {
        _ = Auth.auth().handle(url) // 替换原canHandle调用
    }
}

3. 提供正确的UI代理给verifyPhoneNumber

调用verifyPhoneNumber时传入uiDelegate: nil会导致reCAPTCHA页面无法正确处理生命周期,需要传入当前的UIViewController作为代理:
在ContentView中添加获取根视图控制器的方法:

private func getCurrentViewController() -> UIViewController? {
    guard let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
          let window = windowScene.windows.first else { return nil }
    return window.rootViewController
}

然后修改verifyPhoneNumber调用:

PhoneAuthProvider.provider().verifyPhoneNumber(countryCodeNumber + phoneNumber, uiDelegate: getCurrentViewController() as? any FUIAuthDelegate) { verificationID, error in
    // 原有逻辑保持不变
}

4. 修正代码拼写错误

FirebaseError.VerificatrionEmpty存在拼写错误,修正为FirebaseError.VerificationEmpty(不影响卡页,但避免后续逻辑问题)。

5. 确保模拟器走reCAPTCHA流程

模拟器无法获取APNs令牌,Firebase会自动fallback到reCAPTCHA,无需额外设置;若需强制测试reCAPTCHA,可在Firebase初始化后添加:

Auth.auth().settings?.isAppVerificationDisabledForTesting = true

验证

完成上述修改后,重新编译运行模拟器:

  • 输入手机号点击Submit,reCAPTCHA页面正常加载
  • 完成验证后页面自动关闭,返回verificationID
  • 输入验证码即可完成登录

内容的提问来源于stack exchange,提问作者Nick Carducci for Carface Bank

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 13:58:14