如果我使用 facebook 进行身份验证,如何获取 Firebase auth uid?



Facebook身份验证成功,但我想知道如何获得firebase auth.uid。这是我的安卓应用firestore脸书登录代码。

登录。活动:

FacebookSdk.sdkInitialize(getApplicationContext());
setContentView(R.layout.activity_login);

loginButton = (LoginButton) findViewById(R.id.login_button);
ImageView ivLoginScreenImage = (ImageView) findViewById(R.id.ivLoginScreenImage);
Glide.with(this)
.load(R.drawable.image_swing)
.fitCenter()
.into(ivLoginScreenImage);
callbackManager = CallbackManager.Factory.create();

loginButton.setReadPermissions(Arrays.asList("public_profile", "email"));




loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(final LoginResult loginResult) {
loginButton.setVisibility(View.INVISIBLE);
Log.d(TAG, "Login Success " + loginResult.toString());
handleFacebookAccessToken(loginResult.getAccessToken());




ProfileTracker profileTracker = new ProfileTracker() {
@Override
protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) {
this.stopTracking();
Profile.setCurrentProfile(currentProfile);
Log.d(TAG,"Setting current profile " + Profile.getCurrentProfile().getFirstName());
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
User user = User.fromJSON(object);
Log.d(TAG, "Returning logged user info " + user.getName() + " " + " " + user.getEmail());
//On Successful login
Intent returnIntent = new Intent();
returnIntent.putExtra("loggedUser", user);
setResult(Activity.RESULT_OK, returnIntent);
finish();
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id, name, email, gender, age_range, link");
request.setParameters(parameters);
request.executeAsync();
}
};
profileTracker.startTracking();
}


@Override
public void onCancel() {
Log.d(TAG, "Cancelled");
Intent returnIntent = new Intent();
setResult(Activity.RESULT_CANCELED, returnIntent);
finish();
}

@Override
public void onError(FacebookException e) {
Log.e(TAG, "Error " + e.toString());
Intent returnIntent = new Intent();
setResult(Activity.RESULT_CANCELED, returnIntent);
finish();
}


});
}
private void handleFacebookAccessToken(AccessToken token) {
Log.d(TAG, "handleFacebookAccessToken:" + token);
mAuth = FirebaseAuth.getInstance();


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();


if (user != null) {
Log.i(TAG, "email" + user.getEmail());
}

} else {
// If sign in fails, display a message to the user.
Log.w(TAG, "signInWithCredential:failure", task.getException());

}


}
});
}








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

我已经尝试过这个代码,并在一个将更新到firestore的代码中调用了userr。登录成功,但此用户为空,因此我得到错误以下

FirebaseAuth mAuth;
mAuth =FirebaseAuth.getInstance();
FirebaseUser userr = mAuth.getCurrentUser().getUid;

错误为尝试在空对象引用上调用虚拟方法"java.lang.String.com.google.firebase.auth.FirebaseUser.getUid((">

伙计们需要帮助。

handleFacebookAccessToken()

if (task.isSuccessful()) {

Log.d(TAG, "signInWithCredential:success");
FirebaseUser user = mAuth.getCurrentUser();
if (user != null) {
Log.i(TAG, "email" + user.getEmail());
//--------------Here is the UID
Log.i(TAG, "uid" + user.getUid());
}
}

最新更新