android - 我可以为 Firebase AuthUI 覆盖 onBackPressed() 吗?
问题描述
当我的用户在 Firebase Auth UI 的登录屏幕中时,点击后退按钮会重新创建屏幕,它不会onBackPressed()
从它所在的活动继承方法。有没有办法让应用程序从 Firebase 登录屏幕关闭?
解决方案
是的,有一种方法可以让它关闭并返回到以前的活动,但你必须通过在它需要返回的方法中覆盖 onStartActivity 方法来做到这一点。
在您希望它返回的活动中尝试此操作。注意:此答案是针对使用预构建的登录 UI 量身定制的,但在使用您自己的登录 UI 时概念是相同的。
在您希望 onBackPressed 工作的活动中,您必须调用:
startActivityForResult(
AuthUI.getInstance()
.createSignInIntentBuilder()
.setAvailableProviders(providers)
.build(),
RC_SIGN_IN);
其中 RC_SIGN_IN 是一个静态的 final int 变量,例如 123。然后,在同一个 Activity 中,您必须像这样覆盖 onActivityResult:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
IdpResponse response = IdpResponse.fromResultIntent(data);
if (resultCode == RESULT_OK) {
// Successfully signed in
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
// ...
} else {
// Sign in failed. If response is null the user canceled the
// sign-in flow using the back button. Otherwise check
// response.getError().getErrorCode() and handle the error.
// ...
if (response == null) {
// User pressed back button. NOTE: This is where the back action is
//taken care of
return;
}
if (response.getError().getErrorCode() == ErrorCodes.NO_NETWORK) {
//Show No Internet Notification
return;
}
if (response.getError().getErrorCode() == ErrorCodes.UNKNOWN_ERROR) {
//Shown Unknown Error Notification
return;
}
}
}
}
您可以查看 firebase 文档,其中一些此答案的代码是从中获取的更多信息。
推荐阅读
- google-sheets - 基于总和的谷歌表格中的数据验证
- python - python运行多个脚本
- python - 有没有办法使用 selenium 或其他方式与 Discord 屏幕共享权限弹出窗口交互
- json - 如何使用 jmeter 从 json 断言中识别特定的真或假值?
- sql - 如果必须分块处理数据,从sql将数据加载到redis中会更好吗?
- android - 在 Android 10 或更高版本中从后台服务启动 Activity
- c++ - 如何使用 C++ 覆盖二进制文件的一部分?
- awk - 使用列数据打印列的 awk 命令
- google-chrome - Chromium 源代码树中的“站点设置”在哪里?
- javascript - 如何在 ReactJS 中使用事件监听器?