Javascript İle Tarayıcı Tabanlı Bir Web Bildirim Sistemi Nasıl Yapılır?

Javascript İle Tarayıcı Tabanlı Bir Web Bildirim Sistemi Nasıl Yapılır?
Javascript İle Tarayıcı Tabanlı Bir Web Bildirim Sistemi Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Web bildirimlerini başarıyla uygulayabilmek için bazı teknik ön koşulların sağlanması gerekir. Tarayıcı bildirimleri, güvenlik politikaları gereği yalnızca HTTPS protokolü üzerinden veya yerel geliştirme ortamlarında (localhost) çalışır.

  • Modern bir web tarayıcısı (Chrome, Firefox, Edge veya Safari).
  • HTTPS destekli bir sunucu veya yerel bir geliştirme ortamı.
  • Temel düzeyde JavaScript (ES6+ sözdizimi) bilgisi.
  • Kullanıcı deneyimini gözetmek adına, bildirimleri tetiklemek için bir kullanıcı etkileşimi (buton tıklaması vb.).

Bildirim İzni İsteme ve Kontrol Etme

Bir web sitesinin kullanıcıya bildirim gönderebilmesi için öncelikle kullanıcının tarayıcı üzerinden onay vermesi gerekir. JavaScript'te Notification.permission özelliği, bu iznin durumunu kontrol etmemizi sağlar.

Aşağıdaki kod örneği, kullanıcının bildirim izni verip vermediğini kontrol eder ve izin durumu "default" ise kullanıcıdan izin ister.

function bildirimIzinIste() {
    if (!("Notification" in window)) {
        console.error("Bu tarayıcı bildirimleri desteklemiyor.");
        return;
    }

    if (Notification.permission === "granted") {
        console.log("Bildirim izni zaten verilmiş.");
    } else if (Notification.permission !== "denied") {
        Notification.requestPermission().then(permission => {
            if (permission === "granted") {
                console.log("Kullanıcı bildirim iznini onayladı.");
            }
        });
    }
}

Bu kodda, tarayıcının Notification API'sini destekleyip desteklemediği kontrol edilir. Ardından Notification.requestPermission() metodu ile kullanıcıdan izin istenir. Bu işlem bir Promise döndürür ve kullanıcının seçimine göre işlem yapar.

Basit Bir Bildirim Oluşturma ve Gösterme

İzin alındıktan sonra bildirim oluşturmak oldukça basittir. new Notification() yapıcı fonksiyonu, bildirimin başlığını ve seçenekler nesnesini kabul eder.

function bildirimGoster(baslik, mesaj) {
    const secenekler = {
        body: mesaj,
        icon: 'bildirim-ikonu.png',
        badge: 'badge.png',
        vibrate: [200, 100, 200]
    };

    if (Notification.permission === "granted") {
        new Notification(baslik, secenekler);
    }
}

Burada kullanılan body özelliği bildirimin içeriğini, icon ise bildirimin yanında görünecek resmi tanımlar. vibrate özelliği ise destekleyen cihazlarda bildirim geldiğinde titreşim düzenini belirler.

Bildirim Etkileşimlerini Yönetme

Bildirimler sadece bilgi vermekle kalmaz, aynı zamanda kullanıcı bildirime tıkladığında belirli aksiyonlar almamızı sağlar. onclick olay dinleyicisi ile kullanıcı bildirime tıkladığında uygulamanın belirli bir sayfaya yönlendirilmesini sağlayabiliriz.

const bildirim = new Notification("Yeni Mesaj", {
    body: "Bir arkadaşınız size mesaj gönderdi.",
    tag: "mesaj-bildirimi"
});

bildirim.onclick = function() {
    window.open("https://uygulamaniz.com/mesajlar", "_blank");
    bildirim.close();
};

tag özelliği, aynı türdeki bildirimlerin üst üste binmesini engeller. Eğer aynı etiketle yeni bir bildirim gönderilirse, eski bildirim güncellenir.

Bildirim Yöntemlerinin Karşılaştırılması

