silverFox silverFox - 1 month ago 13
Android Question

Firebase facebook authentication showing weird activity

We are implementing

Firebase Facebook authentication
for one of our projects. We have followed the steps mentioned in the documentation as well

Here is the oAuth Url,

https://<APP_NAME>.firebaseapp.com/__/auth/handler


have added rest of the credentials as well i.e the
APP_ID
&
APP_SECRET
, moreover the app is in development stage and have added the
key hash
as well to the
facebook
portal and firebase portal.

The
Login
initial flow works well but when the user
confirm
the permission to grant access the
callback
register doesn't respond at all, neither with
negative
nor
positive
acknowledgement.

Here's our piece of code

private static final String TAG = "FacebookLogin";

private CallbackManager mCallbackManager;

private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;

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");
}
// ...
}
};

// Initialize Facebook Login button
mCallbackManager = CallbackManager.Factory.create();
LoginButton 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
public void onStop() {
super.onStop();
if (mAuthListener != null) {
mAuth.removeAuthStateListener(mAuthListener);
}
}

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

// ...
}
});
}


Please let us know if we missed anything. I'm assuming there's something wrong about the
callback
url, thus bit more information on the same would be helpful as firebase documentation doesn't clearly state about how to build up that url.

TIA

Answer

Did you add

mCallbackManager.onActivityResult(requestCode, resultCode, data);

in your onActivityResult block?

Edit

Referring to the sample from Firebase https://github.com/firebase/quickstart-android/blob/master/auth/app/src/minSdkJellybean/java/com/google/firebase/quickstart/auth/FacebookLoginActivity.java,

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

If this is not added, there would be no callback.

Comments