PUSH NOTIFICATION ANDROID SIPENSA - FCM
========================================

STATUS IMPLEMENTASI
-------------------
Backend PHP telah disiapkan untuk:
- memakai record notifikasi internal sebagai sumber push;
- mengirim ke seluruh perangkat aktif milik recipient;
- mencegah push ganda karena push hanya dikirim saat record notification baru benar-benar dibuat;
- menonaktifkan token invalid/expired;
- mempertahankan laporan dan notifikasi internal apabila FCM gagal;
- menyertakan notification_id, case_id, type, dan target_url pada payload.

Source APK Android belum ditemukan di workspace. Karena itu FirebaseMessagingService,
notification channel, permission Android 13+, dan deep-link WebView belum dapat dipasang
ke APK final sampai source project APK tersedia.

LANGKAH HOSTING
---------------
1. Import database/MIGRASI_FCM_ANDROID.sql ke database SIPENSA.
2. Unggah file PHP sesuai struktur folder ke htdocs.
3. Buat project Firebase dan tambahkan aplikasi Android dengan package name APK.
4. Di Firebase Console, buat service account untuk Firebase Admin/Cloud Messaging.
5. Isi fcm_config.php menggunakan project_id, client_email, dan private_key service account.
6. Ubah FCM_ENABLED dari false menjadi true setelah APK sudah terhubung.
7. Jangan menaruh service-account JSON di folder yang dapat diunduh publik.

KONTRAK APK KE BACKEND
----------------------
Ambil CSRF terlebih dahulu melalui GET https://domain-sipensa/csrf_api.php menggunakan
session cookie login SIPENSA yang sama dengan WebView.

Endpoint perangkat: POST https://domain-sipensa/device_api.php

Registrasi:
  action=register
  csrf=<nilai dari csrf_api.php>
  fcm_token=<token dari FirebaseMessaging.getToken()>
  platform=android
  device_id=<installation id, opsional>
  device_name=<nama perangkat, opsional>
  app_version=<versi APK, opsional>

Logout/perangkat dilepas:
  action=unregister
  csrf=<csrf session>
  fcm_token=<token perangkat ini>

APK WAJIB MEMILIKI
------------------
- Firebase Messaging dependency sesuai framework APK.
- google-services.json untuk APK (bukan credential pengirim server).
- notification channel ID sipensa_informasi dan sipensa_tindak_lanjut.
- Android 13+ permission POST_NOTIFICATIONS.
- FirebaseMessagingService untuk onNewToken dan onMessageReceived.
- click action OPEN_SIPENSA_NOTIFICATION.
- handler target_url; jika belum login, simpan pending URL lalu buka setelah login berhasil.
- authorization tetap diperiksa backend saat halaman detail dibuka.

CATATAN INFINITYFREE
--------------------
FCM HTTP v1 membutuhkan HTTPS request keluar melalui PHP cURL ke googleapis.com.
Jika InfinityFree memblokir outbound request/cURL, notifikasi internal tetap bekerja,
tetapi push memerlukan backend/relay lain yang mengizinkan FCM HTTP v1.

FILE YANG DIBUTUHKAN UNTUK MENYELESAIKAN APK
--------------------------------------------
- source project APK lengkap (bukan hanya file .apk hasil build);
- package name aplikasi;
- jenis APK: native WebView/TWA/Capacitor/Cordova/Flutter/dll;
- google-services.json dari Firebase;
- versi minimum dan target Android.

