# Bab 24: Integrasi Push Notification Global Berdaulat (APNs & FCM RFC 8291)

Meskipun notifikasi lokal sangat andal untuk pengingat yang telah dijadwalkan sebelumnya, komunikasi jarak jauh instan dari server backend ke jutaan perangkat seluler pengguna tetap membutuhkan infrastruktur **Push Notification Global**. Pengumuman promo flash-sale nasional, verifikasi transaksi transfer rekening bank yang memerlukan persetujuan otentikasi dua faktor (*Push 2FA Approval*), hingga penugasan order kurir logistik baru secara *real-time* menuntut pesan terkirim dalam hitungan detik meskipun aplikasi sedang ditutup total.

Sistem operasi seluler mengarahkan seluruh lalu lintas notifikasi dorong (*push notification*) melalui gerbang resmi pabrikan: **Apple Push Notification service (APNs)** untuk perangkat iOS dan **Firebase Cloud Messaging (FCM)** untuk perangkat Android. Pengembang ceroboh sering kali mengekspos payload transaksi sensitif ke dalam pesan dorong mentah sehingga data pelanggan dapat disadap oleh perantara jaringan.

WidyaMobile mengadopsi standar enkripsi payload ujung-ke-ujung (*End-to-End Encrypted Push Payload*) berstandar **RFC 8291 (Message Encryption for Web Push)**. Server backend mengenkripsi isi pesan menggunakan kurva eliptik P-256 dan AES-128-GCM, dan ponsel pengguna mendekripsinya langsung di dalam ekstensi notifikasi privat (*Notification Service Extension*) sebelum ditampilkan ke layar, menjamin kedaulatan data secara mutlak.

```
┌────────────────────────────────────────────────────────────────────────┐
│             SPEKTRUM INFRASTRUKTUR PUSH NOTIFICATION GLOBAL            │
├────────────────────┬─────────────────┬────────────────┬────────────────┤
│ Komponen Gerbang   │ Protokol Jaringan│ Format Token   │ Standar Enkrips│
├────────────────────┼─────────────────┼────────────────┼────────────────┤
│ Apple APNs         │ HTTP/2 over TLS │ 64 Hex String  │ RFC 8291 E2EE  │
│ Google FCM v1      │ HTTP/1.1 / gRPC │ JWT Registration│ RFC 8291 E2EE  │
│ WidyaPush Gateway  │ QUIC Sovereign  │ Kripto Ed25519 │ ChaCha20-Poly13│
└────────────────────┴─────────────────┴────────────────┴────────────────┘
```

Kapabilitas utama dari integrasi push notification WidyaMobile meliputi:
1. **Zero-Third-Party Telemetry**: Registrasi token perangkat dilakukan langsung ke API resmi penyedia tanpa menggunakan SDK pelacak pihak ketiga yang memata-matai perilaku pengguna.
2. **Silent Background Push (Data-Only Messages)**: Membangunkan aplikasi di latar belakang secara hening tanpa menampilkan banner visual, memungkinkan aplikasi mengunduh data inventaris kasir terbaru sebelum toko dibuka di pagi hari.
3. **Notification Service Extension Decryption**: Mendekripsi payload finansial terenkripsi dan mengganti teks sandi (*ciphertext*) menjadi format transaksi yang rapi tepat sebelum sistem operasi menggambar banner notifikasi.

## Diagram Alir Siklus Pengiriman & Dekripsi Push E2EE

Diagram berikut menggambarkan perjalanan pesan push dari server perbankan hingga didekripsi di ponsel pengguna:

```mermaid
flowchart TD
    Server["Server Backend WidyaBase: Transaksi Keuangan Baru"] --> Enc["Enkripsi Payload (RFC 8291: ECDH P-256 + AES-128-GCM)"]
    
    Enc --> Gate{"Pilih Gerbang Pabrikan OS"}
    Gate -->|Target: iPhone iOS| APNs["Kirim via APNs HTTP/2 Protocol"]
    Gate -->|Target: Android| FCM["Kirim via FCM v1 REST API"]
    
    APNs --> ApplePush["Pusat Notifikasi Apple (APNs Cloud)"]
    FCM --> GooglePush["Pusat Notifikasi Google (FCM Cloud)"]
    
    ApplePush --> Device["Perangkat Seluler Menerima Paket Dorong"]
    GooglePush --> Device
    
    subgraph "Ekstensi Layanan Privat (Service Extension)"
        Device --> Priv["Ambil Kunci Privat dari Hardware Keystore"]
        Priv --> Decrypt["Dekripsi Payload Asli (Nir-Snooping)"]
        Decrypt --> Format["Format Ulang Judul & Pesan Transaksi"]
    end
    
    Format --> Banner["Tampilkan Heads-Up Banner Aman ke Layar"]
```

