0Pricing
Frontend Academy · Pelajaran

Notifikasi Push

Minta izin, berlangganan push dengan Push API, terima pesan di Service Worker, dan tampilkan notifikasi dengan showNotification.

Notifikasi Push adalah pelajaran Frontend Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Frontend Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Frontend Academy mencakup 4 pelajaran total.

Mengapa Notifikasi Push?

Notifikasi push mengajak pengguna kembali saat aplikasi tidak terbuka—peringatan pesan, pembaruan berita, dan pengingat keranjang belanja yang ditinggalkan. Fitur ini didukung oleh pekerja layanan, sehingga tetap berfungsi meskipun halaman ditutup.

API Push + API Notifikasi

Dua API browser bekerja bersama. API Push menerima pesan dari server melalui langganan push. API Notifikasi menampilkan pesan kepada pengguna.

Meminta Izin

Minta izin pengguna sebelum berlangganan—lakukan hanya sebagai respons terhadap tindakan pengguna yang jelas (klik tombol), bukan saat halaman dimuat.

async function enableNotifications() {
  const permission = await Notification.requestPermission();
  if (permission !== 'granted') {
    alert('Notifications denied');
    return;
  }
  // proceed to subscribe...
}

Langganan Push

Berlangganan melalui pendaftaran pekerja layanan yang aktif. Kunci publik VAPID milik server mengautentikasi langganan tersebut.

async function subscribeToPush() {
  const reg = await navigator.serviceWorker.ready;
  const sub = await reg.pushManager.subscribe({
    userVisibleOnly: true, // required: every push must show a notification
    applicationServerKey: urlBase64ToUint8Array(VAPID_PUBLIC_KEY)
  });
  // Send sub to your server:
  await fetch('/api/save-subscription', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(sub)
  });
}

Kunci VAPID

Kunci VAPID (Voluntary Application Server Identification) mengidentifikasi server Anda kepada layanan push (FCM, Mozilla, dan lainnya). Buat sekali dan simpan kunci privat di server Anda.

# Generate VAPID keys with web-push CLI:
npx web-push generate-vapid-keys

# Output:
# Public Key: BJ...
# Private Key: ka...

Push di Sisi Server

Gunakan pustaka npm web-push untuk mengirim push ke langganan yang tersimpan.

import webpush from 'web-push';

webpush.setVapidDetails(
  'mailto:you@example.com',
  process.env.VAPID_PUBLIC,
  process.env.VAPID_PRIVATE
);

await webpush.sendNotification(savedSubscription, JSON.stringify({
  title: 'New message',
  body: 'Alice sent you a message',
  url: '/inbox/123'
}));

Menangani Push di Pekerja Layanan

SW menerima peristiwa push dan menampilkan notifikasi.

// sw.js
self.addEventListener('push', (event) => {
  const data = event.data ? event.data.json() : {};
  event.waitUntil(
    self.registration.showNotification(data.title || 'Notification', {
      body: data.body,
      icon: '/icons/192.png',
      badge: '/icons/badge.png',
      data: { url: data.url }
    })
  );
});

Penangan Klik Notifikasi

open atau focus aplikasi ketika pengguna mengeklik notifikasi.

self.addEventListener('notificationclick', (event) => {
  event.notification.close();
  const url = event.notification.data.url || '/';
  event.waitUntil(
    clients.matchAll({ type: 'window' }).then(clientList => {
      for (const client of clientList) {
        if (client.url.endsWith(url) && 'focus' in client) return client.focus();
      }
      return clients.openWindow(url);
    })
  );
});

Opsi Notifikasi

Sesuaikan: ikon, badge (ikon kecil di area notifikasi), image (gambar besar), actions (tombol), tag (menggantikan notifikasi lama dengan tag yang sama), requireInteraction (tetap tampil sampai ditutup), dan silent.

self.registration.showNotification('Message', {
  body: 'Alice sent you a photo',
  icon: '/icons/192.png',
  image: '/images/alice-photo.jpg',
  actions: [
    { action: 'view', title: 'View' },
    { action: 'reply', title: 'Reply' }
  ],
  tag: 'message-from-alice', // replaces earlier 'message-from-alice'
  requireInteraction: false
});

Berhenti Berlangganan

Biarkan pengguna berhenti berlangganan—panggil pushSubscription.unsubscribe() dan hapus langganan tersebut dari server Anda.

async function disablePush() {
  const reg = await navigator.serviceWorker.ready;
  const sub = await reg.pushManager.getSubscription();
  if (sub) {
    await sub.unsubscribe();
    await fetch('/api/delete-subscription', {
      method: 'POST',
      body: JSON.stringify({ endpoint: sub.endpoint })
    });
  }
}

Dukungan iOS

iOS 16.4+ mendukung Web Push, tetapi hanya untuk PWA yang dipasang di Layar Utama. Perangkat sebelum iOS 16.4 dan Safari di web iPhone sama sekali tidak mendukung web push.

Praktik Terbaik

1) Minta izin hanya setelah tindakan pengguna yang jelas. 2) Kirim notifikasi yang bermakna dan tidak terlalu sering. 3) Selalu tampilkan notifikasi untuk setiap peristiwa push (browser dapat mencabut izin jika Anda tidak melakukannya). 4) Sediakan cara mudah untuk berhenti berlangganan. 5) Uji dengan ketiga layanan push (FCM, Mozilla, WindowsPush).

Kesalahan Umum

Push gagal tanpa pemberitahuan jika: userVisibleOnly bernilai false (Chrome memerlukan true), kunci VAPID tidak cocok, langganan kedaluwarsa (berlangganan ulang), atau tidak ada notifikasi yang ditampilkan pada peristiwa push (browser akan mencabut izin).

Pemeriksaan Singkat

Mengapa setiap pesan push harus menghasilkan notifikasi yang terlihat (dengan userVisibleOnly: true)?

Ringkasan: Notifikasi Push

Minta izin hanya melalui tindakan pengguna. Berlangganan melalui reg.pushManager.subscribe dengan kunci publik VAPID. Server menggunakan pustaka web-push untuk mengirim. Peristiwa push SW memanggil showNotification. notificationclick membuka atau memusatkan aplikasi Anda. Sesuaikan ikon/badge/image/actions/tag. Selalu tampilkan notifikasi (userVisibleOnly: true wajib digunakan). iOS 16.4+ mendukungnya, tetapi hanya untuk PWA yang dipasang.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Notifikasi Push” gratis?

Ya — teks lengkap “Notifikasi Push” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Frontend Academy, upgrade ke CoddyKit PRO. Kursus Frontend Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Notifikasi Push”?

Minta izin, berlangganan push dengan Push API, terima pesan di Service Worker, dan tampilkan notifikasi dengan showNotification. Kamu berlatih Frontend Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Frontend Academy?

Tidak diperlukan pengalaman sebelumnya. Frontend Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Notifikasi Push” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Frontend Academy ini?

Ya. Setiap pelajaran Frontend Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Manifest Aplikasi Web
  2. Pendaftaran dan Siklus Hidup Service Worker
  3. Strategi Tembolok Offline: CacheFirst NetworkFirst
  4. Notifikasi Push
← Kembali ke Frontend Academy