Lewati ke konten utama

Firebase Console — Operator Setup Step-by-Step

Konteks: Tier 1 mobile hardening Kesles Merchant menambah 2 fitur backend-managed via Firebase Console + (per 2026-05-20) Phase 0 Phone Authentication untuk SMS OTP. Total 3 area operator action:

  1. T1.5 Force Update Gate — Remote Config 3 parameter untuk paksa user upgrade saat ada security patch / breaking change post-launch.
  2. T1.6 App Check — Play Integrity provider untuk anti-abuse + anti-cloning (Tier 1 report-only mode).
  3. Phase 0 Phone Authentication — enable Phone provider untuk SMS OTP via Firebase Phone Auth (backend deployed 2026-05-20, Console enable masih pending).

Dokumen ini panduan operator (non-developer) untuk setup Firebase Console step-by-step. Setelah selesai, AAB v10 yang di-rollout ke Alpha tinggal fetch config + attach App Check token otomatis.


📊 Status (per 2026-05-20)

Historis 2026-05-20 — Phase 0 DEPLOYED snapshot. Untuk current state lihat firebase-service-status.md (Plan C+E DONE 2026-06-11, Broadcast Phase 1+3+4 LIVE).

BagianStatusCatatan
Bagian 1 — Remote Config (T1.5)DONE3 parameter ter-publish, verified via screenshot
Bagian 2 — App Check Play Integrity (T1.6)DONEApp com.kesles.merchant registered + Play Integrity provider + Status "Registered" hijau, verified via screenshot 2026-05-14 18:21 WIB
Bagian 3 — Phone Authentication (Phase 0)🟡 PENDINGBackend services/firebase_service deployed 2026-05-20 dengan endpoint /internal/firebase-auth/verify-phone-token (verified 3-tier check). Console enable Phone provider + register SHA-256 + add test phone masih pending operator action.
Verifikasi post-deploy AAB v103/6 · 50%AAB v10 LIVE di Alpha 15 Mei · soak day ±6/7 · Rows 4–6 monitoring hingga 24 Mei (promote target 22 Mei = T-2)

🎉 AAB v10 LIVE di Alpha sejak 15 Mei (soak day ±6/7 per 20 Mei). Monitor harian Crashlytics + App Check Metrics + Remote Config Fetch % → promote ke Production target ~22 Mei (T-2 ke launch 25 Mei).


Pre-requisite

  • Akses Firebase Console project kesles-merchant (Prod environment)
  • Login dengan akun yang punya role Editor atau Owner
  • AAB v10 sudah LIVE di Play Console Alpha track (sejak 15 Mei — untuk Play Integrity validation)
  • URL: https://console.firebase.google.com

Bagian 1: Remote Config (T1.5 Force Update Gate)

Status: ✅ DONE 2026-05-14 (verified via screenshot)

Step 1.1 — Buka Remote Config

Firebase Console
→ Pilih project: kesles-merchant (Prod)
→ Sidebar kiri: Build → Remote Config

Step 1.2 — Parameter yang Harus Ada

3 parameter berikut sudah ter-create dan publish (status "Just now" / "kesles"):

✅ Parameter 1: min_supported_version_code

FieldValue
Parameter namemin_supported_version_code
Data typeNumber
Default value0
DescriptionMinimum versionCode app yang masih boleh akses. Bump untuk force update.

Catatan: Default 0 artinya semua versi boleh — TIDAK trigger force update. Kalau perlu force update di masa depan (mis. security patch), bump ke versionCode minimum yang acceptable.

✅ Parameter 2: force_update_message

FieldValue
Parameter nameforce_update_message
Data typeString
Default value"Versi aplikasi yang Anda gunakan sudah tidak didukung. Silakan update ke versi terbaru untuk melanjutkan menggunakan Kesles Merchant."
DescriptionPesan di modal force update.

✅ Parameter 3: force_update_store_url

FieldValue
Parameter nameforce_update_store_url
Data typeString
Default valuehttps://play.google.com/store/apps/details?id=com.kesles.merchant
DescriptionURL Play Store untuk tombol "Update Sekarang".

Step 1.3 — Verifikasi Status

Di Console tampilan tabel parameter:

  • ✅ Status "Last published: kesles Just now" (atau timestamp recent)
  • ✅ Fetch %: counter mulai naik setelah AAB v10 di-install tester (soak aktif sejak 15 Mei)

