| Wybierz platformę: | iOS+ Android Web Flutter Unity C++ |
Z tego przewodnika dowiesz się, jak zacząć korzystać z Firebase Cloud Messaging w aplikacjach klienckich Flutter, aby niezawodnie wysyłać wiadomości.
W zależności od platformy, na którą kierujesz reklamy, musisz wykonać kilka dodatkowych czynności konfiguracyjnych.
iOS+
Podmiana metody
Aby korzystać z wtyczki Flutter FCM na urządzeniach Apple, musisz używać podmiany metody. Bez tego kluczowe funkcje Firebase, takie jak obsługa rejestracji FCM, nie będą działać prawidłowo.
Android
Usługi Google Play
Klienty FCM wymagają urządzeń z Androidem 7.0 lub nowszym, na których zainstalowane są też Usługi Google Play, lub emulatora z Androidem 7.0 i interfejsami API Google. Pamiętaj, że nie musisz wdrażać aplikacji na Androida tylko przez Sklep Google Play.
Aplikacje, które korzystają z pakietu SDK usług Google Play, powinny zawsze sprawdzać, czy na urządzeniu jest zgodny plik APK usług Google Play, zanim uzyskają dostęp do funkcji usług Google Play. Zalecamy zrobienie tego w 2 miejscach: w metodzie onCreate() i metodzie onResume() głównej aktywności. Sprawdzanie w onCreate() gwarantuje, że nie można korzystać z aplikacji, jeśli nie przejdzie ona pomyślnie kontroli. Sprawdzanie w metodzie onResume() gwarantuje, że jeśli użytkownik wróci do uruchomionej aplikacji w inny sposób, np. za pomocą przycisku Wstecz, sprawdzanie nadal zostanie przeprowadzone.
Jeśli na urządzeniu nie ma zgodnej wersji Usług Google Play, aplikacja może wywołać metodę GoogleApiAvailability.makeGooglePlayServicesAvailable(), aby umożliwić użytkownikom pobranie Usług Google Play ze Sklepu Play.
Sieć
Konfigurowanie danych logowania do stron internetowych za pomocą FCM
Interfejs internetowy FCM używa danych logowania do sieci o nazwie Voluntary Application Server Identification (VAPID) do autoryzacji żądań wysyłania do obsługiwanych usług internetowych powiadomień push. Aby zasubskrybować powiadomienia push w aplikacji, musisz powiązać parę kluczy z projektem w Firebase. Możesz wygenerować nową parę kluczy lub zaimportować istniejącą parę kluczy za pomocą konsoli Firebase.
Zainstaluj wtyczkę FCM
Zainstaluj i zainicjuj wtyczki Firebase do Fluttera, jeśli jeszcze nie zostało to zrobione.
Aby zainstalować wtyczkę, uruchom to polecenie w katalogu głównym projektu Flutter:
flutter pub add firebase_messagingGdy to zrobisz, ponownie skompiluj aplikację Flutter:
flutter run
Poproś o zgodę na wyświetlanie powiadomień
Aby wysłać powiadomienie na urządzenie, musisz zarejestrować urządzenie w FCM za pomocą register(). Jeśli nie przyznano zgody na wyświetlanie powiadomień, ta metoda poprosi użytkownika o jej udzielenie.
W przeciwnym razie zwraca FID przez onRegistered w przypadku powodzenia 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...
}
Dostęp do identyfikatora instalacji Firebase
Włączanie rejestracji za pomocą identyfikatora instalacji Firebase
Aby umożliwić rejestrowanie instancji aplikacji w FCM za pomocą identyfikatora instalacji Firebase (FID), musisz najpierw włączyć identyfikatory FID w konfiguracji aplikacji na platformy Android i Apple (w przypadku aplikacji internetowych nie jest wymagana statyczna konfiguracja akceptacji):
Android
Dodaj 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, musisz mieć identyfikator instalacji Firebase (FID) tej instancji aplikacji po jej zarejestrowaniu w FCM. Identyfikator FID jest dostarczany asynchronicznie przez strumień onRegistered.
Na platformach Android i Apple FCM automatycznie rejestruje instancję aplikacji podczas uruchamiania, gdy włączona jest automatyczna inicjalizacja (domyślnie). Wymagane jest jednak wyraźne wywołanie funkcji register():
- W internecie. Opcjonalnie możesz przekazać parametry
vapidKeyiserviceWorkerScriptPath. - na platformach Android i Apple, jeśli automatyczna inicjacja jest wyłączona lub po wywołaniu
unregister(). Możesz też w każdej chwili wywołaćregister(), aby aktywowaćonRegisteredz zarejestrowanym już identyfikatorem FID.
Zawsze subskrybuj onRegistered przed wywołaniem register(), aby detektor 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 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 kończy się ręczne wywołanie
register()(nawet jeśli instancja aplikacji jest już zarejestrowana,onRegisterednadal emituje już zarejestrowany identyfikator FID). - Za każdym razem, gdy zostanie wykryta zmiana identyfikatora instalacji Firebase, a aplikacja zostanie ponownie zarejestrowana w FCM, lub w przypadku aplikacji internetowej, gdy zostanie wywołane zdarzenie
pushsubscriptionchange.
Po uzyskaniu identyfikatora instalacji Firebase (FID) wyślij go na serwer aplikacji i zapisz, używając 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 dla instancji aplikacji, wywołaj getToken(). Jeśli nie przyznano zgody na wyświetlanie powiadomień, ta metoda poprosi użytkownika o jej udzielenie. W przeciwnym razie zwraca token lub odrzuca przyszłość z powodu błędu.
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 zostanie wygenerowana rejestracja FCM, biblioteka przesyła identyfikator i dane konfiguracji do Firebase. Jeśli chcesz zapobiec 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 register() (pamiętaj, aby najpierw zasubskrybować onRegistered, aby otrzymać identyfikator instalacji Firebase):
await FirebaseMessaging.instance.register();
iOS
W systemie iOS dodaj wartość metadanych do pliku Info.plist:
FirebaseMessagingAutoInitEnabled = NO
Android
Na 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 automatycznej inicjalizacji FCM w czasie działania
Aby włączyć automatyczną inicjalizację dla konkretnej instancji aplikacji, wywołaj 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 uprawnienia do otrzymywania powiadomień zdalnych.
Upewnij się, że aplikacja działa w tle na urządzeniu.
W konsoli Firebase kliknij DevOps & Engagement > Messaging (Wiadomości).
Utworzenie kampanii.
Jeśli to Twoja pierwsza wiadomość:
Kliknij Utwórz pierwszą kampanię.
Wybierz Powiadomienia Firebase i kliknij Utwórz.
Jeśli masz już utworzone kampanie:
Na karcie Kampanie kliknij Nowa kampania.
Kliknij Powiadomienia.
Wpisz tekst wiadomości.
W panelu po prawej stronie wybierz Wyślij wiadomość testową.
W polu Dodaj identyfikator instalacji Firebase lub token rejestracji FCM wpisz zarejestrowany identyfikator instalacji Firebase lub token rejestracji.
Kliknij Przetestuj.
Gdy klikniesz Test, docelowe urządzenie klienta z aplikacją działającą w tle powinno otrzymać powiadomienie.
Aby uzyskać statystyki dotyczące dostarczania wiadomości do aplikacji, otwórz panel DevOps & Engagement (DevOps i zaangażowanie) > Messaging (Przesyłanie wiadomości) > Reports (Raporty) w konsoli Firebase. Ten panel rejestruje liczbę wiadomości wysłanych i otwartych na urządzeniach Apple i urządzeniach z Androidem, a także dane dotyczące „wyświetleń” (powiadomień wyświetlonych użytkownikom) w aplikacjach na Androida.
Interakcja z obsługą
Gdy użytkownicy klikną powiadomienie, domyślnym działaniem na Androidzie 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łużyć interakcję użytkownika po otwarciu aplikacji. Jeśli na przykład nowa wiadomość na czacie zostanie wysłana za pomocą powiadomienia, a użytkownik je wybierze, możesz otworzyć konkretną rozmowę po otwarciu aplikacji.
Pakiet firebase-messaging udostępnia 2 sposoby obsługi tej interakcji:
getInitialMessage():Jeśli aplikacja zostanie otwarta ze stanu zamknięcia, ta metoda zwraca obiektFuturezawierający obiektRemoteMessage. Po wykorzystaniuRemoteMessagezostanie usunięty.onMessageOpenedApp:Stream, który publikujeRemoteMessage, gdy aplikacja jest otwierana ze stanu działania w tle.
Aby zapewnić użytkownikom bezproblemowe działanie, musisz obsłużyć oba 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. Przedstawiony wcześniej przykład
jest podstawowym przykładem użycia StatefulWidget.
Dalsze kroki
Po wykonaniu czynności konfiguracyjnych możesz kontynuować pracę z FCM we Flutterze na kilka sposobów:
- Wysyłanie wiadomości na urządzenia
- Odbieranie wiadomości w aplikacji Flutter
- Wysyłanie wiadomości do tematów