Android 通过Firebase登录Facebook-访问令牌被拒绝错误

Android 通过Firebase登录Facebook-访问令牌被拒绝错误,android,firebase,facebook-authentication,Android,Firebase,Facebook Authentication,Facebook登录正确。在Firebase控制台中,我可以看到用户已登录。但是,我无法访问用户的任何信息 我在LogCat中得到以下错误日志: 使用Facebook登录:{AccessToken token:ACCESS\u token\u已删除 权限:[公共\u配置文件、联系人\u电子邮件、用户\u朋友、电子邮件]} 之后,我还收到一个FirebaseError:在LogCat中拒绝许可,并在应用程序中作为祝酒词 接下来,我做了一个整合Facebook和Firebase的项目。我尝试过复制和

Facebook登录正确。在Firebase控制台中,我可以看到用户已登录。但是,我无法访问用户的任何信息

我在LogCat中得到以下错误日志:

使用Facebook登录:{AccessToken token:ACCESS\u token\u已删除 权限:[公共\u配置文件、联系人\u电子邮件、用户\u朋友、电子邮件]}

之后,我还收到一个FirebaseError:在LogCat中拒绝许可,并在应用程序中作为祝酒词

接下来,我做了一个整合Facebook和Firebase的项目。我尝试过复制和粘贴源代码,并替换必要的行(如Facebook ID和Firebase URL),但对我来说不起作用

这里是具体的空白

private void signInWithFacebook(AccessToken token) {
Log.d(TAG, "signInWithFacebook:" + token.getToken());

showProgressDialog();


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(LoginActivity.this, "Authentication failed.",
                            Toast.LENGTH_SHORT).show();
                }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();

                     //Create a new User and Save it in Firebase database
                    User user = new User(uid,name,null,email,name);

                    mRef.child(uid).setValue(user);

                    Log.d(TAG, uid);

                    Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                    intent.putExtra("user_id",uid);
                    intent.putExtra("profile_picture",image);
                    startActivity(intent);
                    finish();
                }

                hideProgressDialog();
            }
        });
}
使用Facebook(AccessToken令牌)进行私有无效登录{
d(标记为“signInWithFacebook:+token.getToken());
showProgressDialog();
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(LoginActivity.this,“身份验证失败”,
吐司。长度(短)。show();
}否则{
字符串uid=task.getResult().getUser().getUid();
字符串名称=task.getResult().getUser().getDisplayName();
字符串email=task.getResult().getUser().getEmail();
字符串image=task.getResult().getUser().getPhotoUrl().toString();
//创建新用户并将其保存在Firebase数据库中
User User=新用户(uid,name,null,email,name);
mRef.child(uid).setValue(用户);
Log.d(标签,uid);
Intent Intent=新的Intent(getApplicationContext(),MainActivity.class);
intent.putExtra(“用户id”,uid);
intent.putExtra(“个人资料图片”,图像);
星触觉(意向);
完成();
}
hideProgressDialog();
}
});
}
这是完整的代码

public class LoginActivity extends AppCompatActivity {

private static final String TAG = "AndroidBash";
public User user;
private EditText email;
private EditText password;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private ProgressDialog mProgressDialog;
private DatabaseReference mDatabase;
//Add YOUR Firebase Reference URL instead of the following URL
private Firebase mRef=new Firebase("https://firebase.firebaseio.com");

//FaceBook callbackManager
private CallbackManager callbackManager;
//

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    mDatabase = FirebaseDatabase.getInstance().getReference();
    mAuth = FirebaseAuth.getInstance();

    FirebaseUser mUser = mAuth.getCurrentUser();
    if (mUser != null) {
        // User is signed in
        Intent intent = new Intent(getApplicationContext(), MainActivity.class);
        String uid = mAuth.getCurrentUser().getUid();
        String image=mAuth.getCurrentUser().getPhotoUrl().toString();
        intent.putExtra("user_id", uid);
        if(image!=null || image!=""){
            intent.putExtra("profile_picture",image);
        }
        startActivity(intent);
        finish();
        Log.d(TAG, "onAuthStateChanged:signed_in:" + mUser.getUid());
    }

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

        }
    };

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

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

        @Override
        public void onError(FacebookException error) {
            Log.d(TAG, "facebook:onError", error);
        }
    });
    //
   }
@Override
protected void onStart() {
    super.onStart();
    email = (EditText) findViewById(R.id.edit_text_email_id);
    password = (EditText) findViewById(R.id.edit_text_password);
    mAuth.addAuthStateListener(mAuthListener);
}

@Override
public void onStop() {
    super.onStop();
    if (mAuthListener != null) {
        mAuth.removeAuthStateListener(mAuthListener);
    }
}


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

protected void setUpUser() {
    user = new User();
    user.setEmail(email.getText().toString());
    user.setPassword(password.getText().toString());
}

public void onSignUpClicked(View view) {
    Intent intent = new Intent(this, SignUpActivity.class);
    startActivity(intent);
}

public void onLoginClicked(View view) {
    setUpUser();
    signIn(email.getText().toString(), password.getText().toString());
}

private void signIn(String email, String password) {
    Log.d(TAG, "signIn:" + email);
    if (!validateForm()) {
        return;
    }

    showProgressDialog();

    mAuth.signInWithEmailAndPassword(email, password)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    Log.d(TAG, "signInWithEmail: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, "signInWithEmail", task.getException());
                        Toast.makeText(LoginActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                    } else {
                        Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                        String uid = mAuth.getCurrentUser().getUid();
                        intent.putExtra("user_id", uid);
                        startActivity(intent);
                        finish();
                    }

                    hideProgressDialog();
                }
            });
    //
}

private boolean validateForm() {
    boolean valid = true;

    String userEmail = email.getText().toString();
    if (TextUtils.isEmpty(userEmail)) {
        email.setError("Required.");
        valid = false;
    } else {
        email.setError(null);
    }

    String userPassword = password.getText().toString();
    if (TextUtils.isEmpty(userPassword)) {
        password.setError("Required.");
        valid = false;
    } else {
        password.setError(null);
    }

    return valid;
}


private void signInWithFacebook(AccessToken token) {
    Log.d(TAG, "signInWithFacebook:" + token.getToken());

    showProgressDialog();


    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(LoginActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                    }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();

                         //Create a new User and Save it in Firebase database
                        User user = new User(uid,name,null,email,name);

                        mRef.child(uid).setValue(user);

                        Log.d(TAG, uid);

                        Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                        intent.putExtra("user_id",uid);
                        intent.putExtra("profile_picture",image);
                        startActivity(intent);
                        finish();
                    }

                    hideProgressDialog();
                }
            });
}


public void showProgressDialog() {
    if (mProgressDialog == null) {
        mProgressDialog = new ProgressDialog(this);
        mProgressDialog.setMessage(getString(R.string.loading));
        mProgressDialog.setIndeterminate(true);
    }

    mProgressDialog.show();
}

public void hideProgressDialog() {
    if (mProgressDialog != null && mProgressDialog.isShowing()) {
        mProgressDialog.dismiss();
    }
}

}
公共类LoginActivity扩展了AppCompatActivity{
私有静态最终字符串TAG=“AndroidBash”;
公共用户;
私人文本电子邮件;
私有文本密码;
私人消防队;
私有FirebaseAuth.AuthStateListener mAuthListener;
private ProgressDialog mProgressDialog;
私有数据库参考数据库;
//添加您的Firebase参考URL,而不是以下URL
private Firebase mRef=新Firebase(“https://firebase.firebaseio.com");
//FaceBook回拨管理器
私人CallbackManager CallbackManager;
//
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u登录);
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
mDatabase=FirebaseDatabase.getInstance().getReference();
mAuth=FirebaseAuth.getInstance();
FirebaseUser mUser=mAuth.getCurrentUser();
if(mUser!=null){
//用户已登录
Intent Intent=新的Intent(getApplicationContext(),MainActivity.class);
字符串uid=mAuth.getCurrentUser().getUid();
字符串image=mAuth.getCurrentUser().getPhotoUrl().toString();
intent.putExtra(“用户id”,uid);
if(image!=null | | image!=“”){
intent.putExtra(“个人资料图片”,图像);
}
星触觉(意向);
完成();
Log.d(标记“onAuthStateChanged:signed_in:”+mUser.getUid());
}
mAuthListener=new FirebaseAuth.AuthStateListener(){
@凌驾
AuthStateChanged上的公共void(@NonNull FirebaseAuth FirebaseAuth){
FirebaseUser mUser=firebaseAuth.getCurrentUser();
if(mUser!=null){
//用户已登录
Log.d(标记“onAuthStateChanged:signed_in:”+mUser.getUid());
}否则{
//用户已注销
Log.d(标记“onAuthStateChanged:signed_out”);
}
}
};
//脸谱网
sdkinInitialize(getApplicationContext());
callbackManager=callbackManager.Factory.create();
LoginButton LoginButton=(LoginButton)findViewById(R.id.button\u facebook\u login);
setReadPermissions(“电子邮件”、“公共档案”);
registerCallback(callbackManager,newfacebookcallback()){
@凌驾
成功时公共无效(LoginResult LoginResult){
Log.d(标签“facebook:onSuccess:+loginResult”);
使用Facebook登录(loginResult.getAccessToken());
}
@凌驾
公开作废{
Log.d(标签“facebook:onCancel”);
}
@凌驾
public void onError(facebook异常错误){
Log.d(标签“facebook:onError”,错误);
}
});
//
}
@凌驾
受保护的void onStart(){
super.onStart();
email=(EditText)findviewbyd(R.id.edit\u text\u email\u id);
密码=(EditText)findViewById(R.id.edit\u text\u password);
mAuth.addAuthStateListener(mAuthListener);
}
@凌驾
公共void onStop(){
super.onStop();
if(mAuthListener!=null){
removeAuthStateListener(mAuthListener);
}
}
//脸谱网
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
超级奥纳克蒂