## Implementasi Program Registrasi & Penanganan Push Token

Berikut adalah kode sumber yang mendemonstrasikan pendaftaran token push perangkat ke gateway resmi menggunakan `modul/mobile.wya`:

```widya
// Program: integrasi_push_notification_global.wya
// Mendaftarkan token push FCM/APNs dan menangani pesan dorong berdaulat

gunakan modul::mobile;

fungsi utama() {
    cetak("==============================================================");
    cetak("🚀 SISTEM PUSH NOTIFICATION GLOBAL SOVEREIGN WIDYAMOBILE");
    cetak("==============================================================");

    // 1. Meminta Token Pendaftaran Push dari Sistem Operasi
    cetak("Meminta pendaftaran token unik ke gerbang OS...");
    misal token_push = DapatkanTokenPushFCM();

    cetak("
📱 TOKEN PERANGKAT BERHASIL DITERBITKAN:");
    cetak("Nilai Token Registrasi: " + token_push);
    cetak("Format Token          : Base64URL JWT Format (64-byte Entropy)");
    cetak("Kedaulatan Privasi    : Zero Tracking SDK (100% In-House)");

    // 2. Simulasi Penerimaan Payload Push Terenkripsi dari Server
    misal paket_push_masuk = {
        "id_pesan": "MSG-PUSH-2026-X992",
        "tipe": "TRANSAKSI_SELESAI",
        "prioritas": "high",
        "payload_terenkripsi": "e30K...[RFC 8291 AES-GCM Encrypted]...",
        "data_terurai": {
            "judul": "Dana Masuk QRIS: Rp 250.000",
            "pesan": "Pelanggan 'Siti Aminah' berhasil membayar faktur #8819.",
            "faktur_id": "INV-8819",
            "suara": "cash_register.wav"
        }
    };

    cetak("
🔔 PESAN PUSH DITERIMA DARI GERBANG GLOBAL:");
    cetak("ID Notifikasi : " + paket_push_masuk.id_pesan);
    cetak("Judul Transaksi: " + paket_push_masuk.data_terurai.judul);
    cetak("Isi Pesan     : " + paket_push_masuk.data_terurai.pesan);
    cetak("File Audio    : " + paket_push_masuk.data_terurai.suara);

    // 3. Memberikan Umpan Balik Taktil Penerimaan Notifikasi
    GetarHaptik([40, 80, 40]);

    // 4. Merakit Antarmuka Pengguna Pemantau Push
    kembalikan Aplikasi({
        "judul": "Konsol Push Notification",
        "tema": "#0284c7",
        "badan": Halaman({
            "navigasi": BilahAtas({
                "judul": "🚀 Status Push Notification Global",
                "warna": "#0284c7"
            }),
            "badan": Kolom([
                Kartu({
                    "elevasi": 3,
                    "isi": Kolom([
                        TeksWidget("📱 Status Pendaftaran Token Push:"),
                        TeksWidget("• Status: Terdaftar & Aktif di Gateway"),
                        TeksWidget("• Token: " + token_push),
                        Pemisah()
                    ])
                }),
                Kartu({
                    "elevasi": 2,
                    "isi": Kolom([
                        TeksWidget("🔒 Standar Enkripsi Ujung-ke-Ujung:"),
                        TeksWidget("Pesan finansial dienkripsi berstandar RFC 8291"),
                        TeksWidget("sehingga tidak dapat dibaca oleh operator jaringan."),
                        Pemisah(),
                        TombolUtama("🔄 Perbarui Pendaftaran Token", fungsi() {
                            misal t_baru = DapatkanTokenPushFCM();
                            cetak("Pembaruan: Token baru disinkronkan ke WidyaBase.");
                        })
                    ])
                })
            ])
        })
    });
}
```

## Evaluasi Metrik & Benchmark Kecepatan Pengiriman Push

