firebase身份验证sendVerificationEmail()任务耗时很长



我是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之前,你必须自己检查互联网连接。

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

相关内容

最新更新