Authenticate Using Facebook Login on Android

You can let your users authenticate with Firebase using their Facebook accounts by integrating Facebook Login into your app.

Before you begin

  1. If you haven't already, add Firebase to your Android project .

  2. On the Facebook for Developers site, get the App ID and an App Secret for your app.
  3. Enable Facebook Login:
    1. In the Firebase console , open the Auth section.
    2. On the Sign in method tab, enable the Facebook sign-in method and specify the App ID and App Secret you got from Facebook.
    3. Then, make sure your OAuth redirect URI (e.g. my-app-12345.firebaseapp.com/__/auth/handler ) is listed as one of your OAuth redirect URIs in your Facebook app's settings page on the Facebook for Developers site in the Product Settings > Facebook Login config.
  4. In your module (app-level) Gradle file (usually <project>/<app-module>/build.gradle.kts or <project>/<app-module>/build.gradle ), add the dependency for the Firebase Authentication library for Android. We recommend using the Firebase Android BoM to control library versioning.

     dependencies 
      
     { 
      
      // Import the BoM 
    for the Firebase platform 
      
     implementation 
     ( 
     platform 
     ( 
     "com.google.firebase:firebase-bom:34.2.0" 
     )) 
      
      // Add the dependency for the Firebase Authentication 
    library 
      
     // When using the BoM 
    , you don't specify versions in Firebase library dependencies 
      
      implementation 
     ( 
     "com.google.firebase:firebase-auth" 
     ) 
     } 
    

    By using the Firebase Android BoM , your app will always use compatible versions of Firebase Android libraries.

    (Alternative)   Add Firebase library dependencies  without  using the BoM

    If you choose not to use the Firebase BoM , you must specify each Firebase library version in its dependency line.

    Note that if you use multiple Firebase libraries in your app, we strongly recommend using the BoM to manage library versions, which ensures that all versions are compatible.

     dependencies 
      
     { 
      
      // Add the dependency for the Firebase Authentication 
    library 
      
     // When NOT using the BoM 
    , you must specify versions in Firebase library dependencies 
      
      implementation 
     ( 
     "com.google.firebase:firebase-auth:24.0.1" 
     ) 
     } 
    

Authenticate with Firebase

  1. Integrate Facebook Login into your app by following the developer's documentation . When you configure the LoginButton or LoginManager object, request the public_profile and email permissions. If you integrated Facebook Login using a LoginButton , your sign-in activity has code similar to the following:

    Kotlin

     // Initialize Facebook Login button 
     callbackManager 
      
     = 
      
     CallbackManager 
     . 
     Factory 
     . 
     create 
     () 
     buttonFacebookLogin 
     . 
     setReadPermissions 
     ( 
     "email" 
     , 
      
     "public_profile" 
     ) 
     buttonFacebookLogin 
     . 
     registerCallback 
     ( 
      
     callbackManager 
     , 
      
     object 
      
     : 
      
     FacebookCallback<LoginResult> 
      
     { 
      
     override 
      
     fun 
      
     onSuccess 
     ( 
     loginResult 
     : 
      
     LoginResult 
     ) 
      
     { 
      
     Log 
     . 
     d 
     ( 
     TAG 
     , 
      
     "facebook:onSuccess: 
     $ 
     loginResult 
     " 
     ) 
      
     handleFacebookAccessToken 
     ( 
     loginResult 
     . 
     accessToken 
     ) 
      
     } 
      
     override 
      
     fun 
      
     onCancel 
     () 
      
     { 
      
     Log 
     . 
     d 
     ( 
     TAG 
     , 
      
     "facebook:onCancel" 
     ) 
      
     } 
      
     override 
      
     fun 
      
     onError 
     ( 
     error 
     : 
      
     FacebookException 
     ) 
      
     { 
      
     Log 
     . 
     d 
     ( 
     TAG 
     , 
      
     "facebook:onError" 
     , 
      
     error 
     ) 
      
     } 
      
     }, 
     ) 
     // ... 
     override 
      
     fun 
      
     onActivityResult 
     ( 
     requestCode 
     : 
      
     Int 
     , 
      
     resultCode 
     : 
      
     Int 
     , 
      
     data 
     : 
      
     Intent?) 
      
     { 
      
     super 
     . 
     onActivityResult 
     ( 
     requestCode 
     , 
      
     resultCode 
     , 
      
     data 
     ) 
      
     // Pass the activity result back to the Facebook SDK 
      
     callbackManager 
     . 
     onActivityResult 
     ( 
     requestCode 
     , 
      
     resultCode 
     , 
      
     data 
     ) 
     } 
      
    

    Java

     // Initialize Facebook Login button 
     mCallbackManager 
      
     = 
      
     CallbackManager 
     . 
     Factory 
     . 
     create 
     (); 
     LoginButton 
      
     loginButton 
      
     = 
      
     findViewById 
     ( 
     R 
     . 
     id 
     . 
     button_sign_in 
     ); 
     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 
     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 
     ); 
     } 
      
    
  2. In your sign-in activity's onCreate method, get the shared instance of the FirebaseAuth object:

    Kotlin

     private 
      
     lateinit 
      
     var 
      
     auth 
     : 
      
     FirebaseAuth 
     // ... 
     // Initialize Firebase Auth 
     auth 
      
     = 
      
     Firebase 
     . 
     auth  
     
     . 
     kt 
    

