Di ekstensi, Anda dapat menggunakan penyedia Push apa pun untuk mengirim notifikasi dan pesan push. Push dari Push API akan diproses oleh pekerja layanan Anda segera setelah diterima. Jika pekerja layanan ditangguhkan, Push akan mengaktifkannya kembali. Proses untuk menggunakannya di ekstensi sama persis dengan yang Anda gunakan di web terbuka.
Mendapatkan izin untuk menggunakan Push API
Saat Anda mendaftarkan server Push di situs normal, pengguna akan melihat perintah izin untuk memberikan atau menolaknya. Dengan ekstensi, perintah tersebut tidak akan ditampilkan. Untuk menggunakan Push API di ekstensi, Anda harus menetapkan izin notifications di manifest.json
{
"manifest_version": 3,
...
"permissions": ["notifications"]
Jika Anda tidak memiliki izin ini, interaksi apa pun dengan registration.pushManager akan menghasilkan error langsung, hasil yang sama seperti jika pengguna menolak izin. Selain itu, perlu diingat bahwa izin
notifications akan menyebabkan peringatan izin
ditampilkan saat penginstalan. Chrome juga akan menonaktifkan ekstensi untuk penginstalan yang ada hingga pengguna menyetujui permintaan izin baru. Anda dapat
mempelajari lebih lanjut cara menanganinya di
panduan peringatan izin.
Penyedia Push dan layanan Push
Setelah menambahkan izin ke manifest.json, Anda harus mengonfigurasi koneksi antara backend dan ekstensi. Koneksi ini dapat dianggap sebagai dua bagian, yaitu penyedia Push dan layanan Push. Penyedia adalah SDK yang Anda gunakan untuk mengirim pesan ke layanan Push. Ada banyak opsi yang berbeda, dan penyedia Push apa pun dapat berfungsi untuk Push API (meskipun mereka mungkin tidak menawarkan SDK yang memudahkan integrasi). Anda harus bereksperimen dengan SDK penyedia untuk melihat apa yang mungkin dilakukan. Layanan Push adalah tempat perangkat pengguna akhir terdaftar, sehingga dapat diberi tahu tentang pesan push yang dikirim oleh penyedia Push. Hal ini tidak dapat Anda kontrol, karena dikodekan secara permanen ke dalam browser individual. Untuk Chrome, Firebase Cloud Messaging adalah layanan Push. Pesan apa pun yang dikirim ke pengguna Chrome akan dirutekan melalui layanan ini.
Menghosting sendiri penyedia Push
Penyedia Push apa pun dapat berfungsi, tetapi tidak semua penyedia menawarkan SDK yang berfungsi di pekerja layanan. Anda harus berkonsultasi dengan penyedia jika mengalami masalah saat menjalankannya. Namun, Anda tidak perlu menggunakan penyedia publik. Dengan menggunakan library seperti web-push, Anda dapat menghosting backend sendiri.
Anda dapat menguji library ini menggunakan web-push-codelab.glitch.me. Secara khusus, Anda harus menyalin kunci publik VAPID server Push untuk membuat langganan Push di browser. Kunci publik ini sebenarnya adalah nilai biner berenkode base64 yang perlu didekode dan dikonversi ke Uint8Array agar dapat didaftarkan ke pengelola Push browser. Ada library yang tersedia untuk melakukan logika ini, tetapi berikut adalah semua yang diperlukan.
function urlB64ToUint8Array(base64String) {
const padding = '='.repeat((4 - (base64String.length % 4)) % 4);
const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/');
const rawData = atob(base64);
const outputArray = new Uint8Array(rawData.length);
for (let i = 0; i < rawData.length; ++i) {
outputArray[i] = rawData.charCodeAt(i);
}
return outputArray;
}
Nilai yang diberikan tersebut diteruskan ke pengelola Push
const SERVER_PUBLIC_KEY = '_INSERT_VALUE_HERE_';
const applicationServerKey = urlB64ToUint8Array(SERVER_PUBLIC_KEY);
async function subscribe() {
try {
let subscription = await self.registration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey
});
console.log(`Subscribed: ${JSON.stringify(subscription,0,2)}`);
return subscription
} catch (error) {
console.error('Subscribe error: ', error);
}
}
const subscription = await subscribe();
Fungsi subscribe menampilkan PushSubscription, sebuah
objek yang berisi metadata server Push. Karena Anda menggunakan
web-push-codelab.glitch.me, nilai ini harus disalin ke
bagian Langganan Push di halaman.
Setelah memiliki PushSubscription, Anda siap mendaftarkan pemroses untuk pesan push di pekerja layanan ekstensi.
self.addEventListener('push', function (event) {
console.log(`Push had this data/text: "${event.data.text()}"`);
});
Dengan pemroses yang sudah ada, Anda dapat mengirim pesan di web-push-codelab.glitch.me, dan pesan akan dicatat ke dalam konsol pekerja layanan.
Karena merupakan standar web terbuka, ada banyak dokumentasi yang ada tentang cara menerapkan Web Push, termasuk di blog Chrome. Untuk versi lengkap contoh yang dibahas di sini, ada satu yang tersedia di repo contoh ekstensi kami.
Push Senyap
Anda dapat menerima notifikasi Push di ekstensi Manifes v3 sejak Manifes v3 diperkenalkan di Chrome 88. Namun, selalu ada
persyaratan bahwa notifikasi menampilkan beberapa jenis perintah yang terlihat oleh pengguna,
seperti Notifikasi Web. Hal ini membuatnya menjadi kurang berguna jika Anda ingin mengirim perintah atau update data ke ekstensi tanpa mengganggu pengguna dengan informasi yang tidak perlu. Mulai Chrome 121, ekstensi
dapat menetapkan userVisibleOnly ke false. Kini Anda dapat mengirim notifikasi push senyap yang tidak terlihat oleh pengguna kepada pengguna. Untuk menggunakannya, tetapkan userVisibleOnly ke false saat Anda memanggil pushManager.subscribe.
let subscription = await self.registration.pushManager.subscribe({
userVisibleOnly: false,
applicationServerKey
});