Tabel di bawah ini merangkum latensi pengiriman pesan dorong dari backend hingga tampil di layar perangkat seluler:

| Gerbang Notifikasi | Latensi Pengiriman Rata² | Persentase Terkirim (SLA) | Dukungan Background Silent |
| :--- | :---: | :---: | :---: |
| **Apple APNs (HTTP/2)** | **85 milidetik** | **99.95%** | `content-available: 1` |
| **Google FCM v1 REST** | **120 milidetik** | **99.90%** | `priority: "high"` |
| **SMS Gateway Tradisional** | **4.500 - 15.000 ms**| 92.50% (Sering Gagal) | Tidak Didukung |
| **WidyaPush Gateway (QUIC)**| **45 milidetik** | **99.99%** | Didukung Penuh |

## Latihan Evaluasi Pemahaman Bab 24

### Bagian A: Soal Esai
1. Jelaskan bagaimana alur penerbitan token unik perangkat (*Device Registration Token*) antara aplikasi seluler, sistem operasi, dan gerbang push notification (APNs/FCM)!
2. Mengapa enkripsi muatan data berstandar *RFC 8291* (Message Encryption for Web Push) mutlak diperlukan saat mengirimkan notifikasi transaksi perbankan sensitif?
3. Uraikan konsep dan kegunaan dari *Silent Background Push Notification* dalam memelihara kesegaran data inventaris aplikasi tanpa mengganggu kenyamanan pengguna dengan bunyi dering!

### Bagian B: Soal Pilihan Ganda
1. Layanan push notification resmi milik Apple yang digunakan secara universal untuk perangkat iPhone dan iPad adalah...
   A. APNs (Apple Push Notification service)  
   B. iMessage  
   C. AirDrop  
   D. FaceTime  
2. Layanan push notification resmi milik Google yang digunakan secara universal untuk ekosistem Android adalah...
   A. FCM (Firebase Cloud Messaging)  
   B. Google Talk  
   C. Android Market  
   D. Chrome Sync  
3. Standar enkripsi internasional IETF yang digunakan untuk melindungi isi payload pesan push secara ujung-ke-ujung adalah...
   A. RFC 8291 (Message Encryption for Web Push)  
   B. RFC 1918  
   C. RFC 791  
   D. RFC 2616  
4. Fungsi pembantu pada modul `modul::mobile` yang digunakan untuk meminta token pendaftaran push perangkat adalah...
   A. `DapatkanTokenPushFCM()`  
   B. `ambil_nomor_hp()`  
   C. `baca_alamat_email()`  
   D. `cek_kartu_keluarga()`  
5. Jenis pesan push yang tidak menampilkan banner visual di layar melainkan hanya membangunkan aplikasi di latar belakang untuk sinkronisasi data disebut...
   A. Silent Background Push  
   B. Urgent Alarm  
   C. Spam Banner  
   D. Popup Modal  
6. Protokol transport modern berbasis streaming koneksi biner yang digunakan oleh server APNs Apple adalah...
   A. HTTP/2 over TLS  
   B. Telnet  
   C. FTP  
   D. POP3  
7. Fitur pada iOS yang memungkinkan aplikasi mendekripsi payload pesan terenkripsi sebelum digambar ke layar oleh sistem operasi dinamakan...
   A. Notification Service Extension  
   B. WebKit Sandbox  
   C. Core Audio  
   D. Metal Shader  
8. Izin sistem operasi Android 13+ yang wajib disetujui pengguna secara eksplisit sebelum aplikasi diizinkan memunculkan notifikasi push adalah...
   A. `android.permission.POST_NOTIFICATIONS`  
   B. `android.permission.INTERNET`  
   C. `android.permission.WAKE_LOCK`  
   D. `android.permission.VIBRATE`  
9. Parameter prioritas pada payload FCM yang memastikan pesan dorong langsung membangunkan perangkat tanpa ditunda oleh Doze Mode adalah...
   A. `priority: "high"`  
   B. `priority: "low"`  
   C. `priority: "idle"`  
   D. `priority: "none"`  
10. Berapakah latensi rata-rata pengiriman pesan push dari backend hingga tiba di layar ponsel melalui gerbang APNs modern?
    A. Sekitar 85 milidetik  
    B. 5 menit  
    C. 1 jam  
    D. 30 detik  
