Ten przewodnik zawiera informacje o konfigurowaniu Firebase Cloud Messaging w aplikacjach klienckich na urządzenia mobilne i w internecie, aby można było niezawodnie wysyłać wiadomości. W przypadku środowisk serwerowych zapoznaj się z sekcją Środowisko serwerowe i FCM.
Konfigurowanie aplikacji klienckiej Komunikacji w chmurze Firebase w Flutterze
W zależności od platformy docelowej musisz wykonać dodatkowe wymagane kroki konfiguracji.
iOS+
Podmiana metody
Aby korzystać z wtyczki FCM Flutter na urządzeniach Apple, wymagane jest zamienianie metod. Bez niego kluczowe funkcje Firebase, takie jak obsługa tokenów FCM, nie będą działać prawidłowo.
Android
Usługi Google Play
FCM wymagają urządzeń z Androidem 4.4 lub nowszym, na których są zainstalowane usługi Google Play, lub emulatora z Androidem 4.4 i interfejsami API Google. Pamiętaj, że nie musisz wdrażać aplikacji na Androida tylko w Sklepie Google Play.
Aplikacje korzystające z SDK Usług Play powinny zawsze sprawdzać, czy na urządzeniu jest zainstalowany zgodny pakiet APK Usług Google Play, zanim uzyskają dostęp do funkcji Usług Google Play. Zalecamy zrobienie tego w 2 miejscach: w metodzie onCreate()
głównej aktywności i w jej metodzie onResume()
. Sprawdzanie w onCreate()
gwarantuje, że nie można używać aplikacji bez pomyślnego sprawdzenia. Funkcja check inonResume()
zapewnia, że jeśli użytkownik wróci do uruchomionej aplikacji w inny sposób, np. za pomocą przycisku Wstecz, sprawdzenie nadal zostanie wykonane.
Jeśli na urządzeniu nie ma zgodnej wersji Usług Google Play, 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 internecie za pomocą FCM
FCM Interfejs internetowy używa danych logowania w internecie, zwanych kluczami dobrowolnej identyfikacji serwera aplikacji lub „VAPID”, do autoryzowania żądań wysyłania do obsługiwanych usług powiadomień push w internecie. Aby subskrybować powiadomienia push w aplikacji, musisz powiązać parę kluczy z projektem Firebase. Możesz wygenerować nową parę kluczy lub zaimportować istniejącą parę kluczy za pomocą Firebasekonsoli.
Instalowanie wtyczki FCM
Zainstaluj i zainicjuj wtyczki Firebase do 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ć token rejestracji urządzenia. Aby pobrać token rejestracji instancji aplikacji, wywołaj funkcję
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.
// 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...
}
Na platformach internetowych przekaż klucz publiczny VAPID do 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 generowany jest FCMtoken rejestracji, biblioteka przesyła identyfikator i dane konfiguracyjne do Firebase. Jeśli wolisz zapobiegać automatycznemu generowaniu tokenów, wyłącz automatyczną inicjację w czasie kompilacji.
iOS
Aby dodać wartość metadanych do regionu Info.plist
na urządzeniu z iOS:
FirebaseMessagingAutoInitEnabled = NO
Android
Na Androidzie wyłącz zbieranie danych Analytics i automatyczną inicjację 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łączenie automatycznej inicjacji FCM w czasie działania
Aby włączyć automatyczną inicjację w przypadku konkretnej instancji aplikacji, wywołaj funkcję 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 zezwolenie na otrzymywanie powiadomień zdalnych.
- Upewnij się, że aplikacja działa w tle na urządzeniu.
- W konsoli Firebase otwórz stronę Wiadomości.
- 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.
- W panelu po prawej stronie kliknij Wyślij wiadomość testową.
- W polu Dodaj token rejestracji FCM wpisz token rejestracji.
- 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 FCMraportami na panelu, które rejestrują liczbę wysłanych i otwartych wiadomości na urządzeniach z Androidem i Apple, a także dane o wyświetleniach 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 będzie 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 i użytkownik ją 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
: AStream
, która wysyłaRemoteMessage
, gdy aplikacja jest otwierana z tła.
Aby zapewnić użytkownikom bezproblemowe korzystanie z aplikacji, musisz obsługiwać oba te scenariusze. Poniższy przykładowy kod 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 StatefulWidget
.
Dalsze kroki
Po wykonaniu czynności konfiguracyjnych możesz skorzystać z tych opcji, aby zacząć korzystać z FCM w Flutterze:
- Wysyłanie wiadomości na urządzenia
- Otrzymywanie wiadomości w aplikacji Flutter
- Wysyłanie wiadomości do tematów