| Wybierz platformę: | iOS+ Android Sieć Flutter Unity C++ |
Z tego przewodnika dowiesz się, jak zacząć korzystać z Firebase Cloud Messaging w aplikacjach klienckich Flutter, aby móc niezawodnie wysyłać wiadomości.
W zależności od platformy, na którą kierujesz aplikację, musisz wykonać dodatkowe wymagane kroki konfiguracji.
iOS+
Podmiana metody
Aby używać wtyczki FCM Flutter na urządzeniach Apple, musisz zastosować metodę swizzling, co jest wymagane. Bez niej kluczowe funkcje Firebase, takie jak FCM rejestracja obsługa nie będą działać prawidłowo.
Android
Usługi Google Play
FCM klienci wymagają urządzeń z Androidem 7.0 lub nowszym, na których są zainstalowane usługi Google Play, albo emulatora z Androidem 7.0 i interfejsami API Google. Pamiętaj, że nie musisz wdrażać aplikacji na Androida tylko w Sklepie Google Play.
Aplikacje, które korzystają z pakietu SDK usług Play, powinny zawsze sprawdzać, czy na urządzeniu jest zainstalowany zgodny plik APK usług Google Play, zanim uzyskają dostęp do funkcji usług Google Play. Zalecamy, aby robić to w 2 miejscach: w metodzie onCreate() głównej aktywności i w metodzie onResume(). Sprawdzanie w metodzie onCreate() zapewnia, że aplikacji nie można używać bez pomyślnego sprawdzenia. Sprawdzanie w metodzie onResume() zapewnia, że jeśli użytkownik wróci do uruchomionej aplikacji w inny sposób, np. za pomocą przycisku Wstecz, sprawdzenie zostanie wykonane.
Jeśli na urządzeniu nie ma zgodnej wersji usług Google Play, Twoja
aplikacja może wywołać
GoogleApiAvailability.makeGooglePlayServicesAvailable()
aby umożliwić użytkownikom pobranie usług Google Play ze Sklepu Play.
Sieć
Konfigurowanie danych logowania w sieci za pomocą FCM
Interfejs FCM Web używa danych logowania w sieci, zwanych kluczami identyfikacji serwera aplikacji dobrowolnej (VAPID), do autoryzowania żądań wysyłania do obsługiwanych usług powiadomień push w sieci. Aby zasubskrybować aplikację na powiadomienia push, musisz powiązać parę kluczy z projektem w Firebase. Możesz wygenerować nową parę kluczy lub zaimportować istniejącą parę kluczy w Firebase konsoli.
Instalowanie wtyczki FCM
Zainstaluj i zainicjuj wtyczki Firebase dla Flutter jeśli nie masz ich jeszcze.
W katalogu głównym projektu Flutter uruchom to polecenie, aby zainstalować wtyczkę:
flutter pub add firebase_messagingPo zakończeniu ponownie skompiluj aplikację Flutter:
flutter run
Prośba o zgodę na wyświetlanie powiadomień
Aby wysłać wiadomość z powiadomieniem na urządzenie, musisz zarejestrować je w
FCM za pomocą register(). Jeśli nie przyznano uprawnień do wyświetlania powiadomień, ta metoda poprosi użytkownika o zgodę na wyświetlanie powiadomień.
W przeciwnym razie w przypadku powodzenia dostarczy identyfikator FID za pomocą metody onRegistered lub odrzuci przyszłe żądanie z powodu błędu.
// You may set the permission requests to "provisional" which allows the user to choose what type
// of notifications they would like to receive once the user receives a notification.
final notificationSettings = await FirebaseMessaging.instance.requestPermission(provisional: true);
// For apple platforms, make sure the APNS token is available before making any FCM plugin API calls
final apnsToken = await FirebaseMessaging.instance.getAPNSToken();
if (apnsToken != null) {
// APNS token is available, make FCM plugin API requests...
}
Uzyskiwanie dostępu do identyfikatora instalacji Firebase
Włączanie rejestracji za pomocą identyfikatora instalacji Firebase
Aby włączyć rejestrowanie instancji aplikacji w FCM za pomocą identyfikatora instalacji Firebase (FID), musisz najpierw włączyć identyfikatory FID w konfiguracji aplikacji na platformach Android i Apple (w przypadku sieci nie jest wymagana statyczna konfiguracja akceptacji):
Android
Dodaj ten element <meta-data> w elemencie <application> w pliku AndroidManifest.xml:
<meta-data android:name="firebase_messaging_installation_id_enabled"
android:value="true" />iOS+
Dodaj klucz FirebaseMessagingInstallationIdEnabled do pliku Info.plist i ustaw jego wartość na true (YES):
<key>FirebaseMessagingInstallationIdEnabled</key> <true/>
Subskrybowanie strumienia onRegistered
Aby wysłać wiadomość do instancji aplikacji na konkretnym urządzeniu, potrzebujesz
identyfikatora instalacji Firebase (FID) tej
instancji aplikacji po jej zarejestrowaniu w FCM. Identyfikator FID jest dostarczany asynchronicznie za pomocą strumienia onRegistered.
Na platformach Android i Apple FCM automatycznie rejestruje instancję aplikacji podczas uruchamiania, gdy włączona jest automatyczna inicjalizacja (domyślnie). Wymagane jest jednak jawne wywołanie metody register():
- W sieci. Opcjonalnie możesz przekazać wartości
vapidKeyiserviceWorkerScriptPath. - Na platformach Android i Apple, jeśli automatyczna inicjalizacja jest
wyłączona lub po wywołaniu metody
unregister(). Możesz też w dowolnym momencie wywołać metodęregister(), aby uruchomić metodęonRegisteredz już zarejestrowanym identyfikatorem FID.
Zawsze subskrybuj strumień onRegistered przed wywołaniem metody register(), aby odbiornik był aktywny, gdy zostanie wyemitowane zdarzenie rejestracji:
final messaging = FirebaseMessaging.instance;
messaging.onRegistered
.listen((String installationId) {
// TODO: Send the Firebase Installation ID (FID) to your application server.
})
.onError((err) {
// Error getting Firebase Installation ID.
});
// Required on Web, and on Android/Apple if auto-initialization is disabled.
await messaging.register(
// Optional on Web (ignored on Android and Apple platforms)
vapidKey: "BKagOny0KF_2pCJQ3m....moL0ewzQ8rZu",
);
Strumień onRegistered emituje identyfikator FID w tych przypadkach:
- Automatycznie podczas pierwszego uruchomienia aplikacji i rutynowej synchronizacji na platformach Android i Apple, gdy włączona jest automatyczna inicjalizacja.
- Za każdym razem, gdy zakończy się ręczne wywołanie metody
register()(nawet jeśli instancja aplikacji jest już zarejestrowana, metodaonRegisterednadal emituje już zarejestrowany identyfikator FID). - Gdy wykryta zostanie zmiana identyfikatora instalacji Firebase, a aplikacja zostanie
ponownie zarejestrowana w FCM, lub w sieci, gdy zostanie wywołane
pushsubscriptionchangezdarzenie.
Gdy uzyskasz identyfikator instalacji Firebase (FID), wyślij go na serwer aplikacji i zapisz za pomocą preferowanej metody.
Uzyskiwanie dostępu do tokena rejestracji (wycofane)
Aby wysłać wiadomość na konkretne urządzenie, musisz znać token rejestracji urządzenia. Aby pobrać token rejestracji instancji aplikacji, wywołaj metodę getToken(). Jeśli nie przyznano uprawnień do wyświetlania powiadomień, ta metoda poprosi użytkownika o zgodę na wyświetlanie powiadomień. W przeciwnym razie zwraca token lub odrzuca przyszłe żądanie z powodu błędu.
Na platformach internetowych przekaż klucz publiczny VAPID do metody getToken():
final fcmToken = await FirebaseMessaging.instance.getToken(vapidKey: "BKagOny0KF_2pCJQ3m....moL0ewzQ8rZu");
Aby otrzymywać powiadomienia o każdej aktualizacji tokena, zasubskrybuj strumień onTokenRefresh:
FirebaseMessaging.instance.onTokenRefresh
.listen((fcmToken) {
// TODO: If necessary send token to application server.
// Note: This callback is fired at each app startup and whenever a new
// token is generated.
})
.onError((err) {
// Error getting token.
});
Zapobieganie automatycznej inicjalizacji
Gdy generowana jest rejestracja FCM, biblioteka przesyła identyfikator i dane konfiguracyjne do Firebase. Jeśli wolisz zapobiegać automatycznej rejestracji, wyłącz automatyczną inicjalizację podczas kompilacji.
Gdy automatyczna inicjalizacja jest wyłączona, możesz jawnie zarejestrować instancję aplikacji w czasie działania, wywołując metodę register() (najpierw zasubskrybuj strumień onRegistered, aby otrzymywać identyfikator instalacji Firebase):
await FirebaseMessaging.instance.register();
iOS
W iOS dodaj wartość metadanych do pliku Info.plist:
FirebaseMessagingAutoInitEnabled = NO
Android
W Androidzie wyłącz zbieranie danych Analytics i automatyczną inicjalizację FCM (musisz wyłączyć obie te funkcje), dodając te wartości metadanych do pliku AndroidManifest.xml:
<meta-data
android:name="firebase_messaging_auto_init_enabled"
android:value="false" />
<meta-data
android:name="firebase_analytics_collection_enabled"
android:value="false" />
Ponowne włączanie FCM automatycznej inicjalizacji w czasie działania
Aby włączyć automatyczną inicjalizację w przypadku konkretnej instancji aplikacji, wywołaj metodę setAutoInitEnabled():
await FirebaseMessaging.instance.setAutoInitEnabled(true);
Po ustawieniu ta wartość jest zachowywana po ponownym uruchomieniu aplikacji.
Wysyłanie testowej wiadomości z powiadomieniem
Zainstaluj i uruchom aplikację na urządzeniu docelowym. Na urządzeniach Apple musisz zaakceptować prośbę o zgodę na otrzymywanie powiadomień zdalnych.
Upewnij się, że aplikacja działa w tle na urządzeniu.
W konsoli Firebase otwórz DevOps i zaangażowanie > Wiadomości.
Utwórz kampanię.
Jeśli to Twoja pierwsza wiadomość:
Kliknij Utwórz pierwszą kampanię.
Kliknij Wiadomości z powiadomieniami Firebase i Utwórz.
Jeśli masz już utworzone kampanie:
Na karcie Kampanie kliknij Nowa kampania.
Kliknij Powiadomienia.
Wpisz tekst wiadomości.
W prawym panelu kliknij Wyślij wiadomość testową.
W polu oznaczonym etykietą Dodaj identyfikator instalacji Firebase lub FCM token rejestracji wpisz zarejestrowany identyfikator instalacji Firebase lub token rejestracji.
Kliknij Przetestuj.
Gdy klikniesz Przetestuj, urządzenie docelowe z aplikacją działającą w tle powinno otrzymać powiadomienie.
Aby uzyskać statystyki dotyczące dostarczania wiadomości do aplikacji, w konsoli Firebase otwórz DevOps i zaangażowanie > Przesyłanie wiadomości > Raporty. Ten panel rejestruje liczbę wysłanych i otwartych wiadomości na urządzeniach Apple i urządzeniach z Androidem oraz dane o „wyświetleniach” (powiadomieniach wyświetlanych użytkownikom) 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 jest 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ługiwać interakcję użytkownika po otwarciu aplikacji. Jeśli na przykład nowa wiadomość na czacie zostanie wysłana za pomocą powiadomienia, a użytkownik ją wybierze, możesz chcieć otworzyć konkretną rozmowę po otwarciu aplikacji.
Pakiet firebase-messaging udostępnia 2 sposoby obsługi tej interakcji:
getInitialMessage():Jeśli aplikacja zostanie otwarta po zamknięciu, ta metoda zwróciFuturezawierającyRemoteMessage. Po użyciuRemoteMessagezostanie usunięty.onMessageOpenedApp:Streamktóry publikujeRemoteMessage, gdy aplikacja zostanie otwarta z działania w tle.
Aby zapewnić użytkownikom płynne działanie aplikacji, musisz obsługiwać oba te scenariusze. Ten przykład kodu pokazuje, jak to zrobić:
class Application extends StatefulWidget { @override StatecreateState() => _Application(); } class _Application extends State { // In this example, suppose that all messages contain a data field with the key 'type'. Future 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 using 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. Wcześniej pokazany przykład to podstawowy przykład użycia elementu StatefulWidget.
Dalsze kroki
Po wykonaniu kroków konfiguracji możesz przejść do korzystania z FCM w Flutter:
- Wysyłanie wiadomości na urządzenia
- Odbieranie wiadomości w aplikacji Flutter
- Wysyłanie wiadomości do tematów