Bu codelab'de, bildirimleri yönetmek için bir service worker kullanacaksınız. Buradaki talimatlarda, hizmet çalışanları ile bildirim izni isteme ve bildirim göndermenin temelleri hakkında bilgi sahibi olduğunuz varsayılmaktadır. Bildirimler hakkında bilgi edinmek için Bildirimler API'sini kullanmaya başlama başlıklı codelab'i inceleyin. Hizmet çalışanları hakkında daha fazla bilgi edinmek için Matt Gaunt'un Introduction to service workers (Hizmet çalışanlarına giriş) başlıklı makalesini inceleyin.
Örnek uygulama ve başlangıç kodu hakkında bilgi edinme
Yeni Chrome sekmesinde canlı uygulamaya bakarak başlayın:
- Geliştirici Araçları'nı açmak için `Control+Shift+J` (veya Mac'te `Command+Option+J`) tuşlarına basın.
Konsol sekmesini tıklayın.
Filtre kutusunun yanındaki Düzeyler açılır listesinde Bilgi seçeneğinin belirlendiğinden emin olun.
Canlı uygulamanızın Geliştirici Araçları konsolunda şu konsol mesajını görmeniz gerekir:
TODO: Implement getRegistration().Bu, bu codelab'de uygulayacağınız bir işlev saplamasından gelen bir mesajdır.
Şimdi örnek uygulamanın koduna göz atalım.
public/index.jsadresine göz atın:Uygulayacağınız işlevler için dört saplama vardır:
registerServiceWorker,getRegistration,unRegisterServiceWorkervesendNotification.requestPermissionişlevi, bildirim göndermek için kullanıcının iznini ister. Get started with the Notifications API codelab'i (Bildirimler API'si ile Başlarken codelab'i) tamamladıysanız buradakirequestPermissionişlevinin kullanıldığını fark edeceksiniz. Tek fark, artık izin isteği çözüldükten sonra kullanıcı arayüzünü de güncellemesidir.updateUIişlevi, uygulamanın tüm düğmelerini ve mesajlarını yeniler.initializePageişlevi, tarayıcıdaki hizmet çalışanı özelliği algılamasını gerçekleştirir ve uygulama kullanıcı arayüzünü günceller.Komut dosyası, sayfa yüklenene kadar bekler ve ardından sayfayı başlatır.
public/service-worker.jsadlı kişiyi aç.Adından da anlaşılacağı gibi, bu dosyayı service worker olarak kaydetmek için uygulamaya kod eklersiniz.
Dosya henüz uygulama tarafından kullanılmıyor olsa da, hizmet çalışanı etkinleştirildiğinde konsola bir mesaj yazdıracak bazı başlangıç kodları içeriyor.
Service worker bildirim aldığında bunları işlemek için
public/service-worker.jsdosyasına kod ekleyeceksiniz.
Hizmet çalışanını kaydetme
Bu adımda, kullanıcı uygulama kullanıcı arayüzünde Register service worker'ı tıkladığında çalışacak kodu yazacaksınız.
Bu kod, public/service-worker.js hizmet çalışanını kaydeder.
public/index.jsadlı kişiyi aç.registerServiceWorkerişlevini aşağıdaki kodla değiştirin:// Use the Service Worker API to register a service worker. async function registerServiceWorker() { await navigator.serviceWorker.register('./service-worker.js') updateUI(); }registerServiceWorker, sözlerin işlenmesini daha kolay hale getirmek içinasync functionbildirimini kullanır. Bu sayedePromisedeğerinin çözümlenmiş değeriniawait. Örneğin, yukarıdaki işlev, kullanıcı arayüzünü güncellemeden önce bir hizmet çalışanını kaydetme işleminin sonucunu bekler. Daha fazla bilgi içinawaitbaşlıklı MDN makalesine bakın.Kullanıcı artık bir hizmet çalışanı kaydedebildiğine göre, hizmet çalışanı kayıt nesnesine referans alabilirsiniz.
public/index.jsiçindegetRegistrationişlevini aşağıdaki kodla değiştirin:// Get the current service worker registration. function getRegistration() { return navigator.serviceWorker.getRegistration(); }Yukarıdaki işlev, varsa mevcut Service Worker kaydını almak için Service Worker API'yi kullanır. Bu, hizmet çalışanı kaydına referans almayı biraz daha kolaylaştırır.
Hizmet çalışanı kaydı işlevini tamamlamak için hizmet çalışanının kaydını iptal edecek kodu ekleyin.
unRegisterServiceWorkerişlevini aşağıdaki kodla değiştirin:// Unregister a service worker, then update the UI. async function unRegisterServiceWorker() { // Get a reference to the service worker registration. let registration = await getRegistration(); // Await the outcome of the unregistration attempt // so that the UI update is not superceded by a // returning Promise. await registration.unregister(); updateUI(); }
Canlı uygulamayı görüntülediğiniz sekmede sayfayı yeniden yükleyin. Hizmet çalışanı kaydet ve Hizmet çalışanı kaydını iptal et düğmeleri artık çalışıyor olmalıdır.
Service worker'a bildirim gönderme
Bu adımda, kullanıcı uygulama kullanıcı arayüzünde Bildirim gönder'i tıkladığında çalışacak kodu yazacaksınız. Bu kod bir bildirim oluşturur, hizmet çalışanının kayıtlı olup olmadığını kontrol eder ve ardından postMessage yöntemini kullanarak bildirimi hizmet çalışanına gönderir.
public/index.js bağlantısını açın ve sendNotification işlevini aşağıdaki kodla değiştirin:
// Create and send a test notification to the service worker.
async function sendNotification() {
// Use a random number as part of the notification data
// (so you can tell the notifications apart during testing!)
let randy = Math.floor(Math.random() * 100);
let notification = {
title: 'Test ' + randy,
options: { body: 'Test body ' + randy }
};
// Get a reference to the service worker registration.
let registration = await getRegistration();
// Check that the service worker registration exists.
if (registration) {
// Check that a service worker controller exists before
// trying to access the postMessage method.
if (navigator.serviceWorker.controller) {
navigator.serviceWorker.controller.postMessage(notification);
} else {
console.log('No service worker controller found. Try a soft reload.');
}
}
}
Bu kodun yaptığı işlemler:
sendNotification, eşzamansız bir işlev olduğundan hizmet çalışanı kaydına referans almak içinawaitişlevini kullanabilirsiniz.Service worker'ın
postMessageyöntemi, uygulamadan service worker'a veri gönderir. Daha fazla bilgi için postMessage ile ilgili MDN dokümanlarına bakın.Kod,
postMessageişlevine erişmeye çalışmadan öncenavigator.serviceWorker.controllerözelliğinin varlığını kontrol eder. Etkin bir hizmet çalışanı yoksa veya sayfa zorunlu olarak yenilenmişse (Shift+Yeniden yükle)navigator.serviceWorker.controller,nullolur. Daha fazla bilgi için MDN'deki ServiceWorker denetleyici dokümanlarına bakın.
Service worker'daki bildirimleri işleme
Bu adımda, hizmet çalışanında kendisine gönderilen iletileri işleyecek ve kullanıcıya bildirimler gösterecek kodu yazacaksınız.
public/service-worker.js adlı kişiyi aç. Dosyanın sonuna aşağıdaki kodu ekleyin:
// Show notification when received
self.addEventListener('message', (event) => {
let notification = event.data;
self.registration.showNotification(
notification.title,
notification.options
).catch((error) => {
console.log(error);
});
});
Kısaca açıklayalım:
self, hizmet çalışanın kendisini ifade eder.Bildirimlerin gösterilmesi artık hizmet çalışanı tarafından yapılsa da bildirim izninin kullanıcıdan alınması için ana uygulama kullanıcı arayüzü sorumludur. İzin verilmezse
showNotificationtarafından döndürülen söz reddedilir. Yukarıdaki kod, yakalanmamış birPromisereddetme hatasını önlemek ve bu hatayı biraz daha zarif bir şekilde işlemek için bircatchbloğu kullanır.
Bu serideki bir sonraki codelab olan Build a push notifications server (Push bildirimleri sunucusu oluşturma) başlıklı codelab'e geçin.