Wyślij wiadomość testową do aplikacji działającej w tle

Aby rozpocząć korzystanie z FCM, utwórz najprostszy przypadek użycia: wysłanie powiadomienia testowego z narzędzia do tworzenia powiadomień do urządzenia programistycznego, gdy aplikacja działa w tle na urządzeniu. Na tej stronie znajdują się wszystkie kroki, które należy wykonać, aby to osiągnąć, od konfiguracji po weryfikację — może obejmować kroki, które już wykonałeś, jeśli skonfigurowałeś aplikację Flutter dla FCM.

Zainstaluj wtyczkę FCM

  1. Zainstaluj i zainicjuj zestawy SDK Firebase dla Flutter, jeśli jeszcze tego nie zrobiłeś.

  2. W katalogu głównym projektu Flutter uruchom następujące polecenie, aby zainstalować wtyczkę:

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

    flutter run
    

Uzyskaj dostęp do tokena rejestracyjnego

Aby wysłać wiadomość na konkretne urządzenie, musisz znać token rejestracji tego urządzenia. Ponieważ aby ukończyć ten samouczek, konieczne będzie wprowadzenie tokenu w polu w konsoli powiadomień, pamiętaj o skopiowaniu tokenu lub bezpiecznym przechowywaniu go po pobraniu.

Aby pobrać bieżący token rejestracji dla instancji aplikacji, wywołaj funkcję getToken() . Jeśli pozwolenie na powiadomienia nie zostało przyznane, ta metoda poprosi użytkownika o uprawnienia do powiadomień. W przeciwnym razie zwraca token lub odrzuca przyszłość z powodu błędu.

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

Wyślij wiadomość z powiadomieniem testowym

  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 działa w tle na urządzeniu.

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

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

    1. Wybierz Wiadomości z powiadomieniami Firebase i wybierz Utwórz .
  5. W przeciwnym razie na zakładce Kampanie wybierz Nowa kampania , a następnie Powiadomienia .

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

  7. Wybierz opcję Wyślij wiadomość testową w prawym okienku.

  8. W polu Dodaj token rejestracyjny FCM wpisz token rejestracyjny uzyskany w poprzedniej części tego przewodnika.

  9. Wybierz Testuj .

Po wybraniu opcji Testuj docelowe urządzenie klienckie (z aplikacją działającą w tle) powinno otrzymać powiadomienie.

Wgląd w dostarczanie wiadomości do aplikacji znajdziesz w panelu raportowania FCM , który rejestruje liczbę wiadomości wysłanych i otwartych na urządzeniach Apple i Android, wraz z danymi dotyczącymi „wyświetleń” (powiadomień widocznych przez użytkowników) w przypadku aplikacji na Androida.

Obsługa interakcji

Gdy użytkownik kliknie powiadomienie, domyślnym zachowaniem zarówno w systemie Android, jak i iOS jest otwarcie aplikacji. Jeśli aplikacja zostanie zakończona, zostanie uruchomiona, a jeśli jest w tle, zostanie przeniesiona na pierwszy plan.

W zależności od treści powiadomienia możesz chcieć obsłużyć interakcję użytkownika po otwarciu aplikacji. Na przykład, jeśli nowa wiadomość na czacie zostanie wysłana za pomocą powiadomienia i użytkownik ją wybierze, możesz chcieć otworzyć konkretną rozmowę po otwarciu aplikacji.

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

  1. getInitialMessage() : Jeśli aplikacja jest otwierana ze stanu zakończonego, ta metoda zwraca wartość Future zawierającą RemoteMessage . Po wykorzystaniu RemoteMessage zostanie usunięta.
  2. onMessageOpenedApp : Stream , który publikuje komunikat RemoteMessage , gdy aplikacja jest otwierana ze stanu tła.

Aby zapewnić użytkownikom płynne działanie, należy uwzględnić oba scenariusze. Poniższy przykład kodu opisuje, jak można to osiągnąć:

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 StatefulWidget .

Następne kroki

Wysyłaj wiadomości do aplikacji na pierwszym planie

Po pomyślnym wysłaniu wiadomości z powiadomieniami, gdy aplikacja działa w tle, zobacz Odbieranie wiadomości w aplikacji Flutter, aby rozpocząć wysyłanie do aplikacji na pierwszym planie.

Wyjdź poza powiadomienia

Aby dodać inne, bardziej zaawansowane zachowanie do swojej aplikacji, będziesz potrzebować implementacji serwerowej .

Następnie w kliencie aplikacji: