Android 通过Firebase登录Facebook-访问令牌被拒绝错误
Facebook登录正确。在Firebase控制台中,我可以看到用户已登录。但是,我无法访问用户的任何信息 我在LogCat中得到以下错误日志: 使用Facebook登录:{AccessToken token:ACCESS\u token\u已删除 权限:[公共\u配置文件、联系人\u电子邮件、用户\u朋友、电子邮件]} 之后,我还收到一个FirebaseError:在LogCat中拒绝许可,并在应用程序中作为祝酒词 接下来,我做了一个整合Facebook和Firebase的项目。我尝试过复制和粘贴源代码,并替换必要的行(如Facebook ID和Firebase URL),但对我来说不起作用 这里是具体的空白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的项目。我尝试过复制和
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结果代码、意图数据){
超级奥纳克蒂