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
Zainstaluj i zainicjuj pakiety SDK Firebase dla Fluttera, jeśli nie zostało to jeszcze zrobione.
W katalogu głównym projektu Flutter uruchom to polecenie, aby zainstalować wtyczkę:
flutter pub add firebase_messaging
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
Zainstaluj i uruchom aplikację na urządzeniu docelowym. Na urządzeniach Apple musisz zaakceptować prośbę o zezwolenie na otrzymywanie powiadomień zdalnych.
Upewnij się, że aplikacja działa w tle na urządzeniu.
W konsoli Firebase otwórz stronę Messaging.
Jeśli to Twoja pierwsza wiadomość, kliknij Utwórz pierwszą kampanię.
- Wybierz Wiadomości z powiadomieniami Firebase i kliknij Utwórz.
W przeciwnym razie na karcie Kampanie kliknij Nowa kampania, a potem Powiadomienia.
Wpisz tekst wiadomości. Wszystkie pozostałe pola są opcjonalne.
W panelu po prawej stronie kliknij Wyślij wiadomość testową.
W polu Dodaj token rejestracji FCM wpisz token rejestracji uzyskany w poprzedniej sekcji tego przewodnika.
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:
getInitialMessage()
: jeśli aplikacja zostanie otwarta po zamknięciu, ta metoda zwracaFuture
zawierającyRemoteMessage
. Po wykorzystaniuRemoteMessage
zostaną usunięte.onMessageOpenedApp
:Stream
, która wysyłaRemoteMessage
, 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: