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

启用App Check的Flutter iOS应用中Firebase电话认证reCAPTCHA重复弹出两次的问题求助

启用App Check的Flutter iOS应用中Firebase电话认证reCAPTCHA重复弹出两次的问题求助

各位开发者好,我目前在开发一款集成了Firebase Authentication和App Check的Flutter应用,在iOS平台上遇到了一个棘手的问题:调用FirebaseAuth.instance.verifyPhoneNumber()进行电话认证时,reCAPTCHA会重复弹出两次。

具体情况是这样的:第一次reCAPTCHA弹窗弹出,我完成验证后回到应用,但没有任何回调触发(既没进入verificationCompleted也没走到codeSent),紧接着第二个reCAPTCHA就立刻弹出来了,只有完成第二次验证之后,短信验证的流程才会正常推进。另外我发现,如果这个手机号之前被用于其他Firebase账号,出现这个问题的概率会更高。

下面是我相关的代码片段:

Firebase初始化与App Check激活代码

await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);
await FirebaseAppCheck.instance.activate(
  appleProvider: AppleProvider.deviceCheck,
);

电话认证调用代码

await FirebaseAuth.instance.verifyPhoneNumber(
  phoneNumber: '$_countryCode$_phoneNumber',
  timeout: Duration.zero, // 也试过设置30秒、60秒的情况
  verificationCompleted:(PhoneAuthCredential credential) {
    print('verificationCompleted');
  },
  verificationFailed: (FirebaseAuthException e) {
    print('verificationFailed');
  },
  codeSent: (String verificationId, int resendToken) {
    print('codeSent');
  },
  codeAutoRetrievalTimeout: (String verificationId) {
    print('codeAutoRetrievalTimeout');
  },
);

我已经尝试过这些排查手段,但问题依然存在:

  • 调整timeout参数,从Duration.zero到30秒、60秒都试过,没有改善
  • 在Info.plist中添加了后台模式配置:
<key>UIBackgroundModes</key>
<array>
  <string>remote-notification</string>
  <string>fetch</string>
</array>
  • 我的项目是模块化/白标架构,Firebase是从单独的package中初始化的,应用通过flavor来运行

有没有朋友遇到过类似的问题?或者能给我一些排查方向的建议?万分感谢!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 10:43:11