
When most Android developers think of Firebase, two things come to mind: Crashlytics (for crash reports) and Authentication (for user login).
But here’s the plot twist: Firebase is way more powerful than just catching crashes and logging people in. If that’s all you’re using it for, you’re missing out on a buffet of tools that can boost performance, delight users, and save you weeks of dev time.
Let’s dive into the lesser-used yet insanely powerful Firebase features every Android dev should be using in 2025.
1. Remote Config: Ship Features Without Releasing Builds
Problem: Pushing a tiny copy tweak or toggling a feature means going through the Play Store release cycle.
Solution: Firebase Remote Config lets you change your app’s behavior instantly from the console.
Gradle
dependencies {
implementation(platform("com.google.firebase:firebase-bom:latest.release"))
implementation("com.google.firebase:firebase-config-ktx")
}
Kotlin
val remoteConfig = Firebase.remoteConfig
val settings = remoteConfigSettings {
minimumFetchIntervalInSeconds = 3600
}
remoteConfig.setConfigSettingsAsync(settings)
lifecycleScope.launch {
val updated = remoteConfig.fetchAndActivate().await()
if (updated) {
val welcomeText = remoteConfig["welcome_text"].asString()
textView.text = welcomeText
}
}
Use cases:
- A/B testing new features
- Disabling buggy features without a hotfix release
- Localizing content instantly for special events
💡 Pro tip: Use Firebase Personalization (A/B Testing + Remote Config) to automatically target the better-performing variation to each user segment.
2. App Check: Block Bots, Emulators & Abuse
Problem: Hackers love abusing APIs using emulators, rooted devices, or stolen API keys.
Solution: App Check protects your backend by verifying requests come from your signed, untampered app.
Gradle
dependencies {
implementation("com.google.firebase:firebase-appcheck-playintegrity")
debugImplementation("com.google.firebase:firebase-appcheck-debug")
}
Kotlin
if (BuildConfig.DEBUG) {
FirebaseAppCheck.getInstance()
.installAppCheckProviderFactory(DebugAppCheckProviderFactory.getInstance())
} else {
FirebaseAppCheck.getInstance()
.installAppCheckProviderFactory(PlayIntegrityAppCheckProviderFactory.getInstance())
}
Result: Only verified requests hit your backend. No more bot spam.
(💀 SafetyNet is fully deprecated — don’t use it.)
3. Performance Monitoring: Track Real-World Slowness
Problem: Your emulator is fast — your user’s 3G phone is not.
Solution: Firebase Performance Monitoring automatically logs:
- App startup time
- Screen rendering speed
- Network request latency
Gradle
plugins {
id("com.google.firebase.firebase-perf") version "2.0.1" apply false
}
dependencies {
implementation("com.google.firebase:firebase-perf-ktx")
}
Custom trace
val trace = Firebase.performance.newTrace("checkout_flow")
trace.start()
// do stuff
trace.stop()
Result: Spot slow cold starts, detect laggy screens, and track slow APIs — from real user devices, not your blazing laptop.
💡 Bonus: Disable perf in debug builds via the Gradle plugin extension to avoid polluting your data.
4. Firestore with Offline Cache: Instant UI, Even with No Network
Problem: Users hate staring at loading spinners.
Solution: Cloud Firestore provides real-time sync with built-in offline caching.
Gradle
implementation("com.google.firebase:firebase-firestore-ktx")
Kotlin
val firestore = Firebase.firestore
firestore.firestoreSettings = firestoreSettings {
setLocalCacheSettings(
PersistentCacheSettings.newBuilder()
.setSizeBytes(100L * 1024L * 1024L) // 100 MB
.build()
)
}
firestore.collection("products")
.get()
.addOnSuccessListener { result ->
for (doc in result) {
Log.d("Product", "${doc.id} => ${doc.data}")
}
}
Even if the network drops, reads return instantly from cache, and sync later when online.
💡 New in 2025: Use PersistentCacheSettings or MemoryCacheSettings to control cache behavior and size.
5. Cloud Messaging + Topics: Smarter Push Notifications
Problem: Blindly spamming push notifications annoys users.
Solution: Firebase Cloud Messaging (FCM) with topics and conditions lets you target only the right users.
Kotlin
Firebase.messaging.subscribeToTopic("power_users")
Now only your engaged users get the big new feature push.
And with A/B testing + Notifications Composer, you can optimize titles, copy, and send times.
💡 Pro tip: Combine with Remote Config to silently enable features for selected users and then notify them.
⚠️ Make sure your server uses HTTP v1 API for sending pushes — older HTTP/XMPP APIs are retired.
6. Analytics + BigQuery: Product Insights Without Extra SDKs
Problem: Adding multiple analytics SDKs bloats your app.
Solution: Use Firebase Analytics as the single source of truth — and export data to BigQuery for deep analysis.
Kotlin
Firebase.analytics.logEvent("purchase") {
param("item_id", "123")
param("price", 99.99)
}
With BigQuery integration, you can:
- Build funnels
- Analyze churn
- Segment by device/region
- Power ML models for prediction
💡 Tip: In 2025, Firebase supports streaming export mode to BigQuery for near real-time dashboards.
7. App Distribution: Real Beta Testing Without Headaches
Problem: Sharing APKs over Drive/WhatsApp is chaos.
Solution: Firebase App Distribution lets you:
- Upload builds from CI
- Notify testers automatically
- Track who installed which version
Gradle
plugins {
id("com.google.firebase.appdistribution")
}
firebaseAppDistribution {
serviceCredentialsFile = "service-account.json"
releaseNotesFile = "notes.txt"
groups = listOf("qa-team")
}
Upload
./gradlew appDistributionUploadRelease
Result: Smooth beta releases. Everyone on the same build, without “Did you install the new APK?” drama.
Job Offers
Wrapping Up
Crashlytics and Auth are just the tip of the Firebase iceberg.
With the full toolbox — Remote Config, App Check, Performance Monitoring, Firestore, FCM, Analytics, and App Distribution — you can:
- Release features faster
- Secure your backend
- Delight users with snappy performance
- Get real product insights
- And sleep better knowing your testers actually got the right build 😄
So the next time someone says, “We use Firebase for crash reports,” give them a knowing smile — and ship a feature without even touching the Play Store.
🧠 Quick Dev Checklist
-> Remote Config for toggling features
-> App Check (Play Integrity) for securing APIs
-> Performance Monitoring for real UX
-> Firestore with offline caching
-> FCM with topics and A/B testing
-> Analytics with BigQuery streaming
-> App Distribution for painless testing
This article was previously published on proandroiddev.com



