Gereksinimler ve Ön Hazırlık
Projeye başlamadan önce geliştirme ortamınızın güncel olduğundan emin olmalısınız. 2026 yılı itibarıyla Flutter 3.x veya daha güncel bir sürüm kullanmanız, güvenlik yamaları ve performans iyileştirmeleri için kritiktir.
- Flutter SDK (En güncel kararlı sürüm).
- Firebase hesabı ve oluşturulmuş bir Firebase projesi.
- Android için
google-services.json, iOS içinGoogleService-Info.plistdosyaları. - Firebase CLI araçlarının bilgisayarınızda yüklü olması.
Firebase CLI kurulumu için terminalinize npm install -g firebase-tools komutunu girerek kurulumu tamamlayabilir ve firebase login ile yetkilendirme yapabilirsiniz.
Firebase Projesi ve Flutter Entegrasyonu
İlk adım, Flutter projenizi Firebase'e bağlamaktır. Firebase, bildirimlerin sunucudan cihaza iletilmesi için gerekli olan köprü görevini görür. Projenizin kök dizininde flutterfire configure komutunu çalıştırarak, Firebase CLI'ın gerekli konfigürasyon dosyalarını otomatik oluşturmasını sağlayın.
# Flutter projesini Firebase'e bağlamak için
flutterfire configure --project=proje-id-buraya
Bu komut, projenizdeki android/app/ ve ios/Runner/ klasörlerine gerekli yapılandırma dosyalarını ekleyecektir. Bu dosyalar, uygulamanızın Firebase servisleriyle konuşmasını sağlayan kimlik bilgilerini içerir.
Gerekli Paketlerin Kurulumu
Bildirimleri yönetmek için firebase_messaging ve flutter_local_notifications paketlerini kullanacağız. firebase_messaging sunucudan gelen veriyi alırken, flutter_local_notifications bu verinin kullanıcıya görsel bir bildirim olarak gösterilmesini sağlar.
# pubspec.yaml dosyasına ekleyin
dependencies:
firebase_core: ^3.0.0
firebase_messaging: ^15.0.0
flutter_local_notifications: ^17.0.0
Paketleri ekledikten sonra terminalde flutter pub get komutunu çalıştırarak bağımlılıkları projenize dahil edin.
Bildirim Servisi Sınıfının Oluşturulması
Kodunuzu temiz tutmak adına bildirim mantığını ayrı bir sınıf içinde yönetmelisiniz. Aşağıdaki örnek, bildirim izinlerini isteme ve gelen mesajları dinleme sürecini göstermektedir.
import 'package:firebase_messaging/firebase_messaging.dart';
class PushNotificationService {
final FirebaseMessaging _messaging = FirebaseMessaging.instance;
Future initialize() async {
// Kullanıcıdan bildirim izni al
NotificationSettings settings = await _messaging.requestPermission(
alert: true,
badge: true,
sound: true,
);
if (settings.authorizationStatus == AuthorizationStatus.authorized) {
String? token = await _messaging.getToken();
print("FCM Token: $token"); // Bu token'ı sunucunuzda saklayın
}
}
}
Bu sınıf, uygulama başlatıldığında çağrılmalı ve cihazın kendine has FCM Token değerini almalıdır. Bu token, bildirimleri belirli bir cihaza göndermek için kullanacağınız benzersiz anahtardır.
Bildirimleri Görüntüleme ve İşleme
Bildirimler "Foreground" (uygulama açıkken) ve "Background" (arka planda) olmak üzere iki şekilde gelir. Uygulama açıkken bildirimleri göstermek için flutter_local_notifications paketini yapılandırmanız gerekir.
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
Future setupLocalNotifications() async {
const AndroidInitializationSettings androidSettings =
AndroidInitializationSettings('@mipmap/ic_launcher');
const InitializationSettings initSettings =
InitializationSettings(android: androidSettings);
await flutterLocalNotificationsPlugin.initialize(initSettings);
}
Bu yapılandırma, gelen verinin sistem tepsisinde bir bildirim olarak belirmesini sağlar. Uygulama kapalıyken gelen bildirimler ise Firebase tarafından otomatik olarak sistem bildirimine dönüştürülür.
Bildirim Yöntemlerinin Karşılaştırması
| Yöntem | Avantajı | Dezavantajı |
|---|---|---|
| FCM (Firebase) | Ücretsiz, ölçeklenebilir, hızlı | Google bağımlılığı |
| OneSignal | Gelişmiş kullanıcı segmentasyonu | Ek maliyetli olabilir |
| Özel WebSocket | Tam kontrol | Sunucu yükü ve karmaşıklık |
Güvenlik Uyarısı: Bildirim içeriklerinde asla kullanıcı şifresi, kredi kartı bilgisi veya kişisel sağlık verisi gibi hassas bilgileri açık metin olarak göndermeyin. Bildirimleri sadece bir "tetikleyici" olarak kullanın; uygulama açıldığında veriyi güvenli bir API üzerinden çekin.
Sıkça Sorulan Sorular
FCM Token neden değişir?
Cihazın fabrika ayarlarına dönmesi, uygulamanın silinip tekrar yüklenmesi veya Firebase projesinin güncellenmesi gibi durumlarda token yenilenir. Token güncellemelerini takip etmek için onTokenRefresh metodunu dinlemelisiniz.
Uygulama kapalıyken bildirim gelmiyor, ne yapmalıyım?
Android tarafında AndroidManifest.xml dosyasında gerekli service tanımlarının yapıldığından ve iOS tarafında "Push Notifications" yeteneğinin (capability) Xcode üzerinden aktif edildiğinden emin olun.
Bildirimlere tıklayınca belirli bir sayfaya nasıl giderim?
onMessageOpenedApp stream'ini dinleyerek, gelen verideki özel anahtarları (payload) kontrol edebilir ve Navigator kullanarak ilgili sayfaya yönlendirme yapabilirsiniz.
Bildirimlerin gönderimini nasıl test ederim?
Firebase Console üzerindeki "Messaging" sekmesini kullanabilir veya kendi sunucunuzdan Firebase Admin SDK aracılığıyla HTTP istekleri göndererek test edebilirsiniz.
Üretim ortamında (Production) nelere dikkat etmeliyim?
Bildirimleri toplu gönderirken kullanıcıları gruplandırın ve gereksiz bildirimlerle kullanıcıyı rahatsız etmeyin. Ayrıca, bildirimlerin teslimat oranlarını Firebase Analytics üzerinden takip edin.
İleri Seviye Bildirim Senaryoları: Konu Bazlı (Topic) Mesajlaşma
Push bildirimlerinde her kullanıcıya tek tek token üzerinden mesaj göndermek yerine, kullanıcıları belirli ilgi alanlarına veya kategorilere göre gruplandırmak operasyonel yükü azaltır. Firebase Cloud Messaging'in "Topics" özelliği, uygulamanızdaki haber bültenleri, spor güncellemeleri veya kampanya bildirimleri için oldukça verimlidir.
Kullanıcıları bir konuya abone yapmak veya abonelikten çıkarmak için Flutter tarafında şu yöntemi kullanabilirsiniz:
import 'package:firebase_messaging/firebase_messaging.dart';
Future subscribeToTopic(String topicName) async {
await FirebaseMessaging.instance.subscribeToTopic(topicName);
print("Kullanıcı $topicName konusuna abone oldu.");
}
Future unsubscribeFromTopic(String topicName) async {
await FirebaseMessaging.instance.unsubscribeFromTopic(topicName);
print("Kullanıcı $topicName konusundan ayrıldı.");
}
Bildirim Performansı ve Hata Ayıklama (Debugging)
Uygulamanızın bildirim performansını optimize etmek ve hataları hızlıca tespit etmek için aşağıdaki stratejileri izlemelisiniz. Bildirimlerin geç ulaşması veya hiç ulaşmaması genellikle ağ kısıtlamaları veya yanlış yapılandırılmış "Payload" verilerinden kaynaklanır.
1. Bildirim Gecikmelerini Analiz Etme
Bildirimlerin gönderim süresi ile kullanıcının teslim alma süresi arasındaki farkı ölçmek için Firebase Console'daki Messaging Reports kısmını düzenli kontrol edin. Eğer "Delivery Rate" düşükse, cihazın "Doze Mode" (pil tasarrufu modu) bildirimleri kısıtlıyor olabilir.
2. Hata Ayıklama İçin Loglama
Bildirimlerin arka planda işlenip işlenmediğini anlamak için onBackgroundMessage handler'ı içerisine loglar ekleyin. Ancak unutmayın, bu fonksiyon ayrı bir izole edilmiş alanda (isolate) çalışır, bu yüzden global değişkenlere erişemezsiniz.
@pragma('vm:entry-point')
Future _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
// Firebase'i burada tekrar initialize etmeniz gerekebilir
await Firebase.initializeApp();
// Hata ayıklama için loglama
print("Arka plan mesajı alındı: ${message.messageId}");
if (message.notification != null) {
print("Bildirim başlığı: ${message.notification!.title}");
}
}
3. Payload Yapısı ve Veri Kaybı
Bildirim gönderirken data mesajları ile notification mesajlarını karıştırmamaya özen gösterin. notification içeren mesajlar sistem tepsisine düşerken, sadece data içeren mesajlar uygulamanın arka planda sessizce veri işlemesini sağlar. Eğer uygulamanızın bildirim gelince bir veritabanı güncellemesi yapmasını istiyorsanız, mutlaka data payload'ını kullanın.
| Senaryo | Payload Tipi | Davranış |
|---|---|---|
| Kullanıcıya görsel bildirim gösterme | Notification | Sistem tepsisinde otomatik görünür. |
| Arka planda veri güncelleme | Data Only | Sistem tepsisinde görünmez, kod ile işlenir. |
Bu teknikleri uygulayarak, push bildirim altyapınızı sadece bir "uyarı sistemi" olmaktan çıkarıp, uygulamanızın etkileşimini artıran profesyonel bir veri iletim kanalına dönüştürebilirsiniz.
Sonuç
Flutter ile push bildirim servisi kurmak, başlangıçta karmaşık görünse de Firebase'in sunduğu araçlarla oldukça standart bir süreçtir. Bu rehberde, token yönetiminden yerel bildirimlerin yapılandırılmasına kadar temel adımları tamamladınız. Bir sonraki adım olarak, kullanıcıların bildirim tercihlerini yönetebileceği bir "Bildirim Ayarları" sayfası tasarlayabilir ve sunucu tarafında bildirimleri kişiselleştirmek için Firebase Admin SDK'yı inceleyebilirsiniz.
Sorumluluk Reddi: Bu makalede paylaşılan kod örnekleri eğitim amaçlıdır. Üretim ortamındaki uygulamalarınızda güvenlik açıklarını önlemek için API anahtarlarınızı şifreleyin ve sunucu tarafında gerekli yetkilendirme kontrollerini (Authentication/Authorization) mutlaka uygulayın.


Yorumlar (0)
Yorum Yaz