Android firebase中的Facebook身份验证不起作用

Android firebase中的Facebook身份验证不起作用,android,firebase,firebase-authentication,facebook-login,Android,Firebase,Firebase Authentication,Facebook Login,我要做的是使用Firebase登录Facebook,然后获取姓名、电子邮件、个人资料图片和uid,然后将其存储到Firebase数据库 一切正常,直到点击登录按钮,然后Facebook帐户窗口弹出。之后,当我点击“继续Rishabh”选择一个账户时,什么也没发生 没有身份验证,没有错误,什么都没有。同一个Facebook帐户选择窗口保持在屏幕上,不会发生任何事情 任何帮助都将不胜感激 以下是我的SignenActivity.java: @Override protected vo

我要做的是使用Firebase登录Facebook,然后获取姓名、电子邮件、个人资料图片和uid,然后将其存储到Firebase数据库

一切正常,直到点击登录按钮,然后Facebook帐户窗口弹出。之后,当我点击“继续Rishabh”选择一个账户时,什么也没发生

没有身份验证,没有错误,什么都没有。同一个Facebook帐户选择窗口保持在屏幕上,不会发生任何事情

任何帮助都将不胜感激

以下是我的SignenActivity.java:

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

        mAuth = FirebaseAuth.getInstance();

        mAuthListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                FirebaseUser user = firebaseAuth.getCurrentUser();
                if (user != null) {
                    // User is signed in
                    Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
                } else {
                    // User is signed out
                    Log.d(TAG, "onAuthStateChanged:signed_out");
                }
                // ...
            }
        };

        mSignInToolbar = (Toolbar) findViewById(R.id.signInToolbar);
        setSupportActionBar(mSignInToolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        mRef = FirebaseDatabase.getInstance().getReference().child("Users");
        mRef.keepSynced(true);

        mEmailField = (EditText) findViewById(R.id.emailField);
        mPasswordField = (EditText) findViewById(R.id.passowrdField);
        mSigninBtn = (Button) findViewById(R.id.signinBtn);
        mProgress = new ProgressDialog(this);

        // Initialize Facebook Login button
        FacebookSdk.sdkInitialize(getApplicationContext());
        mCallbackManager = CallbackManager.Factory.create();
        loginButton = (LoginButton) findViewById(R.id.button_facebook_login);
        loginButton.setReadPermissions("email", "public_profile");
        loginButton.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                Log.d(TAG, "facebook:onSuccess:" + loginResult);
                handleFacebookAccessToken(loginResult.getAccessToken());
            }

            @Override
            public void onCancel() {
                Log.d(TAG, "facebook:onCancel");
                // ...
            }

            @Override
            public void onError(FacebookException error) {
                Log.d(TAG, "facebook:onError", error);
                // ...
            }
        });

    }


    @Override
    public void onStart() {
        super.onStart();
        mAuth.addAuthStateListener(mAuthListener);
    }


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

        // Pass the activity result back to the Facebook SDK
        mCallbackManager.onActivityResult(requestCode, resultCode, data);
    }


    private void handleFacebookAccessToken(AccessToken token) {
        Log.d(TAG, "handleFacebookAccessToken:" + token);
        mProgress.setMessage("Logging in...");
        mProgress.show();

        AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful());

                        // If sign in fails, display a message to the user. If sign in succeeds
                        // the auth state listener will be notified and logic to handle the
                        // signed in user can be handled in the listener.
                        if (!task.isSuccessful()) {
                            Log.w(TAG, "signInWithCredential", task.getException());
                            Toast.makeText(SignInActivity.this, "Authentication failed.",
                                    Toast.LENGTH_SHORT).show();
                            mProgress.dismiss();
                        }else{
                            String uid=task.getResult().getUser().getUid();
                            String name=task.getResult().getUser().getDisplayName();
                            String email=task.getResult().getUser().getEmail();
                            String image=task.getResult().getUser().getPhotoUrl().toString();

                            DatabaseReference childRef = mRef.child(uid);
                            childRef.child("name").setValue(name);
                            childRef.child("email").setValue(email);
                            childRef.child("image").setValue(image);

                            mProgress.dismiss();

                            Intent mainIntent = new Intent(getApplicationContext(), MainActivity.class);
                            mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                            startActivity(mainIntent);


                        }

                    }
                });
    }
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u sign\u in);
mAuth=FirebaseAuth.getInstance();
mAuthListener=new FirebaseAuth.AuthStateListener(){
@凌驾
AuthStateChanged上的公共void(@NonNull FirebaseAuth FirebaseAuth){
FirebaseUser=firebaseAuth.getCurrentUser();
如果(用户!=null){
//用户已登录
Log.d(标记为“+user.getUid()”);
}否则{
//用户已注销
Log.d(标记“onAuthStateChanged:signed_out”);
}
// ...
}
};
mSignInToolbar=(工具栏)findViewById(R.id.signInToolbar);
设置支持操作栏(mSignInToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mRef=FirebaseDatabase.getInstance().getReference().child(“用户”);
mRef.keepSynced(true);
mEmailField=(EditText)findViewById(R.id.emailField);
mPasswordField=(EditText)findViewById(R.id.passowrdField);
mSigninBtn=(按钮)findViewById(R.id.signinBtn);
mpprogress=新建进度对话框(此对话框);
//初始化Facebook登录按钮
sdkinInitialize(getApplicationContext());
mCallbackManager=CallbackManager.Factory.create();
loginButton=(loginButton)findViewById(R.id.button\u facebook\u login);
setReadPermissions(“电子邮件”、“公共档案”);
registerCallback(mCallbackManager,newfacebookcallback()){
@凌驾
成功时公共无效(LoginResult LoginResult){
Log.d(标签“facebook:onSuccess:+loginResult”);
handleFacebookAccessToken(loginResult.getAccessToken());
}
@凌驾
公开作废{
Log.d(标签“facebook:onCancel”);
// ...
}
@凌驾
public void onError(facebook异常错误){
Log.d(标签“facebook:onError”,错误);
// ...
}
});
}
@凌驾
public void onStart(){
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
//将活动结果传回Facebook SDK
onActivityResult(请求代码、结果代码、数据);
}
私有无效handleFacebookAccessToken(AccessToken令牌){
Log.d(标记“handleFacebookAccessToken:”+token);
设置消息(“登录…”);
mProgress.show();
AuthCredential credential=FacebookAuthProvider.getCredential(token.getToken());
mAuth.SIGNWITH凭证(凭证)
.addOnCompleteListener(这是新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
Log.d(标记“signInWithCredential:onComplete:+task.isSuccessful()”);
//如果登录失败,则向用户显示消息。如果登录成功
//将通知身份验证状态侦听器,并使用逻辑来处理
//可以在侦听器中处理已登录用户。
如果(!task.issusccessful()){
w(标记“signInWithCredential”,task.getException());
Toast.makeText(SignInActivity.this,“身份验证失败”,
吐司。长度(短)。show();
mProgress.disclose();
}否则{
字符串uid=task.getResult().getUser().getUid();
字符串名称=task.getResult().getUser().getDisplayName();
字符串email=task.getResult().getUser().getEmail();
字符串image=task.getResult().getUser().getPhotoUrl().toString();
DatabaseReference childRef=mRef.child(uid);
childRef.child(“名称”).setValue(名称);
childRef.child(“电子邮件”).setValue(电子邮件);
childRef.child(“图像”).setValue(图像);
mProgress.disclose();
Intent maintent=新的Intent(getApplicationContext(),MainActivity.class);
maintent.addFlags(Intent.FLAG\u ACTIVITY\u CLEAR\u TOP);
星触觉(主旨);
}
}
});
}
把这个放在应用程序中


将其放入应用程序。

我通过在真实设备(而不是模拟器)中运行应用程序解决了问题

通过在真实设备(而不是模拟器)中运行应用程序,我已经解决了我的问题

看看你需要做的就是在facebook开发者页面中更改一些权限。请参见下图,确保您也像我一样获得了所需的权限“是”:

看看你都做了些什么
FacebookSdk.sdkInitialize(getApplicationContext());