Catatan historis: Fetch % = 0% adalah NORMAL sebelum AAB di-install di device. Per soak day ±6/7 (20 Mei), counter sudah seharusnya naik. Konfirmasi via Firebase Console → Remote Config → Configuration tab.

Step 1.4 — Test Force Update (opsional, sebelum production rollout)

Setelah AAB di Internal/Alpha track (sudah berlaku untuk v10):

  1. Edit min_supported_version_code dari 09999
  2. Klik "Publish changes"
  3. Wait ~1 jam (minimum fetch interval Remote Config) atau force fetch via debug
  4. Relaunch app → modal blocking "Perbarui Aplikasi" harus muncul
  5. Reset ke 0 → Publish (kembalikan normal)

Bagian 2: App Check Play Integrity (T1.6)

Status: ✅ DONE 2026-05-14 18:21 — Provider configured + Save clicked + Apps tab com.kesles.merchant 🟢 Registered + debug token verified (JWT App Check issued di device fisik RRCX7014XXT).

Section di bawah ini = runbook historis yang dipakai saat eksekusi setup. Disimpan sebagai referensi reproducible (mis. kalau re-register app di Firebase project baru, atau onboarding operator kedua). State saat ini sudah selesai — tidak perlu eksekusi ulang.

Step 2.1 — Buka App Check

Firebase Console
→ Sidebar kiri: Build → App Check
→ Tab "Apps" (default)

Step 2.2 — Register Android App

→ Cari row com.kesles.merchant (Android)
→ Klik "Register" atau klik di row tersebut
→ Modal popup: "Choose a provider"
→ Pilih: Play Integrity

Step 2.3 — Advanced Settings (yang Sekarang Anda di Halaman ini)

Modal "Configure Play Integrity provider" → expand "Advanced settings":

SettingValueStatus
Require app integrity label PLAY_RECOGNIZEDChecked(recommended — pastikan APK signed Play Store)
Require account details label LICENSEDUnchecked(Tier 1 permissive — biarkan unchecked)
Minimum acceptable device integrity levelDon't explicitly check device integrity level(paling permissive, lowest false-positive)
Agreement Play Integrity API TermsChecked(required)

Action saat eksekusi: klik tombol "Save" biru di pojok kanan bawah dialog. (Status saat ini: ✅ sudah di-klik 2026-05-14 18:21.)

Step 2.4 — Apa yang Terjadi Setelah Save

Setelah klik Save:

  1. Anda kembali ke Apps tab
  2. Row com.kesles.merchant Android akan tampak ter-register dengan provider Play Integrity
  3. Status "Configured" atau "Active"

Step 2.5 — Tab "APIs" — TIDAK Perlu Ubah Apa-apa untuk Tier 1

PENTING: Setelah klik Save di Step 2.4, tab APIs akan tampak seperti ini:

Firebase Console → App Check → Tab "APIs"
Firebase APIs:
├─ Storage → "Start using..." (BELUM dipakai aplikasi)
├─ Realtime Database → "Start using..." (BELUM dipakai)
├─ Cloud Firestore → "Start using..." (BELUM dipakai)
├─ Firebase AI Logic → "Start using..." (BELUM dipakai)
├─ Authentication → 🔓 Unenforced ← DEFAULT, biarkan
├─ SQL Connect → 🔓 Unenforced ← DEFAULT, biarkan
│ (a.k.a. Firebase Data Connect — Cloud SQL-backed,
│ GA 2025; muncul di tab APIs walau belum digunakan)
└─ Functions → "Learn how to enforce..." (BELUM dipakai)

Google Maps Platform APIs:
└─ Maps JavaScript API → "Start using..." (TIDAK relevan untuk mobile app)
└─ Places API (New) → "Start using..." (TIDAK relevan untuk mobile app)

Interpretasi:

StatusArtinyaAction
🔓 UnenforcedService aktif, App Check report-only modeBiarkan apa adanya
"Start using X to enable App Check"Service belum di-init di project (tidak dipakai aplikasi)TIDAK perlu enable
"Learn how to enforce..."Service ada tapi belum ada call dari appTIDAK perlu enable

Service Firebase yang dipakai aplikasi Kesles Merchant sebenarnya (FCM, Crashlytics, Remote Config, App Check itself) tidak listed di tab APIs ini — enforcement-nya di-handle internal Firebase SDK.

