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:
- T1.5 Force Update Gate — Remote Config 3 parameter untuk paksa user upgrade saat ada security patch / breaking change post-launch.
- T1.6 App Check — Play Integrity provider untuk anti-abuse + anti-cloning (Tier 1 report-only mode).
- 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).
| Bagian | Status | Catatan |
|---|---|---|
| Bagian 1 — Remote Config (T1.5) | ✅ DONE | 3 parameter ter-publish, verified via screenshot |
| Bagian 2 — App Check Play Integrity (T1.6) | ✅ DONE | App 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) | 🟡 PENDING | Backend 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 v10 | ⏳ 3/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
| Field | Value |
|---|---|
| Parameter name | min_supported_version_code |
| Data type | Number |
| Default value | 0 |
| Description | Minimum 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
| Field | Value |
|---|---|
| Parameter name | force_update_message |
| Data type | String |
| Default value | "Versi aplikasi yang Anda gunakan sudah tidak didukung. Silakan update ke versi terbaru untuk melanjutkan menggunakan Kesles Merchant." |
| Description | Pesan di modal force update. |
✅ Parameter 3: force_update_store_url
| Field | Value |
|---|---|
| Parameter name | force_update_store_url |
| Data type | String |
| Default value | https://play.google.com/store/apps/details?id=com.kesles.merchant |
| Description | URL 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):
- Edit
min_supported_version_codedari0→9999 - Klik "Publish changes"
- Wait ~1 jam (minimum fetch interval Remote Config) atau force fetch via debug
- Relaunch app → modal blocking "Perbarui Aplikasi" harus muncul
- 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":
| Setting | Value | Status |
|---|---|---|
Require app integrity label PLAY_RECOGNIZED | ✅ Checked | (recommended — pastikan APK signed Play Store) |
Require account details label LICENSED | ☐ Unchecked | (Tier 1 permissive — biarkan unchecked) |
Minimum acceptable device integrity level | Don't explicitly check device integrity level | (paling permissive, lowest false-positive) |
| Agreement Play Integrity API Terms | ✅ Checked | (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:
- Anda kembali ke Apps tab
- Row
com.kesles.merchantAndroid akan tampak ter-register dengan provider Play Integrity - 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:
| Status | Artinya | Action |
|---|---|---|
| 🔓 Unenforced | Service aktif, App Check report-only mode | Biarkan 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 app | TIDAK 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:
-
Developer build debug APK + install di emulator/device:
adb logcat | grep "app_check" -
Output di logcat:
[app_check] activated — android=debug apple=debug[app_check] debug token (first 40 chars): xxxxxxxxxxxxxxxxxxxxxx... -
Full token bisa ditemukan di output Firebase SDK saat first launch debug:
adb logcat -d | grep -E "debug secret|debug token" -
Copy full token, paste ke Firebase Console:
- Name:
Macbook Developer 1(atau deskriptif) - Token: paste
- Name:
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:
- Local Mac developer:
keytool -list -v -keystore <kesles-merchant-upload.jks>→ copy SHA256 - Console → Add fingerprint → paste → Save
Action saat ini: ✅ Sudah registered per AAB v2 (13 Mei) — verify via Console screenshot kalau ragu.
Step 3.4 — Add Test Phone Number untuk QA (recommended)
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"
| Field | Value contoh |
|---|---|
| Phone number | +62 8888866661 (sesuai App Access declaration Play Console) |
| Verification code | 182838 (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:
- Build mobile app dengan
firebase_authSDK terhubung - Trigger flow Mode A registrasi → pilih channel SMS
- Input
+62 8888866661→ tap "Kirim" - Mobile dapat
verificationIddari Firebase - Input kode
182838(test code dari Step 3.4) - Mobile dapat
ID tokendari Firebase - Mobile POST ke
merchant_core_api /auth/firebase-phone-verify(proxy keservices/firebase_service /internal/firebase-auth/verify-phone-token) - 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:
- Firebase Console → Authentication → Sign-in method → Phone → toggle "Enable" → OFF → Save
- Effective immediately — mobile request
verifyPhoneNumber()akan fail dengan error "PROVIDER_DISABLED" - Backend
merchant_core_apidecision tree akan fallback ke WhatsApp (Mode B login) atau show error (Mode A registrasi) - 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_codeada - Parameter
force_update_messageada - Parameter
force_update_store_urlada - 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_RECOGNIZEDchecked -
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.merchantAndroid — 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
| # | Item | Owner | Deadline | Status |
|---|---|---|---|---|
| 1 | AAB v8 build verified — code Remote Config + App Check sudah deployed | Mustaqim (primary) | 2026-05-14 sore | ✅ Done 14 Mei 19:25 |
| 2 | AAB 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) |
| 3 | Tester install update v10 (21 tester di Daftar email "Kesles Merchant Tester") | Auto via Play Store update | Within 24 jam dari step 2 (sejak 15 Mei) | ✅ Done — auto-update Play Store dalam 0-24h (soak day ±6/7 per 20 Mei) |
| 4 | Firebase 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) |
| 5 | Firebase 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) |
| 6 | Crashlytics dashboard: 4 issue (TransactionsApi V1+V2, AuthSessionService, HomeDashboardApi, PushNotificationService) drop ke 0 fatal events | Mustaqim / 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
| Issue | Cause | Fix |
|---|---|---|
| Remote Config "Tidak ada perubahan" di app | Minimum fetch interval 1 jam | Tunggu 1 jam atau force fetch via debug menu |
| App Check token kosong di Console | Play Integrity butuh AAB di Play Console minimum Internal track | Pastikan AAB sudah di Internal/Alpha sebelum verify production (v10 sudah LIVE sejak 15 Mei) |
| Debug build "Verification failed" | Debug token belum di-register | Copy token dari logcat → Add debug token di Console |
| Production "Verification failed" | App belum signed dengan upload key yang match Play Console | Pastikan AAB di-sign upload-keystore + uploaded ke Play Console |
min_supported_version_code tidak trigger force update | Cache Remote Config belum refresh | Wait 1 jam atau kill + relaunch app |
| Tab "APIs" tidak muncul service yang ingin Enforce | Service belum di-init Firebase SDK | Service 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
- Cek Metrics tab per service:
- Verified rate ≥ 99%? → safe to Enforce
- Outdated requests masih banyak? → tunggu user upgrade
- 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)
- Mode toggle di tab APIs:
- Unenforced → Enforced (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
- PDF snapshot di
- 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 dishared/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-18→per 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).
- 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 (
- 2026-05-19 — Phase 4 final + service rename (operator-side no change):
Service folder
services/fcm_service→services/firebase_servicedi repo + VMmerchant_fcm→merchant_firebase+ systemd unitfcm-service→firebase-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.
- Firebase Console → Remote Config → edit
min_supported_version_code→ set ke0(atau ke versionCode yang sudah live). - Klik "Publish changes".
- Mobile fetch interval saat ini = 1 jam. Untuk emergency, instruksikan user kill + relaunch app → fetch di splash kick in segera.
- 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:
- Firebase Console → App Check → tab "APIs" → service yang bermasalah → set ke "Unenforced".
- 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
| Metric | Tool | Frekuensi cek | Threshold action |
|---|---|---|---|
| Crashlytics 4 issue (Bug 1/2/3/4) → fatal events | Firebase Crashlytics dashboard | Harian 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 request | Firebase Console → App Check → Metrics tab | Harian 7 hari pertama | Verified < 80% → cek device debug token / Play Integrity quota |
| Remote Config Fetch % | Firebase Console → Remote Config → Last fetched | Setelah 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 trigger | Crashlytics "ForceUpdate" log + user complaint | On-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 log | Harian setelah Console enable | < 90% success rate selama 24 jam → investigate phone format / Firebase config |
| Phone Auth quota utilization | Firebase Console → Authentication → Usage chart | Mingguan | > 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).