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
- Manifest Aplikasi Web
- Pendaftaran dan Siklus Hidup Service Worker
- Strategi Tembolok Offline: CacheFirst NetworkFirst
- Notifikasi Push