JANGAN toggle Unenforced → Enforced. Tier 1 = report-only mode. Mode Enforced akan di-enable di Tier 2 (1-2 bulan post-launch) setelah collect data 14 hari.

Kenapa report-only Tier 1?

  • Risk false-positive di Play Integrity (terutama device modded / Magisk)
  • Collect baseline metrics dulu
  • Validate ≥ 99% verified rate sebelum block real users

Action summary untuk Step 2.5: ✅ Setup APIs tab COMPLETE tanpa perlu ubah apa-apa. Cukup verify state default (Unenforced untuk service active, "Start using..." untuk service belum-dipakai).

Step 2.6 — Manage Debug Tokens (opsional, untuk Dev Build)

Saat dev/QA test app debug build di laptop developer, App Check perlu debug token karena Play Integrity tidak available di debug.

App Check → Apps → com.kesles.merchant
→ Scroll ke "Manage debug tokens"
→ Klik "Add debug token"

Cara dapat debug token:

  1. Developer build debug APK + install di emulator/device:

    adb logcat | grep "app_check"
  2. Output di logcat:

    [app_check] activated — android=debug apple=debug
    [app_check] debug token (first 40 chars): xxxxxxxxxxxxxxxxxxxxxx...
  3. Full token bisa ditemukan di output Firebase SDK saat first launch debug:

    adb logcat -d | grep -E "debug secret|debug token"
  4. Copy full token, paste ke Firebase Console:

    • Name: Macbook Developer 1 (atau deskriptif)
    • Token: paste

Catatan: Production AAB tidak butuh debug token. Hanya untuk developer/QA yang pakai debug build.


Bagian 3: Phone Authentication (Phase 0 — SMS OTP via Firebase)

Status: 🟡 PENDING — backend deployed, Console enable masih operator action.

Konteks: Backend services/firebase_service Phase 0 deployed 2026-05-20 dengan endpoint baru POST /internal/firebase-auth/verify-phone-token (verified via 3-tier check: /health label firebase-service ✅, /ready ok, route registered). Migration 148_create_iam_phone_verifications.sql applied. Tidak butuh env baru di service — pakai FIREBASE_PROJECT_ID existing.

Yang masih perlu operator lakukan di Firebase Console sebelum mobile trigger Phone Auth flow:

Step 3.1 — Buka Authentication → Sign-in method

Firebase Console
→ Pilih project: kesles-merchant (Prod)
→ Sidebar kiri: Build → Authentication
→ Tab "Sign-in method" (default)

Step 3.2 — Enable Phone Provider

→ Cari row "Phone" di list provider
→ Klik pencil/edit icon
→ Toggle "Enable" → ON
→ Klik "Save"

Setelah save, status row Phone berubah jadi "Enabled" (✅ hijau).

Catatan kuota: Default 10.000 verifikasi/bulan gratis. Di atas itu ~Rp 950/verif. Set quota cap di Step 3.5 (opsional) untuk hindari surprise bill.

Step 3.3 — Verify SHA-256 Fingerprint Android Sudah Registered

Firebase Console wajib punya SHA-256 fingerprint app upload key untuk Play Integrity validation di Phone Auth flow.

Firebase Console → Project settings (gear icon, atas kiri)
→ Tab "General" → scroll ke "Your apps"
→ Pilih app Android `com.kesles.merchant`
→ Scroll ke "SHA certificate fingerprints"

Harus ada minimum 2 entries:

  • SHA-1 dari upload keystore kesles-merchant-upload.jks
  • SHA-256 dari upload keystore (sama jks)

Plus optional SHA-1/SHA-256 dari App Signing key Google (kalau aktif Play App Signing — Kesles aktif sejak AAB v2).

Kalau belum ada SHA-256:

  1. Local Mac developer: keytool -list -v -keystore <kesles-merchant-upload.jks> → copy SHA256
  2. Console → Add fingerprint → paste → Save

Action saat ini: ✅ Sudah registered per AAB v2 (13 Mei) — verify via Console screenshot kalau ragu.

Supaya QA bisa test login SMS OTP tanpa hit kuota Firebase + tanpa butuh SIM card aktif:

Authentication → Sign-in method → Phone (yang sudah Enable di Step 3.2)
→ Scroll ke "Phone numbers for testing"
→ Klik "Add phone number"
FieldValue contoh
Phone number+62 8888866661 (sesuai App Access declaration Play Console)
Verification code182838 (fixed code, sesuai env GOOGLE_PLAY_TESTER_OTP_CODE)

Catatan: kombinasi phone + code di-cache Firebase. Saat user pakai nomor ini di mobile app, Firebase tidak kirim SMS real, langsung return kode 182838 yang bisa di-input langsung. Ini selaras dengan Backend OTP bypass yang sudah deployed di merchant_core_api (env GOOGLE_PLAY_TESTER_PHONE + GOOGLE_PLAY_TESTER_OTP_CODE).

Step 3.5 — Set Quota Cap (opsional)

Authentication → Sign-in method → Phone → kebawah ada "Quotas"

Default tidak ada cap (pay-as-you-go di atas free tier). Set cap ~12.000/bulan supaya alert kalau approach trigger Phase 3 (aggregator migration ke Zenziva/Twilio per sms-otp-service-plan.md).

Step 3.6 — Verify End-to-End Setup

Setelah Step 3.2-3.4 selesai, smoke test dari mobile app QA build:

  1. Build mobile app dengan firebase_auth SDK terhubung
  2. Trigger flow Mode A registrasi → pilih channel SMS
  3. Input +62 8888866661 → tap "Kirim"
  4. Mobile dapat verificationId dari Firebase
  5. Input kode 182838 (test code dari Step 3.4)
  6. Mobile dapat ID token dari Firebase
  7. Mobile POST ke merchant_core_api /auth/firebase-phone-verify (proxy ke services/firebase_service /internal/firebase-auth/verify-phone-token)
  8. Backend issue session JWT → user terdaftar

Acceptance: mobile dapat session JWT + record di iam.phone_verifications audit table dengan verification_status = 'success' + flow_mode = 'registration'.

Owner & timing

  • Operator action: Mustaqim primary, Tim Kesles backup (sama dengan Bagian 1+2)
  • Target completion: Pre-Production launch (~25 Mei) — kalau belum enable di Console saat mobile build pakai Phone Auth, request akan return error "PROVIDER_DISABLED"
  • Effort: ~15 menit (Step 3.1-3.4 sequential, Step 3.5-3.6 opsional)

Rollback / Disable Phone Auth

Kalau ada issue post-enable:

  1. Firebase Console → Authentication → Sign-in method → Phone → toggle "Enable" → OFF → Save
  2. Effective immediately — mobile request verifyPhoneNumber() akan fail dengan error "PROVIDER_DISABLED"
  3. Backend merchant_core_api decision tree akan fallback ke WhatsApp (Mode B login) atau show error (Mode A registrasi)
  4. SLA rollback: < 1 menit (toggle config Console)

Backend safety: env flag ENABLE_FIREBASE_PHONE_AUTH=false di merchant_core_api/.env.production juga bisa disable signal mobile tanpa touch Console. Lihat sms-otp-service-plan.md §11.


✅ Checklist Akhir

Remote Config (T1.5)

  • Parameter min_supported_version_code ada
  • Parameter force_update_message ada
  • Parameter force_update_store_url ada
  • Status "Published" — verified via Last published "Just now"
  • Test force update scenario (post-AAB v10 · soak aktif): bump → modal → reset

App Check (T1.6)

  • Modal "Configure Play Integrity provider" — PLAY_RECOGNIZED checked
  • Require account details label LICENSED — unchecked
  • Minimum acceptable device integrity level — "Don't explicitly check"
  • Agreement Play Integrity API Terms — checked
  • Klik tombol "Save" (provider registered)
  • Tab APIs — Authentication + SQL Connect (a.k.a. Firebase Data Connect / Cloud SQL-backed product) default "Unenforced" (correct untuk Tier 1). Service lain "Start using..." = belum dipakai aplikasi, TIDAK perlu enable.
  • Verify Apps tab: com.kesles.merchant Android — Provider "Play Integrity" + Status 🟢 Registered (verified 2026-05-14 18:21 WIB)
  • Add debug token untuk device dev — 208ef332-ca54-4f27-8ce1-43c90bf49f90 (Macbook Dev RRCX7014XXT) registered + verified via logcat 2026-05-14 18:56 WIB. Token JWT (eyJ...) berhasil di-issue oleh Firebase ke app debug build.

Cross-check dengan Mobile

#ItemOwnerDeadlineStatus
1AAB v8 build verified — code Remote Config + App Check sudah deployedMustaqim (primary)2026-05-14 sore✅ Done 14 Mei 19:25
2AAB v10 LIVE di Play Console Alpha track (v6→v8→v9→v10 progression, replace v9)Mustaqim (primary)2026-05-15 dini hari✅ Done — v10 LIVE 15 Mei (91 MB, versionCode 10, 2 Crashlytics hotfix)
3Tester install update v10 (21 tester di Daftar email "Kesles Merchant Tester")Auto via Play Store updateWithin 24 jam dari step 2 (sejak 15 Mei)✅ Done — auto-update Play Store dalam 0-24h (soak day ±6/7 per 20 Mei)
4Firebase Console: Remote Config Fetch % > 0 (validasi mobile fetch jalan)Mustaqim / Tim Kesles (cek harian)Within 48 jam dari step 3⏳ Monitoring aktif — belum ada angka terkonfirmasi di docs lokal (5 hari sejak LIVE, perlu cek Console)
5Firebase Console: App Check Metrics tab — Verified requests increment (validasi Play Integrity attach jalan)Mustaqim / Tim Kesles (cek harian)Within 48 jam dari step 3⏳ Monitoring aktif — belum ada angka terkonfirmasi di docs lokal (5 hari sejak LIVE, perlu cek Console)
6Crashlytics dashboard: 4 issue (TransactionsApi V1+V2, AuthSessionService, HomeDashboardApi, PushNotificationService) drop ke 0 fatal eventsMustaqim / Tim Kesles (cek harian 7 hari)2026-05-24 (T-1 ke launch)⏳ Monitoring aktif — soak day ±6/7 (deadline 24 Mei, T-4)

Escalation kalau ada step yang miss deadline: Tim Kesles follow-up ke Mustaqim via WA; kalau primary tidak respon dalam 4 jam, Tim Kesles berwenang action solo per Rollback playbook.


🔍 Verifikasi Post-Deploy AAB v10

Setelah AAB v10 di Alpha track + tester install update (LIVE sejak 15 Mei, soak day ±6/7 per 20 Mei):

Remote Config

Firebase Console → Remote Config → Configuration tab

Yang harus tampak:

  • "Fetch %" mulai naik dari 0% (counter request fetch dari app)
  • "Last fetched" timestamp recent

App Check Metrics

Firebase Console → App Check → Metrics tab

Yang harus tampak (setelah 30 menit - 24 jam):

  • Verification requests counter mulai naik
  • Verified requests rate ≥ 95% (production builds)
  • Unverified requests = debug builds tanpa token registered (boleh ada)
  • Outdated requests = versi app lama tanpa App Check (boleh ada, akan turun seiring upgrade)

Indikator sukses:

  • Verified rate ≥ 95% setelah 24 jam soak
  • Tidak ada error log di Firebase Console

⚠️ Common Pitfalls

IssueCauseFix
Remote Config "Tidak ada perubahan" di appMinimum fetch interval 1 jamTunggu 1 jam atau force fetch via debug menu
App Check token kosong di ConsolePlay Integrity butuh AAB di Play Console minimum Internal trackPastikan AAB sudah di Internal/Alpha sebelum verify production (v10 sudah LIVE sejak 15 Mei)
Debug build "Verification failed"Debug token belum di-registerCopy token dari logcat → Add debug token di Console
Production "Verification failed"App belum signed dengan upload key yang match Play ConsolePastikan AAB di-sign upload-keystore + uploaded ke Play Console
min_supported_version_code tidak trigger force updateCache Remote Config belum refreshWait 1 jam atau kill + relaunch app
Tab "APIs" tidak muncul service yang ingin EnforceService belum di-init Firebase SDKService akan muncul setelah ada call ke SDK tersebut

🚀 Tier 2 Future Steps (1-2 bulan post-launch)

Setelah Tier 1 stable + 14 hari data collected:

App Check Enforce per Service

  1. Cek Metrics tab per service:
    • Verified rate ≥ 99%? → safe to Enforce
    • Outdated requests masih banyak? → tunggu user upgrade
  2. Mulai Enforce dari service low-risk:
    • Cloud Functions (kalau ada) — enforce dulu
    • Cloud Firestore / Realtime DB — enforce setelah Cloud Functions stable
    • Authentication — last priority (risk lockout user)
  3. Mode toggle di tab APIs:
    • UnenforcedEnforced (per service)
    • Save changes

Remote Config Conditions per Audience

Tier 2 bisa pakai Conditions untuk:

  • A/B test feature flag per cohort
  • Force update phased rollout (mis. iOS dulu, Android nyusul)
  • Per-region config (Indonesia vs Singapore, dll)

📚 Referensi

  • Firebase Remote Config — Get started Flutter
  • Firebase App Check — Play Integrity Flutter
  • Play Integrity API verdict reference
  • Sumber resmi mobile-hardening + Tier 1 (T1.5 + T1.6) + batch 3 execution log: merchant_docs/docs/plans/google-play-merchant-publish-plan.md → Changelog 14 Mei (batch 1: Tier 1 8/8 + AAB v6, batch 2: Crashlytics fix sprint + AAB v7, batch 3: operator setup + splash fix + AAB v8)
    • PDF snapshot di shared/docs/google-play-merchant-publish-plan.pdf
  • Plan strategic baru (un-related to operator setup): ~/.claude/plans/harmonic-prancing-backus.md — di-overwrite 2026-05-14 malam ke topik baru "Phase 4 Step 3 — MarkTokenInvalid fcm_service Single-Writer Cleanup". Mobile-hardening v1.8 context archived via Google Play plan + 3 PDF di shared/docs/. Plan file TIDAK lagi reference mobile-hardening — jangan ikuti link expecting Tier 1 detail.
  • Bug doc: merchant_docs/docs/apps/mobile_user/bugs/2026-05-13-crashlytics-fresh-crashes.md — context Crashlytics fix sprint
  • Google Play plan: merchant_docs/docs/plans/google-play-merchant-publish-plan.md

Changelog

  • 2026-05-20 — 📞 Bagian 3 Phone Authentication added + date refresh:
    • Bagian 3 baru — Phone Authentication operator runbook (Step 3.1–3.6 + rollback) untuk Phase 0 Phone Auth yang backend-nya deployed 2026-05-20. Cover enable Phone provider di Console, verify SHA-256 fingerprint, add test phone number QA (+62 8888866661 / 182838), set quota cap, smoke test end-to-end.
    • Date refresh: status header per 2026-05-18per 2026-05-20, soak day ±4/7±6/7, monitoring deadline ke 24 Mei (T-4 ke launch 25 Mei).
    • Konteks blockquote: tambah point 3 Phone Authentication.
    • Cross-check Mobile table: rows 2-3 status ⏳ Pending✅ Done (v10 LIVE sejak 15 Mei, tester auto-update confirmed); rows 4-5 catatan "monitoring aktif — belum ada angka di docs (5 hari sejak LIVE, perlu cek Console)".
    • Monitoring SLA table: tambah 2 row Phone Auth (verify success rate + quota utilization).
  • 2026-05-19 — Phase 4 final + service rename (operator-side no change): Service folder services/fcm_serviceservices/firebase_service di repo + VM merchant_fcmmerchant_firebase + systemd unit fcm-servicefirebase-service. Tidak ada perubahan operator-side di Firebase Console. Catatan ini untuk awareness saat ada cross-ref dengan dokumen lain.
  • 2026-05-18 — Post-deploy status update — AAB v10 soak day ±4/7: Status header diperbarui ke 2026-05-18. Progress bar Post-Deploy 1/6 17%3/6 50%. Row 2: v10 LIVE di Alpha 15 Mei (bukan v8 pending); Row 3: 21 tester auto-update confirmed dalam 0-24h. Row 4-5 (Remote Config Fetch % + App Check Verified requests) masih "monitoring aktif" — belum ada angka terkonfirmasi di docs lokal. Row 6 (Crashlytics) monitoring deadline 24 Mei. Label row 2 dikoreksi dari "AAB v8 → v6" ke "AAB v10 → v9" sesuai AAB progression actual (v6→v8→v9→v10).
  • 2026-05-14 (malam) — Setup COMPLETE 2/2 bagian: App Check Play Integrity provider registered + Save di-klik 18:21 WIB; debug token 208ef332-ca54-4f27-8ce1-43c90bf49f90 (Macbook Dev RRCX7014XXT) ditambahkan via Manage debug tokens + verified JWT issued via logcat 18:56 WIB. Cross-check Mobile checklist: AAB v8 build verified; upload ke Play Console + tester install pending (user action).
  • 2026-05-14 (sore) — Initial dokumen. Status Remote Config DONE (3 parameter published), App Check in-progress (tinggal klik Save di Step 2.3 dialog).

🔁 Rollback / Disable Playbook

Kalau Tier 1 fitur perlu di-disable cepat (mis. force update modal salah trigger ke semua user, App Check block legitimate traffic, dll):

Rollback Force Update Gate (T1.5)

Skenario: min_supported_version_code di-set terlalu tinggi sehingga semua user kena modal blocking padahal seharusnya tidak.

  1. Firebase Console → Remote Config → edit min_supported_version_code → set ke 0 (atau ke versionCode yang sudah live).
  2. Klik "Publish changes".
  3. Mobile fetch interval saat ini = 1 jam. Untuk emergency, instruksikan user kill + relaunch app → fetch di splash kick in segera.
  4. SLA rollback: ~1 jam max delay sampai semua user terdampak recover. Saat soak post-deploy, monitor count user terdampak via Crashlytics search "ForceUpdate".

Rollback App Check (T1.6) — Tier 1 report-only

Tier 1 = "Unenforced" mode di tab APIs. Tidak ada traffic yang di-block — App Check hanya log token ke Metrics. Rollback tidak diperlukan sampai upgrade ke Tier 2 (enforce mode). Kalau saat Tier 2 ada false-positive block:

  1. Firebase Console → App Check → tab "APIs" → service yang bermasalah → set ke "Unenforced".
  2. Effective immediately — request berikutnya tidak di-block.

Hard rollback — disable seluruh fitur

Kalau perlu disable tanpa update mobile app:

  • Remote Config: hapus 3 parameter min_supported_version_code, force_update_message, force_update_store_url → mobile fallback ke default values di code (min_supported_version_code = 0 → modal tidak pernah trigger).
  • App Check: tab Apps → row com.kesles.merchant → opsi "Unregister app" (terakhir resort; akan reset semua token attach sampai re-register).

📊 Monitoring & SLA Post-Deploy

MetricToolFrekuensi cekThreshold action
Crashlytics 4 issue (Bug 1/2/3/4) → fatal eventsFirebase Crashlytics dashboardHarian 7 hari pertama post-AAB v10 (soak aktif sejak 15 Mei)Kalau masih > 0 fatal event setelah 48 jam dari rollout 50% user → investigate per-issue
App Check Metrics — Verified vs Unverified requestFirebase Console → App Check → Metrics tabHarian 7 hari pertamaVerified < 80% → cek device debug token / Play Integrity quota
Remote Config Fetch %Firebase Console → Remote Config → Last fetchedSetelah 24 jam pertama post-AAB v10 rollout (per 20 Mei: soak day ±6)< 50% setelah 48 jam → investigate fetch interval / network issue
Force Update modal triggerCrashlytics "ForceUpdate" log + user complaintOn-demand> 0.1% user terdampak unintended → rollback per playbook di atas
Phone Auth verify success rate (post Bagian 3 enable)Firebase Console → Authentication → Usage + iam.phone_verifications audit logHarian setelah Console enable< 90% success rate selama 24 jam → investigate phone format / Firebase config
Phone Auth quota utilizationFirebase Console → Authentication → Usage chartMingguan> 70% free tier monthly (>7K verif) → trigger Phase 3 evaluation (aggregator migration)

Owner & escalation

  • Primary operator: Mustaqim Zulkifli (info@kesles.com) — owner Console + Firebase project, decision authority untuk publish Remote Config / register App Check / rotate debug token.
  • Backup operator: Tim Kesles (keslespay@gmail.com) — cover saat primary tidak available. Akses Editor di Firebase project kesles-merchant (Prod). Berwenang melakukan rollback playbook (force update reset, App Check disable per service) tanpa approval primary kalau emergency outage.
  • Escalation channel: WhatsApp internal Kesles team — escalation path: backup operator → primary operator → tim infra → tim engineering.
  • SLA on-duty: primary operator standby business hour (08:00–18:00 WIB Mon-Fri). Backup operator cover off-hour + weekend. Rotation schedule TBD setelah Production launch 25 Mei (Tier 1 launch tidak butuh 24/7 coverage).