Yöntem Avantaj Dezavantaj
Native Notification API Tarayıcı entegrasyonu, yüksek performans Sadece tarayıcı açıkken çalışır
Service Worker Push Tarayıcı kapalıyken bile bildirim gönderir Kurulumu daha karmaşıktır

Güvenlik Uyarısı: Bildirimleri asla kullanıcıyı rahatsız edecek şekilde (spam) kullanmayın. Gereksiz bildirimler, kullanıcıların sitenizi "engellemesine" neden olur. Ayrıca, bildirim içeriğinde kullanıcıdan gelen verileri doğrudan ekrana basarken XSS (Cross-Site Scripting) saldırılarına karşı verileri mutlaka sanitize edin.

Yaygın Hatalar ve Debug İpuçları

Bildirim sistemi geliştirirken karşılaşılan en yaygın sorun, izinlerin yanlış yönetilmesidir. Kullanıcı "Engelle" seçeneğine tıkladığında, tarayıcı ayarlarından izinler manuel olarak sıfırlanmadığı sürece tekrar izin isteyemezsiniz.

  • Hata 1: HTTP üzerinden bildirim göndermeye çalışmak. (Çözüm: HTTPS kullanın veya localhost üzerinden test edin.)
  • Hata 2: Bildirimleri kullanıcı etkileşimi olmadan tetiklemek. (Çözüm: Bildirimleri mutlaka bir buton tıklaması veya belirli bir kullanıcı aksiyonu sonrası başlatın.)
  • Hata 3: Service Worker kapsamı dışında bildirim tetiklemeye çalışmak. (Çözüm: Service Worker kayıtlı olduğundan emin olun.)

Sıkça Sorulan Sorular

Bildirimler tarayıcı kapalıyken çalışır mı?

Sadece Notification API kullanarak bildirimler tarayıcı kapalıyken çalışmaz. Tarayıcı kapalıyken bildirim göndermek için "Service Worker" ve "Push API" entegrasyonu gereklidir.

Kullanıcı izni reddederse ne yapmalıyım?

Kullanıcı izni reddettiğinde, bildirimleri zorla açamazsınız. Kullanıcıya bildirimlerin neden önemli olduğunu açıklayan bir bilgilendirme metni sunarak, ayarlar panelinden izni nasıl açabileceğini gösterebilirsiniz.

Bildirimler mobil cihazlarda nasıl görünür?

Mobil cihazlarda bildirimler, işletim sisteminin bildirim merkezinde (Android/iOS) diğer uygulama bildirimleriyle aynı şekilde görünür. vibrate özelliği mobil cihazlar için oldukça önemlidir.

Bildirimlerin süresi sınırlı mıdır?

Evet, bazı tarayıcılar bildirimlerin belirli bir süre sonra otomatik olarak kaybolmasını sağlar. Bu süreyi doğrudan JavaScript ile kontrol etmek tarayıcı kısıtlamaları nedeniyle her zaman mümkün değildir.

Aynı anda kaç bildirim gönderebilirim?

Teknik bir sınır olmasa da, kullanıcı deneyimi açısından aynı anda çok sayıda bildirim göndermekten kaçınmalısınız. tag özelliğini kullanarak bildirimleri gruplandırmak en iyi pratiktir.

Bildirim Sistemlerinde Performans Optimizasyonu ve Kaynak Yönetimi

Web bildirimleri, kullanıcı deneyimini iyileştirmek için harika bir araç olsa da, yanlış yapılandırıldığında tarayıcı performansını olumsuz etkileyebilir. Özellikle yoğun trafik alan uygulamalarda bildirimlerin zamanlaması ve sıklığı, tarayıcının ana iş parçacığını (main thread) yormamalıdır.

