Integrasi Sentry/Firebase Crashlytics dengan SDK native + sourcemap JS, analytics funnel, alerting untuk error threshold, release health tracking per versi app, serta praktik pasang Sentry end-to-end dan simulasikan crash.

Setelah di episode 22 kita mengamankan aplikasi, pada episode ini kita membangun observability — kemampuan untuk melihat apa yang terjadi di aplikasi setelah release. Crash reporting dan monitoring adalah mata dan telinga kalian di production.
Mengapa monitoring penting? Karena di mobile, kalian tidak bisa membuka DevTools seperti di web. Ketika aplikasi crash di perangkat user, satu-satunya cara memahami masalahnya adalah lewat crash reports dan logs yang dikirim ke server.
npx @sentry/wizard -i capacitorWizard akan otomatis:
import * as Sentry from '@sentry/capacitor';
Sentry.init({
dsn: 'https://your-dsn@sentry.io/project-id',
environment: __DEV__ ? 'development' : 'production',
release: '1.0.0',
// Performance monitoring
tracesSampleRate: __DEV__ ? 1.0 : 0.2,
// Breadcrumbs
enableAutoBreadcrumbs: true,
// Attachments
attachStacktrace: true,
});import Sentry
@UIApplicationMain
class AppDelegate: CAPBridgingAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
SentrySDK.start { options in
options.dsn = "https://your-dsn@sentry.io/project-id"
options.tracesSampleRate = 0.2
options.attachScreenshot = true
}
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}import io.sentry.android.core.SentryAndroid
class MainActivity : BridgeActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
SentryAndroid.init(this) { options ->
options.dsn = "https://your-dsn@sentry.io/project-id"
options.tracesSampleRate = 0.2
options.isAttachScreenshot = true
}
super.onCreate(savedInstanceState)
}
}npm install @capacitor-firebase/crashlytics
npx cap syncimport { Crashlytics } from '@capacitor-firebase/crashlytics';
// Log error
await Crashlytics.recordException({
message: 'Payment failed',
stacktrace: new Error('Payment processing error'),
});
// Log non-fatal
await Crashlytics.log({
message: 'User started checkout',
});
// Set user identifier
await Crashlytics.setUser({ uid: 'user-123' });
// Trigger crash (untuk testing)
await Crashlytics.crash();import { FirebaseAnalytics } from '@capacitor-firebase/analytics';
async function trackFunnel() {
await FirebaseAnalytics.logEvent({
name: 'screen_view',
params: { screen_name: 'home' },
});
await FirebaseAnalytics.logEvent({
name: 'add_to_cart',
params: { product_id: 'prod-123', price: 99000 },
});
await FirebaseAnalytics.logEvent({
name: 'purchase',
params: { product_id: 'prod-123', price: 99000, currency: 'IDR' },
});
}Di Sentry dashboard:
Di Firebase Console:
Sentry.init({
// ...
release: '1.2.0',
dist: '42',
});
// Sentry otomatis track:
// - Crash-free rate per versi
// - User adoption per versi
// - Regression detection| Metric | Target | Action |
|---|---|---|
| Crash-free rate | ≥ 99.5% | Investigate jika < 99% |
| ANR rate (Android) | ≤ 0.5% | Optimize jika > 1% |
| User adoption | ≥ 80% dalam 7 hari | Promote jika > 90% |
Tip
Upload sourcemaps (JS) dan dSYM (iOS) / mapping files (Android) ke Sentry setiap build. Ini memungkinkan stack trace yang readable bukan minified code.
Untuk testing integrasi:
function simulateCrash() {
// JavaScript crash
throw new Error('Test crash from JavaScript');
}
async function testNativeCrash() {
// Sentry native crash
await Sentry.nativeCrash();
}
function testOutOfMemory() {
// Simulate OOM
const bigArray = new Array(100000000).fill('x');
}Note
Selalu test crash reporting di development sebelum release. Pastikan crash muncul di dashboard dengan stack trace yang readable dan user context yang benar.
Pada episode 23 ini, kalian telah memahami:
Di episode 24 selanjutnya, kita akan membahas migrasi Cordova & upgrade major version — plugin mapping dari Cordova ke Capacitor, config translation, upgrade path dari Capacitor 7 → 8, strategi mengikuti major baru, dan praktik upgrade dengan checklist breaking changes. Sampai jumpa!