Firebase Demo Day is here! Watch demos of how to build and grow AI-powered, full stack apps using the best of Google.
You can integrate Firebase Authentication with a custom authentication system bymodifying your authentication server to produce custom signed tokens when a usersuccessfully signs in. Your app receives this token and uses it to authenticatewith Firebase.
Before you begin
- If you haven't already, add Firebase to your Android project.
- 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 theFirebase Android BoMto control library versioning.dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:32.7.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:22.3.0")}
- Get your project's server keys:
- Go to the Service Accounts page in your project's settings.
- Click Generate New Private Key at the bottom of the Firebase Admin SDK section of the Service Accounts page.
- The new service account's public/private key pair is automatically saved on your computer. Copy this file to your authentication server.
Authenticate with Firebase
- In your sign-in activity's
onCreate
method, get the shared instance of theFirebaseAuth
object:Kotlin+KTX
private lateinit var auth: FirebaseAuth// ...// Initialize Firebase Authauth = Firebase.auth
Java
private FirebaseAuth mAuth;// ...// Initialize Firebase AuthmAuth = FirebaseAuth.getInstance();
- When initializing your Activity, check to see if the user is currently signed in:
Kotlin+KTX
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
@Overridepublic void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); updateUI(currentUser);}
- When users sign in to your app, send their sign-in credentials (for example, their username and password) to your authentication server. Your server checks the credentials and returns a custom token if they are valid.
- After you receive the custom token from your authentication server, pass it to
signInWithCustomToken
to sign in the user:Kotlin+KTX
customToken?.let { auth.signInWithCustomToken(it) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCustomToken:success") val user = auth.currentUser updateUI(user) } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithCustomToken:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT, ).show() updateUI(null) } }}
Java
mAuth.signInWithCustomToken(mCustomToken) .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, "signInWithCustomToken:success"); FirebaseUser user = mAuth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithCustomToken:failure", task.getException()); Toast.makeText(CustomAuthActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } } });
AuthStateListener
you can use thegetCurrentUser
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 andlinked to the credentials—that is, the user name and password, phonenumber, or auth provider information—the user signed in with. This newaccount is stored as part of your Firebase project, and can be used to identifya 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 authenticationproviders by linking auth provider credentials to anexisting user account.
To sign out a user, call signOut
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2023-12-14 UTC.
[{ "type": "thumb-down", "id": "missingTheInformationINeed", "label":"Missing the information I need" },{ "type": "thumb-down", "id": "tooComplicatedTooManySteps", "label":"Too complicated / too many steps" },{ "type": "thumb-down", "id": "outOfDate", "label":"Out of date" },{ "type": "thumb-down", "id": "samplesCodeIssue", "label":"Samples / code issue" },{ "type": "thumb-down", "id": "otherDown", "label":"Other" }] [{ "type": "thumb-up", "id": "easyToUnderstand", "label":"Easy to understand" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"Solved my problem" },{ "type": "thumb-up", "id": "otherUp", "label":"Other" }]
As an expert in Firebase development and authentication systems, let me provide a comprehensive breakdown of the concepts covered in the provided article:
-
Firebase Overview:
- Products: Firebase offers a suite of products such as Authentication, Realtime Database, Cloud Firestore, Storage, Cloud Functions, Hosting, and more.
- Solutions: The article focuses on the Authentication solution within Firebase.
-
Authentication:
- Introduction: Explains the process of connecting an app to Firebase Authentication.
- Emulator Suite: Provides an overview of the Emulator Suite for local development and testing.
- Authentication Methods:
- Password Authentication
- Email Link Authentication
- Social Logins (Google, Facebook, Apple, Twitter, GitHub, Microsoft, Yahoo, Game Center)
- Phone Number Authentication
- Anonymous Authentication
- Multi-factor Authentication
- Custom Auth System
- Cross-app authentication with shared Keychain
- Linking Multiple Auth Providers
-
Platform-specific Authentication Guides:
- iOS: Covers authentication for iOS apps.
- Android: Covers authentication for Android apps.
- Flutter: Covers authentication for Flutter apps.
- Web: Covers authentication for web apps.
- C++ and Unity: Covers authentication for C++ and Unity applications.
-
Admin Features:
- Introduction: Manages users, imports and creates custom tokens, verifies ID tokens, and more.
-
Cloud Firestore:
- Introduction: Provides an overview of Cloud Firestore, a NoSQL document database.
- Data Management:
- Add and manage data
- Transactions and batched writes
- Data queries and indexing
- Real-time updates
- Security Rules: Explains how to secure and validate data using security rules.
- Firestore Lite Web SDK: Offers a lightweight SDK for web applications.
- Use Cases and Best Practices: Covers various use cases, solutions using Firebase Extensions, and best practices.
-
Realtime Database:
- Introduction: Covers the basics of the Realtime Database.
- Data Management: Similar to Firestore, covers structure, read and write operations, and offline capabilities.
- Security & Rules: Explains how to set up security rules for the Realtime Database.
-
Storage:
- Introduction: Covers Firebase Cloud Storage for file upload, download, and management.
- Security & Rules: Explains how to set up security rules for Cloud Storage.
-
Machine Learning:
- Introduction: Covers using custom models, Cloud Vision APIs, and ML Kit for Firebase.
- Vision Features: Recognize text, label images, recognize landmarks, and more.
-
Hosting:
- Introduction: Covers hosting, deployment, dynamic content, and microservices.
-
Cloud Functions:
- Introduction: Explains Cloud Functions, including triggers, deployment, and runtime options.
- Use Cases: Covers various use cases and examples of using Cloud Functions.
-
Security Rules:
- Introduction: Provides an overview of Firebase Security Rules.
- Rules Language: Describes how the Security Rules language works and how to write basic and secure rules.
- Usage and Performance: Explains billing, limits, monitoring, and performance optimization.
-
App Check:
- Introduction: Explains App Check for securing non-Firebase resources.
-
Extensions:
- Introduction: Covers use cases, installation, management, and various extensions provided by Firebase.
-
Conclusion:
- Sign-out Process: Demonstrates how to sign out a user from Firebase Authentication.
In summary, the article provides a comprehensive guide to Firebase, covering authentication, databases (Firestore and Realtime Database), storage, machine learning, hosting, cloud functions, security rules, and various features that Firebase offers for app development across multiple platforms.