Firebase vs Supabase
La completa plataforma móvil de Google, Firebase, se enfrenta a Supabase, la alternativa de código abierto basada en PostgreSQL. ¿Qué elegir al seleccionar un Backend-as-a-Service?
El SDK gratuito y ligero de Google para monitoreo de fallos (crashes)
Monitoreo de errores + rendimiento + session replay en una sola plataforma, con opción de autoalojamiento
Regla clara: si solo buscas responder a la pregunta "¿cuándo se cayó la app?" y tu presupuesto es cero, elige Crashlytics — la configuración toma minutos y no hay riesgo de factura. Si quieres errores + rendimiento + session replay en un solo panel, o necesitas mantener los datos en tu propia infraestructura por normativa de protección de datos, el alcance de Sentry justifica ese costo. Muchos equipos usan ambos a la vez; si eliges ese camino, mide en tu propio build el impacto del doble SDK en el tamaño de la app y el tiempo de arranque.
| Categoría | Firebase Crashlytics | Sentry |
|---|---|---|
| Rendimiento | 7/10 | 9/10 |
| Facilidad de aprendizaje | 9/10 | 6/10 |
| Ecosistema | 6/10 | 9/10 |
| Comunidad | 8/10 | 8/10 |
| Mercado laboral | 6/10 | 7/10 |
| A prueba de futuro | 7/10 | 8/10 |
// Firebase Crashlytics - Android (Kotlin): instalación y registro no fatal
// build.gradle.kts (app)
// plugins { id("com.google.gms.google-services"); id("com.google.firebase.crashlytics") }
// dependencies { implementation(platform("com.google.firebase:firebase-bom:34.19.0"))
// implementation("com.google.firebase:firebase-crashlytics") }
import com.google.firebase.Firebase
import com.google.firebase.crashlytics.crashlytics
import com.google.firebase.crashlytics.setCustomKeys
class CheckoutViewModel {
private val crashlytics = Firebase.crashlytics
fun onPaymentStarted(orderId: String, amount: Double) {
// Breadcrumb: para poder ver en qué paso estaba si se produce un crash
crashlytics.log("payment_started order=$orderId amount=$amount")
crashlytics.setCustomKeys {
key("order_id", orderId)
key("payment_amount", amount)
key("user_tier", "premium")
}
}
fun onPaymentFailed(error: Throwable, orderId: String) {
// Registro de error sin colapsar la app (no fatal)
crashlytics.setCustomKey("order_id", orderId)
crashlytics.recordException(error)
}
fun identifyUser(userId: String) {
crashlytics.setUserId(userId)
}
}
// AndroidManifest.xml: firebase_crashlytics_collection_enabled=false (activar tras el consentimiento de privacidad)
// Runtime: Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)// Sentry - iOS (Swift): errores + rendimiento + session replay en un solo SDK
// Package.swift / SPM: https://github.com/getsentry/sentry-cocoa
import Sentry
func configureSentry() {
SentrySDK.start { options in
options.dsn = "https://<public-key>@o<org-id>.ingest.sentry.io/<project-id>"
options.debug = false
// Tracing de rendimiento
options.tracesSampleRate = 0.2
// UI Profiling (sentry-cocoa 9.x): ligado al ciclo de vida del trace
options.configureProfiling = {
$0.lifecycle = .trace
$0.sessionSampleRate = 1.0
}
// Session Replay: graba el flujo de pantalla antes del crash
options.sessionReplay.onErrorSampleRate = 1.0
options.sessionReplay.sessionSampleRate = 0.1
// Captura de pantalla + jerarquía de vistas en el momento del error
options.attachScreenshot = true
options.attachViewHierarchy = true
}
}
// Breadcrumb + contexto personalizado + captura no fatal
func onPaymentFailed(_ error: Error, orderId: String) {
let crumb = Breadcrumb(level: .error, category: "payment")
crumb.message = "payment_failed order=\(orderId)"
SentrySDK.addBreadcrumb(crumb)
SentrySDK.configureScope { scope in
scope.setTag(value: orderId, key: "order_id")
scope.setUser(User(userId: "u_123"))
}
SentrySDK.capture(error: error)
}
// Subida automática de dSYM (Xcode Run Script Build Phase):
// sentry-cli debug-files upload --include-sources "$DWARF_DSYM_FOLDER_PATH"Regla clara: si solo buscas responder a la pregunta "¿cuándo se cayó la app?" y tu presupuesto es cero, elige Crashlytics — la configuración toma minutos y no hay riesgo de factura. Si quieres errores + rendimiento + session replay en un solo panel, o necesitas mantener los datos en tu propia infraestructura por normativa de protección de datos, el alcance de Sentry justifica ese costo. Muchos equipos usan ambos a la vez; si eliges ese camino, mide en tu propio build el impacto del doble SDK en el tamaño de la app y el tiempo de arranque.
Solicita una consultoría gratuitaSi con el seguimiento de fallos basta y el presupuesto debe ser cero, Crashlytics; si el equipo quiere, además de errores, rastreo de rendimiento, session replay y, si hace falta, autoalojamiento, Sentry es la opción correcta. Ambos ofrecen SDKs fáciles de instalar, así que la decisión se reduce a alcance y presupuesto.