CodeBlanks Logo Icon CodeBlanks

onBackgroundMessage

onBackgroundMessage ile arka plan bildirimini öğrenirsin.

onBackgroundMessage nedir?

onBackgroundMessage metodu, uygulama arka plandayken gelen bildirimleri işlemek için üst düzey (top-level) bir fonksiyon kaydeder. Bu fonksiyon ayrı bir isolate içinde çalışır; bu yüzden sınıf içinde veya anonim olarak tanımlanamaz.

Future<void> handler(RemoteMessage msg) async {
  print(msg.title);
}
FirebaseMessaging.onBackgroundMessage(handler);

vm:entry-point pragma

Arka plan işleyici, ayrı bir isolate'te çalıştığı için yalnızca bağımsız değişkenlerine erişebilir; uygulamanın ana state'ine ulaşamaz. Bu yüzden handler fonksiyonu üst düzey olmalı ve @pragma('vm:entry-point') ile işaretlenmelidir.

@pragma('vm:entry-point')
Future<void> handler(RemoteMessage msg) async {
  print(msg.title);
}

Uygulama Arka plan işleyici yaz

Üst düzey handler fonksiyonu yaz: Future<void> döndürsün, RemoteMessage alsın ve message.title'ı yazdırsın. main içinde işleyiciyi FirebaseMessaging.onBackgroundMessage ile kaydet ve RemoteMessage('Merhaba') ile çağır.

Başlangıç kodu

main.dart
class RemoteMessage {
  final String title;
  RemoteMessage(this.title);
}

class FirebaseMessaging {
  static final FirebaseMessaging instance = FirebaseMessaging._();
  FirebaseMessaging._();
  static void onBackgroundMessage(Function handler) {}
}

// arka plan işleyici fonksiyonu yaz
// üst düzey ve async olmalı, message.title yazdırsın

void main() async {
  // işleyiciyi kaydet
  // işleyiciyi RemoteMessage('Merhaba') ile çağır
}

Örnek çözüm

main.dart
class RemoteMessage {
  final String title;
  RemoteMessage(this.title);
}

class FirebaseMessaging {
  static final FirebaseMessaging instance = FirebaseMessaging._();
  FirebaseMessaging._();
  static void onBackgroundMessage(Function handler) {}
}

Future<void> handler(RemoteMessage message) async {
  print(message.title);
}

void main() async {
  FirebaseMessaging.onBackgroundMessage(handler);
  await handler(RemoteMessage('Merhaba'));
}

Beklenen çıktı

Merhaba

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Arka plan bildirim işleyicisi nasıl tanımlanmalı?

  • Bir widget build metodu içinde
  • Yalnızca main içinde anonim fonksiyon olarak
  • Bir sınıfın içinde instance metot olarak
  • Üst düzey (top-level) ve async bir fonksiyon olarak Doğru cevap

Açıklama: Arka plan işleyicisi ayrı bir isolate'te çalıştığı için üst düzey bir fonksiyon olmalıdır; sınıf içinde veya anonim olarak tanımlanamaz.

2 İşleyici kaydet

Soru
FirebaseMessaging.____;
Cevap
FirebaseMessaging.onBackgroundMessage(handler);

Açıklama: Arka plan işleyicisini kaydetmek için FirebaseMessaging.onBackgroundMessage çağrılır ve handler fonksiyonu parametre olarak verilir.

3 onBackgroundMessage parçaları

Kavram Anlamı
onBackgroundMessage Arka plan işleyici kaydı
top-level function Üst düzey fonksiyon
isolate Ayrı yürütme ortamı
background Uygulama arka planda

İleri seviye bölümündeki tüm dersler