Wyślij wiadomość testową do aplikacji w tle

Aby zacząć korzystać z FCM, zrealizuj najprostszy przypadek użycia: wyślij testowe powiadomienie z  kompozytora powiadomień na urządzenie deweloperskie, gdy aplikacja działa na nim w tle. Na tej stronie znajdziesz wszystkie czynności, które musisz wykonać, aby to zrobić – od konfiguracji po weryfikację. Może ona obejmować czynności, które zostały już wykonane, jeśli skonfigurowano aplikację Flutter na potrzeby FCM.

Instalowanie wtyczki FCM

  1. Zainstaluj i zainicjuj pakiety SDK Firebase dla Fluttera, jeśli nie zostało to jeszcze zrobione.

  2. W katalogu głównym projektu Flutter uruchom to polecenie, aby zainstalować wtyczkę:

    flutter pub add firebase_messaging
    
  3. Po zakończeniu ponownie skompiluj aplikację Flutter:

    flutter run
    

Dostęp do tokena rejestracji

Aby wysłać wiadomość na konkretne urządzenie, musisz znać jego token rejestracji. Aby ukończyć ten samouczek, musisz wpisać token w odpowiednim polu w konsoli powiadomień, więc po jego pobraniu skopiuj go lub bezpiecznie przechowuj.

Aby pobrać bieżący token rejestracji instancji aplikacji, wywołaj getToken(). Jeśli nie przyznano zgody na wyświetlanie powiadomień, ta metoda poprosi użytkownika o przyznanie takich uprawnień. W przeciwnym razie zwraca token lub odrzuca przyszłe żądanie z powodu błędu.

final fcmToken = await FirebaseMessaging.instance.getToken();

Wysyłanie testowej wiadomości z powiadomieniem

  1. Zainstaluj i uruchom aplikację na urządzeniu docelowym. Na urządzeniach Apple musisz zaakceptować prośbę o zezwolenie na otrzymywanie powiadomień zdalnych.

  2. Upewnij się, że aplikacja działa w tle na urządzeniu.

  3. W konsoli Firebase otwórz stronę Messaging.

  4. Jeśli to Twoja pierwsza wiadomość, kliknij Utwórz pierwszą kampanię.

    1. Wybierz Wiadomości z powiadomieniami Firebase i kliknij Utwórz.
  5. W przeciwnym razie na karcie Kampanie kliknij Nowa kampania, a potem Powiadomienia.

  6. Wpisz tekst wiadomości. Wszystkie pozostałe pola są opcjonalne.

  7. W panelu po prawej stronie kliknij Wyślij wiadomość testową.

  8. W polu Dodaj token rejestracji FCM wpisz token rejestracji uzyskany w poprzedniej sekcji tego przewodnika.

  9. Kliknij Przetestuj.

Po kliknięciu Testuj docelowe urządzenie klienta (z aplikacją działającą w tle) powinno otrzymać powiadomienie.

Aby uzyskać wgląd w dostarczanie wiadomości do aplikacji, zapoznaj się z panelem raportowania FCM, który rejestruje liczbę wiadomości wysłanych i otwartych na urządzeniach z Androidem i Apple, a także dane dotyczące „wyświetleń” (powiadomień widzianych przez użytkowników) w przypadku aplikacji na Androida.

Obsługa interakcji

Gdy użytkownicy klikną powiadomienie, domyślnym działaniem zarówno na Androidzie, jak i iOS jest otwarcie aplikacji. Jeśli aplikacja zostanie zamknięta, zostanie uruchomiona, a jeśli działa w tle, zostanie przeniesiona na pierwszy plan.

W zależności od treści powiadomienia możesz chcieć obsłużyć interakcję użytkownika, gdy aplikacja zostanie otwarta. Jeśli na przykład nowe wiadomości na czacie są wysyłane za pomocą powiadomienia i użytkownik je wybierze, po otwarciu aplikacji możesz chcieć otworzyć konkretną rozmowę.

Pakiet firebase-messaging udostępnia 2 sposoby obsługi tej interakcji:

  1. getInitialMessage(): jeśli aplikacja zostanie otwarta po zamknięciu, ta metoda zwraca Future zawierający RemoteMessage. Po wykorzystaniu RemoteMessage zostaną usunięte.
  2. onMessageOpenedApp: Stream, która wysyła RemoteMessage, gdy aplikacja jest otwierana z tła.

Aby zapewnić użytkownikom bezproblemowe korzystanie z usługi, musisz obsługiwać oba scenariusze. Poniższy przykładowy kod pokazuje, jak to zrobić:

class Application extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _Application();
}

class _Application extends State<Application> {
  // In this example, suppose that all messages contain a data field with the key 'type'.
  Future<void> setupInteractedMessage() async {
    // Get any messages which caused the application to open from
    // a terminated state.
    RemoteMessage? initialMessage =
        await FirebaseMessaging.instance.getInitialMessage();

    // If the message also contains a data property with a "type" of "chat",
    // navigate to a chat screen
    if (initialMessage != null) {
      _handleMessage(initialMessage);
    }

    // Also handle any interaction when the app is in the background via a
    // Stream listener
    FirebaseMessaging.onMessageOpenedApp.listen(_handleMessage);
  }

  void _handleMessage(RemoteMessage message) {
    if (message.data['type'] == 'chat') {
      Navigator.pushNamed(context, '/chat',
        arguments: ChatArguments(message),
      );
    }
  }

  @override
  void initState() {
    super.initState();

    // Run code required to handle interacted messages in an async function
    // as initState() must not be async
    setupInteractedMessage();
  }

  @override
  Widget build(BuildContext context) {
    return Text("...");
  }
}

Sposób obsługi interakcji zależy od konfiguracji aplikacji. Powyższy przykład pokazuje podstawowe użycie elementu StatefulWidget.

Dalsze kroki

Wysyłanie wiadomości do aplikacji działających na pierwszym planie

Gdy uda Ci się wysłać wiadomości z powiadomieniami, gdy aplikacja działa w tle, zapoznaj się z artykułem Odbieranie wiadomości w aplikacji Flutter, aby zacząć wysyłać wiadomości do aplikacji działających na pierwszym planie.

Wykorzystaj więcej niż tylko wiadomości z powiadomieniami

Aby dodać do aplikacji inne, bardziej zaawansowane funkcje, musisz wdrożyć serwer.

Następnie w kliencie aplikacji: