首页 > 解决方案 > 我可以为 Firebase AuthUI 覆盖 onBackPressed() 吗?

问题描述

当我的用户在 Firebase Auth UI 的登录屏幕中时,点击后退按钮会重新创建屏幕,它不会onBackPressed()从它所在的活动继承方法。有没有办法让应用程序从 Firebase 登录屏幕关闭?

标签: androidfirebase-authenticationfirebaseui

解决方案


是的,有一种方法可以让它关闭并返回到以前的活动,但你必须通过在它需要返回的方法中覆盖 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 文档,其中一些此答案的代码是从中获取的更多信息。


推荐阅读