【问题标题】:Firebase Auth Back ButtonFirebase 身份验证返回按钮
【发布时间】:2023-04-03 08:12:02
【问题描述】:

我的 android 应用程序中的 firebase 身份验证没有后退按钮。如果 onActivityResult 产生取消结果,我希望能够导航回主要活动。

如何启用此功能?我正在使用预构建的身份验证。

    final int RC_SIGN_IN = 0;
    List<AuthUI.IdpConfig> providers = Arrays.asList(
            new AuthUI.IdpConfig.EmailBuilder().build(),
            new AuthUI.IdpConfig.PhoneBuilder().build(),
            new AuthUI.IdpConfig.GoogleBuilder().build()
    );

    Intent intent = AuthUI.getInstance()
            .createSignInIntentBuilder()
            .setAvailableProviders(providers)
            .setTheme(R.style.FirebaseUI)
            .build();

    startActivityForResult(intent, RC_SIGN_IN);

【问题讨论】:

  • 如果您询问如何更改 Firebase-UI 的工作方式,您可以通过简单地复制其源代码并添加您想要的内容来做任何您想做的事情:github.com/firebase/FirebaseUI-Android

标签: android firebase-authentication firebaseui


【解决方案1】:

调用super.onBackPressed() 将导航回上一个活动

我假设您使用的是 firebase google 身份验证。如果发生任何故障,以下 sn-ps 代码可能会帮助您导航回 MainActivity。

要启动身份验证,请调用signIn() 方法

如果发生任何 API 异常,onActivityResult() 方法将导航回之前的活动

    private static final int RC_SIGN_IN = 1;

    private void signIn () {
        Intent signInIntent = mGoogleSignInClient.getSignInIntent ();
        startActivityForResult ( signInIntent, RC_SIGN_IN );
        //Show user that authentication has started
    }

    @Override
    public void onActivityResult ( int requestCode, int resultCode, Intent data ) {
        super.onActivityResult ( requestCode, resultCode, data );
        if (requestCode == RC_SIGN_IN) {
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent ( data );
            try {
                GoogleSignInAccount account = task.getResult ( ApiException.class );
                assert account != null;
                firebaseAuthWithGoogle ( account.getIdToken () );
            } catch (ApiException e) {
                Toast.makeText ( this, "Google Sign In failed", Toast.LENGTH_SHORT ).show ();
                mGoogleSignInClient.signOut ();
                mAuth.signOut ();
                //Show user that authentication failed
                //In your case navigate to MainActivity()
                super.onBackPressed (); //Navigates to previous activity
            }
        }
    }

以下代码检查返回的用户是否有效。如果没有导航回上一个活动

    private void firebaseAuthWithGoogle ( String idToken ) {
        AuthCredential credential = GoogleAuthProvider.getCredential ( idToken, null );
        mAuth.signInWithCredential ( credential )
                .addOnCompleteListener ( this, task -> {
                    if (task.isSuccessful ()) {
                        FirebaseUser user = mAuth.getCurrentUser ();
                        if (user != null) {
                            //Authenticated successfully
                        } else {
                            //Try to authenticate again
                            //This might not happen in most scenarios
                            signIn ();
                        }
                    } else {
                        Toast.makeText ( this, "Google Sign In failed", Toast.LENGTH_SHORT ).show ();
                        mGoogleSignInClient.signOut ();
                        mAuth.signOut ();
                        //Show user that authentication failed
                        //In your case navigate to MainActivity()
                        super.onBackPressed (); //Navigates to previous activity
                    }
                } );
    }

希望这个回答对你有帮助

【讨论】:

  • 调用finish()停止当前活动并返回不是更简单吗?
  • 嗨@DougStevenson!。是的,你是对的。调用finish() 方法将停止当前活动并将用户导航到上一个活动。正如@onStackOverflowListener 的问题一样,如何导航回来,我只是使用super.onBackPressed() 方法来达到目的。还有一个优势是finish() 不能被覆盖。但是onBackPressed() 可以被覆盖,这可能有助于在导航到以前的活动时进一步添加功能。
  • 我使用的是内置的认证系统。是通过编写我自己的身份验证流程来做到这一点的唯一方法。
猜你喜欢
  • 2020-06-04
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 2021-09-27
  • 1970-01-01
  • 2020-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多