| 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 kroki konfiguracji.
iOS+
Podmiana metody
Aby korzystać z wtyczki FCM Flutter na urządzeniach Apple, wymagana jest podmiana metody. Bez niej kluczowe funkcje Firebase, takie jak FCM obsługa tokenów nie będą działać prawidłowo.
Android
Usługi Google Play
FCM klienci wymagają urządzeń z Androidem w wersji 4.4 lub nowszej, 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, 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 oraz w metodzie onResume(). Sprawdzenie w metodzie onCreate() zapewnia, że aplikacja nie będzie mogła być używana bez pomyślnego sprawdzenia. Sprawdzenie 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 (Voluntary Application Server Identification) lub kluczami „VAPID”, do autoryzowania żądań wysyłania do obsługiwanych usług Web Push. Aby subskrybować 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
Uzyskiwanie dostępu 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 metodę getToken(). Jeśli nie przyznano zgody na wyświetlanie powiadomień, ta metoda poprosi użytkownika o zgodę na wyświetlanie powiadomień. W przeciwnym razie zwraca token lub odrzuca przyszłość 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 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 generowany jest token rejestracji FCM, biblioteka przesyła identyfikator i dane konfiguracyjne do Firebase. Jeśli wolisz zapobiegać automatycznemu generowaniu tokenów, wyłącz automatyczną inicjalizację podczas kompilacji.
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 testowego powiadomienia
- 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 stronę Messaging.
- Jeśli to Twoja pierwsza wiadomość, kliknij Utwórz pierwszą kampanię.
- Kliknij Wiadomości z powiadomieniami Firebase i Utwórz.
- W przeciwnym razie na karcie Kampanie kliknij Nowa kampania , a potem Powiadomienia.
- Wpisz tekst wiadomości.
- W prawym panelu kliknij Wyślij wiadomość testową.
- W polu Dodaj token rejestracji wpisz token rejestracji.FCM
- Kliknij Przetestuj.
Gdy klikniesz Przetestuj, urządzenie docelowe 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ę wysłanych i otwartych wiadomości na urządzeniach Apple i Android oraz 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 została 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, musisz obsługiwać oba te scenariusze. Poniższy 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 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