firebase 身份验证 sendVerificationEmail() 任务永远执行

firebase authentication sendVerificationEmail() task taking forever

我是 firebase 身份验证的新手,我正在 android 应用程序中使用 FirebaseUI 实现登录流程。作为流程的一部分,我向用户发送一封验证电子邮件,并有一个“再次发送”按钮,用于发送另一封电子邮件,以防用户没有收到第一封电子邮件。我正在使用这种方法发送电子邮件:

fun sendVerificationEmail() {
    if (!isSignedIn()) {
        verificationEmailFailed("cannot send verification email. FirebaseAuth user was null.")
    } else {
        //isSignedIn() returned 'true', so currentUser should not be null
        auth.currentUser!!.apply {
            sendEmailVerification()
                .addOnSuccessListener {
                    Log.d(TAG, "verification email successfully sent to $email")
                }
                .addOnFailureListener {
                    verificationEmailFailed(
                        "FAILED to send verification email to $email: ${it.message}", it)
                }
        }
    }
}

我第一次调用此方法(在用户首次注册后)一切正常,几乎立即发送了电子邮件。现在我正在做一些手动测试,我想测试我的 UI 在发送电子邮件失败时是否正确更新。我通过在用户单击“再次发送”按钮之前关闭互联网来做到这一点。这将是测试流程:

  1. 注册新用户,但不验证。
  2. UI 将更新为“您必须验证您的电子邮件才能继续”并且会显示“再次发送”按钮(一切正常)。
  3. 关闭网络(模拟无法发送邮件任务失败的情况)
  4. 点击“再次发送”按钮。

预期结果

任务将立即失败,OnFailureListener 将触发。

实际结果

该任务需要 多分钟 来处理,直到 OnFailureListener 最终会触发。

这是一个错误吗? sendEmailVerification 任务的超时处理不当?

除了自己监控网络状态,我还能做些什么吗?

这可能是预期的行为,因为任务在失败之前会尝试反复将调用传递给服务器。这样做是因为许多用户经常遇到互联网连接短暂中断的情况,而 API 呼叫失败会导致更糟糕的体验。

如果您想以不同方式处理离线体验,您必须在调用 Firebase 之前自行检查互联网连接 API。

以防其他人遇到此问题:不幸的是我没有找到合适的解决方案,所以我最终在开始登录过程之前手动检查连接状态