【问题标题】:Fail firebase auth facebook失败的firebase auth facebook
【发布时间】:2018-01-24 00:29:38
【问题描述】:

我正在尝试在 firebase 上使用 facebook 进行身份验证。我已经设置了facebook SDK,可以完美登录facebook了。

但我无法进行 firebase 身份验证。该应用程序在方法 onComplete(Task <AuthResult> task) 上有一个 TOAST,如果在此过程中出现问题,它将显示出来。我收到此 TOAST 错误,但找不到问题所在。我已经设置了一切,就像在 firebase 文档中一样。

public class LoginActivity extends AppCompatActivity {
    private LoginButton loginButton;
    private CallbackManager callbackManager;

    private FirebaseAuth firebaseAuth;
    private FirebaseAuth.AuthStateListener firebaseAuthListener;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        firebaseAuth = FirebaseAuth.getInstance();

        callbackManager  = CallbackManager.Factory.create();
        loginButton = (LoginButton) findViewById(R.id.loginButton);
        loginButton.setReadPermissions("email","public_profile");
        loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                handleFacebookAccessToken(loginResult.getAccessToken());
            }

            @Override
            public void onCancel() {
                Toast.makeText(getApplicationContext(),"Error al iniciar sesión",Toast.LENGTH_LONG).show();

            }

            @Override
            public void onError(FacebookException error) {
                Toast.makeText(getApplicationContext(),"Error al iniciar sesión",Toast.LENGTH_LONG).show();
            }
        });

        firebaseAuthListener = new FirebaseAuth.AuthStateListener(){

            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                FirebaseUser user = firebaseAuth.getCurrentUser();
                if (user != null) {
                    goMainScreen();
                }
            }
        };
    }

    private void handleFacebookAccessToken(AccessToken accessToken) {
        Log.d("","handle"+accessToken.getCurrentAccessToken().getToken());
        AuthCredential credential = FacebookAuthProvider.getCredential(accessToken.getCurrentAccessToken().getToken());
        firebaseAuth.signInWithCredential(credential).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                FirebaseUser user = firebaseAuth.getCurrentUser();
                if (user != null) {
                    Toast.makeText(getApplicationContext(), "hi", Toast.LENGTH_LONG).show();
                }else {
                    Toast.makeText(getApplicationContext(), "error",  Toast.LENGTH_LONG).show(); // here is the ERROR.

                }
            }
        });

    }


    private void goMainScreen() {
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }

    @Override
    protected void onStart() {
        super.onStart();
        firebaseAuth.addAuthStateListener(firebaseAuthListener);
    }

    @Override
    protected void onStop() {
        super.onStop();
        firebaseAuth.removeAuthStateListener(firebaseAuthListener);
    }

}

我已经在 firebase 上启用了 Facebook 身份验证,并且已经复制了 id 和 secret。此外,我已经在 Facebook 开发人员中复制了 Firebase URL。

【问题讨论】:

  • 该任务包含可以帮助您排除故障的错误信息。不要在 toast 中显示 "error",而是显示 task. getException().toString() 或更好:使用 throw task.getException() 抛出异常。
  • @FrankvanPuffelen 谢谢!!!那行得通!错误 esa 我有另一个现有帐户与 Facebook 相同的电子邮件...非常感谢坦率

标签: android firebase firebase-authentication facebook-login


【解决方案1】:

该任务包含可以帮助您排除故障的错误信息。不要在 toast 中显示 "error",而是显示 task.getException().toString() 或更好:使用 throw task.getException() 抛出异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-13
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 2017-05-30
    • 1970-01-01
    相关资源
    最近更新 更多