Supabase ile Gerçek Zamanlı (Realtime) Bildirim Sistemi Kurulumu

Supabase ile Gerçek Zamanlı (Realtime) Bildirim Sistemi Kurulumu

CodeMareFi'ye Hoş Geldiniz!Yazılım dünyasındaki en güncel ve işlevsel kodları sizlerle paylaşmaya devam ediyoruz. Bu makalemizde, projelerinizde zaman kazanmanızı sağlayacak ve sisteminizi bir üst seviyeye taşıyacak önemli bir konuyu detaylıca ele alacağız. Hazırladığımız bu rehber, hem yeni başlayanlar hem de profesyonel geliştiriciler için özenle derlenmiştir. Aşağıdaki adımları ve kod bloklarını dikkatlice uygulayarak projenize sorunsuz bir entegrasyon sağlayabilirsiniz. Hazırsanız, detaylara geçelim.

Neden Supabase Realtime?

Eskiden veritabanındaki bir değişikliği frontend'de (istemcide) anında göstermek için Socket.io gibi ayrı bir websocket sunucusu kurmamız, state'leri eşitlememiz ve sürekli kopan bağlantılarla uğraşmamız gerekirdi. Supabase, PostgreSQL'in kendi log (WAL) yeteneklerini kullanarak, veritabanına yapılan ekleme, silme ve güncellemeleri saniyeler içinde doğrudan React/Next.js bileşenlerinize yayınlar.

Adım 1: Veritabanında Realtime'ı Aktif Etmek

Supabase panelinizde notifications adında bir tablonuz olduğunu varsayalım. Bu tablodaki değişiklikleri dinleyebilmek için SQL konsolundan veya arayüzden Replication ayarlarını açmalısınız:

-- SQL Konsolu üzerinden bildirimler tablosunu realtime'a açma
alter publication supabase_realtime add table notifications;

Adım 2: Frontend Tarafında Değişiklikleri Dinlemek (React Hook)

Sisteminizde yeni bir bildirim eklendiğinde (INSERT), bunu sayfa yenilenmeden kullanıcıya Toast mesajı olarak göstermek için aşağıdaki kodu kullanabilirsiniz.

"use client"
import { useEffect, useState } from 'react';
import { supabase } from '@/lib/supabase';
import toast from 'react-hot-toast';

export default function NotificationListener({ userId }) {
  const [notifications, setNotifications] = useState([]);

  useEffect(() => {
    // 1. Supabase kanalını oluştur ve dinlemeye başla
    const channel = supabase
      .channel('schema-db-changes')
      .on(
        'postgres_changes',
        {
          event: 'INSERT', // Sadece yeni eklemeleri dinle
          schema: 'public',
          table: 'notifications',
          filter: `user_id=eq.${userId}` // Sadece giriş yapan kullanıcıya ait olanlar
        },
        (payload) => {
          console.log('Yeni Bildirim Geldi!', payload.new);
          
          // Toast ile ekranda göster
          toast.success(payload.new.message);
          
          // State'e ekleyerek bildirimler menüsünü güncelle
          setNotifications((prev) => [payload.new, ...prev]);
        }
      )
      .subscribe();

    // 2. Component unmount olduğunda kanalı kapatarak bellek sızıntısını önle
    return () => {
      supabase.removeChannel(channel);
    };
  }, [userId]);

  return null; // Arayüzü bozmaması için null dönüyoruz
}
Güvenlik ve Performans Uyarısı

Realtime verilerini dinlerken daima filter özelliğini (örneğin user_id kontrolünü) eklediğinizden emin olun. Aksi takdirde, Supabase tüm veritabanı olaylarını herkese yayınlayacaktır ve istemci, yetkisi olmayan verileri bile görebilecektir. Row Level Security (RLS) kurallarınızın sağlam olması şarttır.

Sonuç ve Değerlendirme

Bu makalemizde paylaştığımız kodlar ve teknik bilgiler, sisteminizin performansını artıracak ve sizlere daha esnek bir geliştirme imkanı sunacaktır. CodeMareFi üzerinden paylaştığımız tüm içerikler, güncel yazılım standartlarına uygun olarak optimize edilmiş olup, projelerinizde güvenle kullanabileceğiniz şekilde hazırlanmıştır.

Eğer kurulum sırasında herhangi bir sorunla karşılaşırsanız, kod çalışmazsa veya sisteme ekstra özellikler eklemek isterseniz, iletişim kanallarımızdan ya da Discord sunucumuza katılarak diğer geliştirici arkadaşlarımızdan anında destek alabilirsiniz. Daha fazla ücretsiz kod paylaşımı, web tasarım rehberleri ve teknoloji makaleleri için sitemizi takipte kalmayı unutmayın. İyi kodlamalar!

0 Yorum

YORUM YAPMAK İÇİN SİSTEME SIZMANIZ GEREKİYOR

Lütfen yukarıdaki butonu kullanarak giriş yapın veya kimlik oluşturun.

Yorumlar yükleniyor...