Reputation: 2521
I'm trying to make a Facebook login method for my app using firebase. i set up my Facebook app and sdk.
Logging in into Facebook works fine.. the problem is when Firebase try to signInWithCredential
the Authentication fails. i didn't find any working solutions yet. So here's my Logcat :
signInWithCredential:failure
com.google.firebase.FirebaseException: An internal error has occurred. [ Unsuccessful debug_token response from Facebook:{"error":{"message":"(#100) You must provide an app access token or a user access token that is an owner or developer of the app","type":"OAuthException","code":100,"fbtrace_id":"CnaYlxG66lv"}} ]
at com.google.android.gms.internal.zzdxm.zzao(Unknown Source)
at com.google.android.gms.internal.zzdwn.zza(Unknown Source)
at com.google.android.gms.internal.zzdxx.zzap(Unknown Source)
at com.google.android.gms.internal.zzdya.onFailure(Unknown Source)
at com.google.android.gms.internal.zzdxo.onTransact(Unknown Source)
at android.os.Binder.execTransact(Binder.java:573)
Here's my Code :
Facebook Button and CallbackManager :
mAuth = FirebaseAuth.getInstance();
mCurrentUser = mAuth.getCurrentUser();
mCallbackManager = CallbackManager.Factory.create();
mFacebook.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mFacebook.setEnabled(false);
LoginManager.getInstance().logInWithReadPermissions(SignUp.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");
Toast.makeText(SignUp.this, "Facebook Login is Canceled",Toast.LENGTH_LONG).show();
// ...
}
@Override
public void onError(FacebookException error) {
Log.d(TAG, "facebook:onError", error);
Toast.makeText(SignUp.this, "Facebook Login Error",Toast.LENGTH_LONG).show();
// ...
}
});
}
});
OnActivityResult :
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mCallbackManager.onActivityResult(requestCode, resultCode, data);
}
Firebase handleFacebookAccessToken :
private void handleFacebookAccessToken(AccessToken token) {
Log.d(TAG, "handleFacebookAccessToken:" + token);
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
mAuth.signInWithCredential(credential)
.addOnCompleteListener(SignUp.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
Log.d(TAG, "signInWithCredential:success");
Toast.makeText(SignUp.this,"Logged in", Toast.LENGTH_LONG).show();
} else {
Log.w(TAG, "signInWithCredential:failure", task.getException());
Toast.makeText(SignUp.this, "Authentication failed.",
Toast.LENGTH_SHORT).show();
}
// ...
}
});
}
Strings.xml : everything is a copy past from the Facebook Login QuickStart
AndroidManifest : everything is a copy past from the Facebook Login QuickStart aswell.
Project Build.gradle :
buildscript {
repositories {
google()
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath 'com.google.gms:google-services:3.2.0'
}
}
allprojects {
repositories {
google()
jcenter()
mavenCentral()
maven {
url "https://maven.google.com" // Google's Maven repository
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
I Think that's everything , if there's something else just point me and I'll update my answer , Thank you!
Upvotes: 0
Views: 1152
Reputation: 600
Try and update your functions inside your onClick function. I tested the method below and it logs in. I'm having a separate issue with firebase (I believe)
this.fbLoginManager.registerCallback(this.callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
Log.v("Main", response.toString());
setProfileToView(object);
}
});
Bundle parameters = new Bundle();
parameters.putString(GraphRequest.FIELDS_PARAM, "id, name, email, gender, birthday, picture.type(large)");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException error) {
Toast.makeText(LoginActivity.this.getApplicationContext(), error.toString(), Toast.LENGTH_SHORT).show();
}
});
Upvotes: 1