Performansı optimize etmek için şu stratejileri uygulayabilirsiniz:

  • Debouncing Kullanımı: Kullanıcı aynı anda birden fazla aksiyon gerçekleştirdiğinde, her aksiyon için ayrı bir bildirim tetiklemek yerine, bildirimleri bir kuyrukta toplayıp belirli aralıklarla göstermeyi tercih edin.
  • Görsel Varlıkların Optimizasyonu: Bildirimlerde kullanılan ikonlar (icon özelliği) küçük boyutlu (genellikle 128x128 veya 192x192 piksel) ve optimize edilmiş formatlarda (WebP veya sıkıştırılmış PNG) olmalıdır.
  • Koşullu Tetikleme: Bildirimleri sadece kullanıcı uygulama ile aktif etkileşimde değilken veya belirli bir olay gerçekleştiğinde (örneğin mesaj geldiğinde) tetikleyin.
// Performanslı bildirim tetikleyici örneği
let notificationQueue = [];

function showNotificationWithThrottle(title, options) {
    // Aynı anda çok fazla bildirim oluşmasını engellemek için basit bir kuyruk yönetimi
    if (notificationQueue.length < 3) {
        const n = new Notification(title, options);
        notificationQueue.push(n);
        
        n.onclose = () => {
            notificationQueue = notificationQueue.filter(item => item !== n);
        };
    } else {
        console.warn("Bildirim limiti aşıldı, bildirim kuyruğa alınmadı.");
    }
}

Bildirim Sistemleri İçin İleri Düzey Test Senaryoları

Bir bildirim sistemini canlıya almadan önce farklı senaryoları test etmek, uygulamanızın kararlılığını artırır. Sadece "başarılı" senaryolara değil, uç durumlara da odaklanmalısınız.

Test Edilmesi Gereken Kritik Durumlar

Senaryo Beklenen Sonuç
İzin reddedildiğinde Uygulama arayüzü kullanıcıyı bilgilendirmeli ve hata vermemelidir.
Çevrimdışı (Offline) durum Bildirim tetiklendiğinde uygulama çökmemeli, işlem sessizce atlanmalıdır.
Farklı ekran boyutları Bildirim başlığı ve gövde metni mobil cihazlarda kesilmeden okunabilmelidir.

Otomasyon testleri için Playwright veya Puppeteer gibi kütüphaneleri kullanarak tarayıcı izinlerini simüle edebilirsiniz. Aşağıdaki örnek, bir test ortamında bildirim iznini otomatik olarak kabul etmeyi simüle eder:

// Puppeteer ile bildirim izni testi
const context = browser.defaultBrowserContext();
await context.overridePermissions('https://siteniz.com', ['notifications']);

// Artık bildirim tetiklendiğinde izin sormadan doğrudan gösterilecektir.
await page.evaluate(() => {
    new Notification("Test Bildirimi", { body: "Bu bir test mesajıdır." });
});

Bu testleri CI/CD süreçlerinize dahil ederek, bildirim sisteminizin her güncellemeden sonra sorunsuz çalıştığından emin olabilirsiniz. Özellikle tag ve renotify özelliklerinin farklı tarayıcılarda beklenen davranışı sergileyip sergilemediğini manuel olarak kontrol etmeyi unutmayın.

Sonuç

JavaScript ile tarayıcı tabanlı bir bildirim sistemi kurmak, kullanıcı etkileşimini artırmak için güçlü bir araçtır. Bu rehberde, izin alma sürecinden bildirimleri yönetmeye kadar temel adımları tamamladık. Bir sonraki adım olarak, Service Worker'ları kullanarak tarayıcı kapalıyken bile bildirim gönderebilen "Push Notification" mimarisini araştırmanızı öneririm.

Yasal Sorumluluk Reddi: Bu rehberdeki kod örnekleri eğitim amaçlıdır. Uygulamanızda kullanacağınız bildirim sistemlerinin yerel veri gizliliği yasalarına (KVKK, GDPR) uygun olduğundan emin olun. Kodların güvenliği ve veri işleme süreçleri tamamen geliştiricinin sorumluluğundadır.

Bu yazıya tepkinizi paylaşın:
Deniz Arıkan

On yıldır pratik yaşam çözümleri ve ev ekonomisi üzerine editörlük yapıyorum. Karmaşık süreçleri herkesin uygulayabileceği basit adımlara dönüştürme konusunda uzmanım.

Yorumlar (0)

Yorum Yaz