Connect your App to Firebase

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

Create a Database

  1. Navigate to the Realtime Database section of the Firebase console . You'll be prompted to select an existing Firebase project. Follow the database creation workflow.

  2. Select a starting mode for your Firebase Security Rules :

    Test mode

    Good for getting started with the mobile and web client libraries, but allows anyone to read and overwrite your data. After testing, make sure to review the Understand Firebase Realtime Database Rules section.

    To get started with the web, Apple, or Android SDK, select testmode.

    Locked mode

    Denies all reads and writes from mobile and web clients. Your authenticated application servers can still access your database.

  3. Choose a location for the database.

    Depending on the location of the database , the URL for the new database will be in one of the following forms:

    • DATABASE_NAME .firebaseio.com (for databases in us-central1 )

    • DATABASE_NAME . REGION .firebasedatabase.app (for databases in all other locations)

  4. Click Done.

When you enable Realtime Database , it also enables the API in the Cloud API Manager .

Add the Realtime Database SDK to your app

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 Realtime Database 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 Realtime Database 
library 
  
 // When using the BoM 
, you don't specify versions in Firebase library dependencies 
  
  implementation 
 ( 
 "com.google.firebase:firebase-database" 
 ) 
 } 

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 Realtime Database 
library 
  
 // When NOT using the BoM 
, you must specify versions in Firebase library dependencies 
  
  implementation 
 ( 
 "com.google.firebase:firebase-database:22.0.0" 
 ) 
 } 

Configure Realtime Database Security Rules

The Realtime Database provides a declarative rules language that allows you to define how your data should be structured, how it should be indexed, and when your data can be read from and written to.

Write to your database

Retrieve an instance of your database using getInstance() and reference the location you want to write to.

Kotlin

 // Write a message to the database 
 val 
  
 database 
  
 = 
  
 Firebase 
 . 
 database 
 val 
  
 myRef 
  
 = 
  
 database 
 . 
 getReference 
 ( 
 "message" 
 ) 
 myRef 
 . 
 setValue 
 ( 
 "Hello, World!" 
 ) 
  

Java

 // Write a message to the database 
 FirebaseDatabase 
  
 database 
  
 = 
  
 FirebaseDatabase 
 . 
 getInstance 
 (); 
 DatabaseReference 
  
 myRef 
  
 = 
  
 database 
 . 
 getReference 
 ( 
 "message" 
 ); 
 myRef 
 . 
 setValue 
 ( 
 "Hello, World!" 
 ); 
  

You can save a range of data types to the database this way, including Java objects. When you save an object the responses from any getters will be saved as children of this location.

Read from your database

To make your app data update in realtime, you should add a ValueEventListener to the reference you just created.

The onDataChange() method in this class is triggered once when the listener is attached and again every time the data changes, including the children.

Kotlin

 // Read from the database 
 myRef 
 . 
 addValueEventListener 
 ( 
 object 
  
 : 
  
 ValueEventListener 
  
 { 
  
 override 
  
 fun 
  
 onDataChange 
 ( 
 dataSnapshot 
 : 
  
 DataSnapshot 
 ) 
  
 { 
  
 // This method is called once with the initial value and again 
  
 // whenever data at this location is updated. 
  
 val 
  
 value 
  
 = 
  
 dataSnapshot 
 . 
 getValue<String> 
 () 
  
 Log 
 . 
 d 
 ( 
 TAG 
 , 
  
 "Value is: 
 $ 
 value 
 " 
 ) 
  
 } 
  
 override 
  
 fun 
  
 onCancelled 
 ( 
 error 
 : 
  
 DatabaseError 
 ) 
  
 { 
  
 // Failed to read value 
  
 Log 
 . 
 w 
 ( 
 TAG 
 , 
  
 "Failed to read value." 
 , 
  
 error 
 . 
 toException 
 ()) 
  
 } 
 }) 
  

Java

 // Read from the database 
 myRef 
 . 
 addValueEventListener 
 ( 
 new 
  
 ValueEventListener 
 () 
  
 { 
  
 @Override 
  
 public 
  
 void 
  
 onDataChange 
 ( 
 @NonNull 
  
 DataSnapshot 
  
 dataSnapshot 
 ) 
  
 { 
  
 // This method is called once with the initial value and again 
  
 // whenever data at this location is updated. 
  
 String 
  
 value 
  
 = 
  
 dataSnapshot 
 . 
 getValue 
 ( 
 String 
 . 
 class 
 ); 
  
 Log 
 . 
 d 
 ( 
 TAG 
 , 
  
 "Value is: " 
  
 + 
  
 value 
 ); 
  
 } 
  
 @Override 
  
 public 
  
 void 
  
 onCancelled 
 ( 
 @NonNull 
  
 DatabaseError 
  
 error 
 ) 
  
 { 
  
 // Failed to read value 
  
 Log 
 . 
 w 
 ( 
 TAG 
 , 
  
 "Failed to read value." 
 , 
  
 error 
 . 
 toException 
 ()); 
  
 } 
 }); 
  

Optional: Configure ProGuard

When using Firebase Realtime Database in your app along with ProGuard, you need to consider how your model objects will be serialized and deserialized after obfuscation. If you use DataSnapshot.getValue(Class) or DatabaseReference.setValue(Object) to read and write data, you will need to add rules to the proguard-rules.pro file:

   
 # 
  
 Add 
  
 this 
  
 global 
  
 rule 
  
 - 
 keepattributes 
  
 Signature 
  
 # 
  
 This 
  
 rule 
  
 will 
  
 properly 
  
 ProGuard 
  
 all 
  
 the 
  
 model 
  
 classes 
  
 in 
  
 # 
  
 the 
  
 package 
  
 com 
 . 
 yourcompany 
 . 
 models 
 . 
  
 # 
  
 Modify 
  
 this 
  
 rule 
  
 to 
  
 fit 
  
 the 
  
 structure 
  
 of 
  
 your 
  
 app 
 . 
  
 - 
 keepclassmembers 
  
 class 
  
 com 
 . 
 yourcompany 
 . 
 models 
 . 
 ** 
  
 { 
  
 * 
 ; 
  
 } 
 

To get help for questions or issues related to ProGuard, visit the Guardsquare Community forums to get assistance from an expert.

Prepare for Launch

Before launching your app, we recommend walking through our launch checklist to make sure your app is ready to go!

Be sure to enable App Check to help ensure that only your apps can access your databases.

Next Steps

Create a Mobile Website
View Site in Mobile | Classic
Share by: