title: Android: Firebase authentication with Facebook failing
body: <p>I'm trying to use Firebase to handle authentication with Facebook logins. I've created the activity by following the documentation on both Firebase's and Facebook's sites and making sure the settings on both sites are filled as needed.</p>
  
  <p>I'm able to log in to Facebook from my app, but when it comes to Firebase saving the user, I get an error:</p>
  
  <blockquote>
    <p>signInWithCredential com.google.firebase.FirebaseException: An
    internal error has occurred. [ Access Not Configured. Google Identity
    Toolkit API has not been used in project 27973105972 before or it is
    disabled. Enable it by visiting https ]</p>
  </blockquote>
  
  <p>On Firebase I have for Sign-in providers: Facebook enabled with correct App ID and App secret.</p>
  
  <p>On Facebook I have added the Firebase's redirect URI to the Valid OAuth redirect URIs list.</p>
  
  <p>As a note, searching for Google Identity Toolkit API, leads me to <a href="https://developers.google.com/identity/toolkit/" rel="nofollow noreferrer">https://developers.google.com/identity/toolkit/</a> where it says to use Firebase Authentication. So not a very helpful error message.</p>
  
  <pre><code>import android.content.Intent;
  import android.os.Bundle;
  import android.support.annotation.NonNull;
  import android.support.v7.app.AppCompatActivity;
  import android.util.Log;
  import android.widget.Toast;
  
  import com.facebook.AccessToken;
  import com.facebook.CallbackManager;
  import com.facebook.FacebookCallback;
  import com.facebook.FacebookException;
  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.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;
  
  public class MainActivity extends AppCompatActivity {
  
      private static final String TAG = MainActivity.class.getSimpleName();
  
      private CallbackManager mCallbackManager;
  
      private FirebaseAuth mAuth;
  
      private FirebaseAuth.AuthStateListener mAuthListener;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
  
          // Initialize Firebase Auth
          mAuth = FirebaseAuth.getInstance();
  
          // [START auth_state_listener]
          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());
                      Toast.makeText(MainActivity.this, "Authentication successful 2.",
                              Toast.LENGTH_SHORT).show();
                  } else {
                      // User is signed out
                      Log.d(TAG, "onAuthStateChanged:signed_out");
                      Toast.makeText(MainActivity.this, "Authentication signed out.",
                              Toast.LENGTH_SHORT).show();
                  }
                  // ...
              }
          };
          // [END auth_state_listener]
  
          // Initialize Facebook Login button
          mCallbackManager = CallbackManager.Factory.create();
          LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
          loginButton.setReadPermissions("email", "public_profile");
          loginButton.registerCallback(mCallbackManager, new FacebookCallback&lt;LoginResult&gt;() {
              @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(MainActivity.this, "facebook onCancel",
                          Toast.LENGTH_SHORT).show();
                  // ...
              }
  
              @Override
              public void onError(FacebookException error) {
                  Log.d(TAG, "facebook:onError", error);
                  Toast.makeText(MainActivity.this, "facebook onError",
                          Toast.LENGTH_SHORT).show();
                  // ...
              }
          });
          // [END initialize_fblogin]
      }
  
      @Override
      public void onStart() {
          super.onStart();
          // [START on_start_add_listener]
          mAuth.addAuthStateListener(mAuthListener);
      }
  
      @Override
      public void onStop() {
          super.onStop();
          // [START on_stop_remove_listener]
          if (mAuthListener != null) {
              mAuth.removeAuthStateListener(mAuthListener);
          }
      }
  
      @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);
      }
  
      // [START auth_with_facebook]
      private void handleFacebookAccessToken(AccessToken token) {
          Log.d(TAG, "handleFacebookAccessToken:" + token);
  
          AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
  
          mAuth.signInWithCredential(credential)
                  .addOnCompleteListener(this, new OnCompleteListener&lt;AuthResult&gt;() {
                      @Override
                      public void onComplete(@NonNull Task&lt;AuthResult&gt; 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(MainActivity.this, "Authentication failed.",
                                      Toast.LENGTH_SHORT).show();
                          } else {
                              Toast.makeText(MainActivity.this, "Authentication successful.",
                                      Toast.LENGTH_SHORT).show();
                          }
  
                          // ...
                      }
                  });
      }
  }
  </code></pre>