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 在发送电子邮件失败时是否正确更新。我通过在用户单击“再次发送”按钮之前关闭互联网来做到这一点。这将是测试流程:
- 注册新用户,但不验证。
- UI 将更新为“您必须验证您的电子邮件才能继续”并且会显示“再次发送”按钮(一切正常)。
- 关闭网络(模拟无法发送邮件任务失败的情况)
- 点击“再次发送”按钮。
预期结果
任务将立即失败,OnFailureListener
将触发。
实际结果
该任务需要 多分钟 来处理,直到 OnFailureListener
最终会触发。
这是一个错误吗? sendEmailVerification
任务的超时处理不当?
除了自己监控网络状态,我还能做些什么吗?
这可能是预期的行为,因为任务在失败之前会尝试反复将调用传递给服务器。这样做是因为许多用户经常遇到互联网连接短暂中断的情况,而 API 呼叫失败会导致更糟糕的体验。
如果您想以不同方式处理离线体验,您必须在调用 Firebase 之前自行检查互联网连接 API。
以防其他人遇到此问题:不幸的是我没有找到合适的解决方案,所以我最终在开始登录过程之前手动检查连接状态
我是 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 在发送电子邮件失败时是否正确更新。我通过在用户单击“再次发送”按钮之前关闭互联网来做到这一点。这将是测试流程:
- 注册新用户,但不验证。
- UI 将更新为“您必须验证您的电子邮件才能继续”并且会显示“再次发送”按钮(一切正常)。
- 关闭网络(模拟无法发送邮件任务失败的情况)
- 点击“再次发送”按钮。
预期结果
任务将立即失败,OnFailureListener
将触发。
实际结果
该任务需要 多分钟 来处理,直到 OnFailureListener
最终会触发。
这是一个错误吗? sendEmailVerification
任务的超时处理不当?
除了自己监控网络状态,我还能做些什么吗?
这可能是预期的行为,因为任务在失败之前会尝试反复将调用传递给服务器。这样做是因为许多用户经常遇到互联网连接短暂中断的情况,而 API 呼叫失败会导致更糟糕的体验。
如果您想以不同方式处理离线体验,您必须在调用 Firebase 之前自行检查互联网连接 API。
以防其他人遇到此问题:不幸的是我没有找到合适的解决方案,所以我最终在开始登录过程之前手动检查连接状态