Selam!
https://pub.dev/packages/firebase_messaging
Flutter’da Firebase Cloud Messaging’i kullanmak oldukça basit. Gelin birlikte ne kadar basit olduğunu birlikte görelim, tabi öncesinde ufak bir özet geçelim.
FCM?
Firebase Cloud Messaging ile uygulamamız açık veya kapalı, kullanıcıyı uygulamayı kullanıyor veya arkaplana attı farketmeksizin veri iletmemizi sağlayan bir servis aslında.Tabi bunların hepsinin limiti ve belirli kuralları var.
Limitler
Kullanılmayan bir uygulamanın arka tarafta veri alıp durması çoğu uygulama için hoş olmayabilir lakin mesajlaşma vb uygulamaları için gerekli olan bu anlık bilgiler şıklaşırsada bu sefer pil tüketimi artar :/
İşte bu yüzden Android ve iOS tarafında değişken limitler bulunmakta.Platforma özel limitasyonlar için ayrıca araştırma yapmanızı tavsiye ederim.
Mesaj Tiplerimiz
Bildirim ve Veri olarak ikiye ayrılan mesaj tipleri çeşitli limitasyonlara sahip.Mesela veri mesajları daha az önceliğe sahipken, bildirim mesajları daha yüksek önceliğe sahip.Tabi burada vendor bazlı kısıtlamalarda bulunmakta.
Foreground , Background ve Terminated ‘ da ne?
Yuakarıdaki resimde görülüceği üzere uygulamamız 3 farklı durumda olabilir.
Foreground => Kullanıcı aktif kullanıyor yani ekranda bizim uygulama var, tanıdıklara selam verme vaki 😛
Background => Uygulama açık ama arkada sahneye çıkmayı bekliyor , bir şans verirse neler yapıcak neler 🙂
Terminated => Uygulama kapatıldı, arka taraftada açık değil yani ya kullanıcı son uygulamalardan bizim uygulamyı yukarı kaldırıp komple kapattı yada şu memory arttırıcı zımbırtılar bizim uygulamamızı gereksiz gördü kapattı.
İşte bu üç durum içinde veri gelince (FCM Mesajı) nelerin tetiklendiği gösterilmiş yukarıdaki resimde,az yukarda.
Neyse hadi kuralım
Paket bazlı kurulum anlatımı malesef yapamıcam çünkü paket zamanla değişmekte ve buradaki anlatımlar resmi dökümantasyonun yanında zamanla eski ve gereksiz olacak.
Bu bir firebase eklentisi=> Firebase core kurulumu yapılmalı
https://firebase.flutter.dev/docs/overview/#installation
Sonrasında Firebase Cloud Messaging
https://pub.dev/packages/firebase_messaging
Güzel, kurduk diyelim ve bu adımı geçelim.
Basit kullanım
İlk önce main.dart
/*
Arka planda gelen mesajları bu fonksiyon ile kontrol ediyoruz.Yanii, bu metod tetiklenmekte.
Burada dikkat edilmesi gereken iki nokta var
1. Bu metod global bir metod olmalı yani bir sınıfın içinde filan olmamalı yada main içerisinde!!!
2. Anon bir metod olmamalı
Yoksa null checker vb hatası alırsınız!
*/
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
await Firebase.initializeApp();
LocalStorageBase storageBase = await StorageServiceHive.init();
print('**' + message.data['paVersion'].toString());
await storageBase.storeIT(LocalStorageTags.paVersion, message.data['paVersion']);
print(await storageBase.getIT(LocalStorageTags.paVersion));
}
Future<void> main() async {
//Firebase'i ayağa kaldırdık
await Firebase.initializeApp();
//arkadan bildirim gelirse bu metod halledicek dedik7
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
//Foreground için farklı bir dosyada tanımlama yapılabilir.
//Buradaki unawaited ise pedantic uyarısını kaldırmak için eklendi
//eğer beklerseniz ve internet açılışta yoksa vb uygulama açılırken //sıkıntı yaratabilir malesef
unawaited(setupCloudMessage(storageBase));
runApp(MyApp());
}
Şimdi Foreground’ı ayarladığımız dart dosyasına bakalım
Future<void> setupCloudMessage(LocalStorageBase storageBase) async {
//do not await it! or without any connection app stuck on this code
unawaited(FirebaseMessaging.instance.subscribeToTopic('droidim'));
FirebaseMessaging.onMessage.listen(foreGroundMesssage);
}
void foreGroundMesssage(RemoteMessage message) {
print('Uygulama görünürken fcm geldi ' + message.messageType.toString());
print('Message data: ${message.data}');
if (message.noFirtification != null) {
print('Message also contained a notification: ${message.notification}');
}
if (message.messageType == 'data') {
print(message.messageType);
}
}
İşte bu kadar peki nasıl test edicez?
Firebase console üzerinden bir bildirim tipinde FCM mesajı iletebilirsiniz ve uygulamanız açıkken console çıktısında ve cihaz bildiriminde gönderdiğiniz mesajı görebilirsiniz.
Veyaa
Postman ile FCM ye veri mesajı için göndermesi için tetikleme yapmasını istersiniz.
unawaited(FirebaseMessaging.instance.subscribeToTopic('droidim'));
Unutma kurcalamadan öğrenemezsin 🙂
Bir yanıt yazın