Wysyłanie wiadomości testowej do aplikacji działającej w tle

Aby zacząć korzystać z FCM, opracuj najprostszy przypadek użycia: wysłanie testowego powiadomienia z komponentu powiadomień na urządzenie, którego używasz do programowania, gdy aplikacja działa na urządzeniu w tle. Na tej stronie znajdziesz listę wszystkich czynności wymaganych do osiągnięcia tego celu – od konfiguracji po weryfikację. Jeśli masz skonfigurowaną aplikację Flutter na potrzeby FCM, możesz tam też zobaczyć czynności, które zostały już wykonane.

Zainstaluj wtyczkę FCM

  1. Zainstaluj i zainicjuj pakiety SDK Firebase na potrzeby Flutter, jeśli jeszcze ich nie masz.

  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 określone urządzenie, musisz znać jego token rejestracji. Aby ukończyć ten samouczek, musisz wpisać token w polu w konsoli powiadomień, dlatego po pobraniu musisz go skopiować lub bezpiecznie przechowywać.

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

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

Wyślij powiadomienie testowe

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

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

  3. W konsoli Firebase otwórz stronę Wiadomości.

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

    1. Wybierz Powiadomienia Firebase i kliknij Utwórz.
  5. Jeśli nie, na karcie Kampanie wybierz Nowa kampania, a potem Powiadomienia.

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

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

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

  9. Kliknij Przetestuj.

Gdy klikniesz Przetestuj, powiadomienie powinno dotrzeć do docelowego urządzenia klienckiego (z aplikacją w tle).

Informacje o dostarczaniu wiadomości do Twojej aplikacji znajdziesz w panelu raportowania FCM, który rejestruje liczbę wiadomości wysłanych i otwartych na urządzeniach Apple i z Androidem oraz danych o „wyświetleniach” (powiadomieniach widocznych dla użytkowników) w aplikacjach na Androida.

Obsługa interakcji

Gdy użytkownik kliknie powiadomienie, domyślnym działaniem zarówno na Androidzie, jak i w iOS jest otwarcie aplikacji. Jeśli aplikacja zostanie zamknięta, uruchomi się, a jeśli będzie działać w tle, zostanie przesunięta na pierwszy plan.

W zależności od treści powiadomienia może być potrzebna obsługa interakcji użytkownika po uruchomieniu aplikacji. Jeśli na przykład nowa wiadomość czatu zostanie wysłana przy użyciu powiadomienia, a użytkownik ją kliknie, możesz otworzyć określony wątek po otwarciu aplikacji.

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

  1. getInitialMessage(): jeśli aplikacja została otwarta po wyłączeniu, ta metoda zwraca Future zawierający RemoteMessage. Po ich użyciu RemoteMessage zostanie usunięty.
  2. onMessageOpenedApp: Stream, który publikuje RemoteMessage, gdy aplikacja jest otwarta w tle.

Aby zadbać o wygodę użytkowników, weź pod uwagę oba te scenariusze. Oto przykładowy kod, który 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 podstawowy przykład użycia pola StatefulWidget.

Dalsze kroki

Wysyłaj wiadomości do aplikacji na pierwszym planie

Gdy wyślesz powiadomienia, gdy aplikacja działa w tle, zapoznaj się z sekcją Odbieranie wiadomości w aplikacji Flutter, aby zacząć wysyłać wiadomości do aplikacji działających na pierwszym planie.

Więcej niż powiadomienia

Aby dodać do aplikacji inne, bardziej zaawansowane działanie, musisz wdrożyć serwer.

Następnie w aplikacji klienckiej: