我开始在android studio上进行开发,我想创建一个可以从我的facebook帐户连接的简单应用程序。 为此: 我使用:-developers.facebook.com中的工具。 -Firebase的工具。
代码如下:
package com.fb_.fblogin.facebooklogin;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.FirebaseApp;
import com.google.firebase.auth.AuthCredential;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FacebookAuthProvider;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import java.lang.reflect.ReflectPermission;
import java.util.Arrays;
public class MainActivity extends AppCompatActivity {
private FirebaseAuth mAuth;
private CallbackManager mCallbackManager;
private static final String TAG = "FACELOG";
private Button mFacebookBtn;
private Button mLogoutBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAuth = FirebaseAuth.getInstance();
// Initialize Facebook Login button
mFacebookBtn = findViewById(R.id.button3);
mLogoutBtn = (Button) findViewById(R.id.button4);
mCallbackManager = CallbackManager.Factory.create();
mFacebookBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("email", "public_profile"));
LoginManager.getInstance().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);
// ...
}
});
}
});
mLogoutBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mAuth.signOut();
LoginManager.getInstance().logOut();
}
});
}
// ...
@Override
public void onStart() {
super.onStart();
// Check if user is signed in (non-null) and update UI accordingly.
FirebaseUser currentUser = mAuth.getCurrentUser();
if(currentUser != null)
{
updateUI();
}
//updateUI(currentUser);
}
private void updateUI(){
Toast.makeText(MainActivity.this, "You're logged in ",Toast.LENGTH_LONG).show();
Intent accountIntent = new Intent(MainActivity.this, AccountActivity.class);
startActivity(accountIntent);
finish();
}
@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);
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// Sign in success, update UI with the signed-in user's information
Log.d(TAG, "signInWithCredential:success");
FirebaseUser user = mAuth.getCurrentUser();
updateUI();
} else {
// If sign in fails, display a message to the user.
Log.w(TAG, "signInWithCredential:failure", task.getException());
Toast.makeText(MainActivity.this, "Authentication failed.",
Toast.LENGTH_SHORT).show();
}
// ...
}
});
}
}
好多代码... 这里的问题在 if(task.isSuccessful())中,它总是在 handleFacebookAccessToken 函数中返回FALSE。 我还注意到,在 handleFacebookAccessToken 函数的 token 变量中,它包含 {AccessToken令牌:ACCESS_TOKEN_REMOVED权限:[public_profile,电子邮件]} 可能有问题吗? 如果是,我该怎么办才能解决此问题。
最诚挚的问候,