Java

 private 
  
 FirebaseAuth 
  
 mAuth 
 ; 
 // ... 
 // Initialize Firebase Auth 
 mAuth 
  
 = 
  
 FirebaseAuth 
 . 
 getInstance 
 (); 
  
  • When initializing your Activity, check to see if the user is currently signed in:

    Kotlin

     public 
      
     override 
      
     fun 
      
     onStart 
     () 
      
     { 
      
     super 
     . 
     onStart 
     () 
      
     // Check if user is signed in (non-null) and update UI accordingly. 
      
     val 
      
     currentUser 
      
     = 
      
     auth 
     . 
     currentUser 
      
     updateUI 
     ( 
     currentUser 
     ) 
     } 
      
    

    Java

     @Override 
     public 
      
     void 
      
     onStart 
     () 
      
     { 
      
     super 
     . 
     onStart 
     (); 
      
     // Check if user is signed in (non-null) and update UI accordingly. 
      
     FirebaseUser 
      
     currentUser 
      
     = 
      
     mAuth 
     . 
     getCurrentUser 
     (); 
      
     updateUI 
     ( 
     currentUser 
     ); 
     } 
      
    
  • After a user successfully signs in, in the LoginButton 's onSuccess callback method, get an access token for the signed-in user, exchange it for a Firebase credential, and authenticate with Firebase using the Firebase credential:

    Kotlin

     private 
      
     fun 
      
     handleFacebookAccessToken 
     ( 
     token 
     : 
      
     AccessToken 
     ) 
      
     { 
      
     Log 
     . 
     d 
     ( 
     TAG 
     , 
      
     "handleFacebookAccessToken: 
     $ 
     token 
     " 
     ) 
      
     val 
      
     credential 
      
     = 
      
     FacebookAuthProvider 
     . 
     getCredential 
     ( 
     token 
     . 
     token 
     ) 
      
     auth 
     . 
     signInWithCredential 
     ( 
     credential 
     ) 
      
     . 
     addOnCompleteListener 
     ( 
     this 
     ) 
      
     { 
      
     task 
      
     - 
    >  
     if 
      
     ( 
     task 
     . 
     isSuccessful 
     ) 
      
     { 
      
     // Sign in success, update UI with the signed-in user's information 
      
     Log 
     . 
     d 
     ( 
     TAG 
     , 
      
     "signInWithCredential:success" 
     ) 
      
     val 
      
     user 
      
     = 
      
     auth 
     . 
     currentUser 
      
     updateUI 
     ( 
     user 
     ) 
      
     } 
      
     else 
      
     { 
      
     // If sign in fails, display a message to the user. 
      
     Log 
     . 
     w 
     ( 
     TAG 
     , 
      
     "signInWithCredential:failure" 
     , 
      
     task 
     . 
     exception 
     ) 
      
     Toast 
     . 
     makeText 
     ( 
      
     baseContext 
     , 
      
     "Authentication failed." 
     , 
      
     Toast 
     . 
     LENGTH_SHORT 
     , 
      
     ). 
     show 
     () 
      
     updateUI 
     ( 
     null 
     ) 
      
     } 
      
     } 
     } 
      
    

    Java

     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 
     ( 
     user 
     ); 
      
     } 
      
     else 
      
     { 
      
     // If sign in fails, display a message to the user. 
      
     Log 
     . 
     w 
     ( 
     TAG 
     , 
      
     "signInWithCredential:failure" 
     , 
      
     task 
     . 
     getException 
     ()); 
      
     Toast 
     . 
     makeText 
     ( 
     FacebookLoginActivity 
     . 
     this 
     , 
      
     "Authentication failed." 
     , 
      
     Toast 
     . 
     LENGTH_SHORT 
     ). 
     show 
     (); 
      
     updateUI 
     ( 
     null 
     ); 
      
     } 
      
     } 
      
     }); 
     } 
      
    
    If the call to signInWithCredential succeeds, you can use the getCurrentUser method to get the user's account data.
  • Next steps

    After a user signs in for the first time, a new user account is created and linked to the credentials—that is, the user name and password, phone number, or auth provider information—the user signed in with. This new account is stored as part of your Firebase project, and can be used to identify a user across every app in your project, regardless of how the user signs in.

    • In your apps, you can get the user's basic profile information from the FirebaseUser object. See Manage Users .

    • In your Firebase Realtime Database and Cloud Storage Security Rules , you can get the signed-in user's unique user ID from the auth variable, and use it to control what data a user can access.

    You can allow users to sign in to your app using multiple authentication providers by linking auth provider credentials to an existing user account.

    To sign out a user, call signOut :

    Kotlin

     Firebase 
     . 
     auth 
     . 
     signOut 
     () 
      
    

    Java

     FirebaseAuth 
     . 
     getInstance 
     (). 
     signOut 
     (); 
      
    
    Design a Mobile Site
    View Site in Mobile | Classic
    Share by: