1. Wprowadzenie
Ostatnia aktualizacja: 2020-1-6
Komunikacja w chmurze Firebase (FCM) to wieloplatformowe rozwiązanie do przesyłania wiadomości, które umożliwia niezawodne wysyłanie wiadomości.
Za pomocą FCM możesz powiadamiać aplikację kliencką o dostępności nowych e-maili lub innych danych do synchronizacji. Możesz wysyłać wiadomości z powiadomieniami, aby zwiększyć ponowne zaangażowanie użytkowników i utrzymać ich zainteresowanie. W przypadku takich zastosowań jak komunikatory internetowe wiadomość może przesyłać do aplikacji klienta ładunek o rozmiarze do 4 KB.
Jak to działa?
Wdrożenie FCM obejmuje 2 główne komponenty do wysyłania i odbierania:
- Zaufane środowisko, takie jak Cloud Functions for Firebase lub serwer aplikacji, w którym można tworzyć, kierować i wysyłać wiadomości.
- Aplikacja kliencka na iOS, Androida lub internet (JavaScript), która odbiera wiadomości za pomocą odpowiedniej usługi transportowej specyficznej dla platformy.
Omówienie architektury FCM
FCM korzysta z tych komponentów, które tworzą, przesyłają i odbierają wiadomości:
- Narzędzia do tworzenia próśb o wiadomości. Edytor powiadomień udostępnia interfejs GUI do tworzenia żądań powiadomień. Aby w pełni zautomatyzować wysyłanie wiadomości i obsługiwać wszystkie ich typy, musisz tworzyć żądania wiadomości w zaufanym środowisku serwera, które obsługuje pakiet Firebase Admin SDK lub protokoły serwera FCM. Może to być Cloud Functions dla Firebase, Google App Engine lub Twój własny serwer aplikacji.
- Backend FCM, który (między innymi) akceptuje żądania wysłania wiadomości, rozpowszechnia wiadomości za pomocą tematów i generuje metadane wiadomości, takie jak identyfikator wiadomości.
- Warstwa transportowa na poziomie platformy, która kieruje wiadomość na docelowe urządzenie, obsługuje dostarczanie wiadomości i w razie potrzeby stosuje konfigurację specyficzną dla platformy. Ta warstwa transportowa obejmuje:
- Warstwa transportowa Androida (ATL) na urządzenia z Androidem i Usługami Google Play
- Usługa Apple Push Notification (APNs) na urządzeniach z iOS
- Protokół powiadomień Web Push dla aplikacji internetowych
- Pakiet FCM SDK na urządzeniu użytkownika, na którym wyświetlane jest powiadomienie lub obsługiwana jest wiadomość zgodnie ze stanem aplikacji (na pierwszym planie lub w tle) i odpowiednią logiką aplikacji.
Co utworzysz
W tym ćwiczeniu dodasz powiadomienia push do przykładowej aplikacji na iOS za pomocą FCM.
Czego się nauczysz
- Subskrybowanie i anulowanie subskrypcji powiadomień push
- Jak postępować z przychodzącymi wiadomościami push
- Wyświetlanie powiadomienia
- Jak reagować na kliknięcia powiadomień
Czego potrzebujesz
- Xcode 11.0 lub nowsze
- CocoaPods w wersji 1.9.0 lub nowszej
- Konto dewelopera Apple
- fizyczne urządzenie z iOS do uruchamiania aplikacji;
- podstawowa znajomość języka Swift;
2. Przygotowania
Pobierz przykładowy kod
W tym laboratorium kodowania utworzysz własną aplikację testową, ale jeśli chcesz zobaczyć i uruchomić istniejącą aplikację przykładową, możesz pobrać przykładowy kod szybkiego startu.
Próbkę możesz uzyskać na 2 sposoby:
- Sklonuj repozytorium Git:
$ git clone https://github.com/firebase/quickstart-ios.git
- Pobierz plik ZIP:
Jeśli pobierzesz źródło jako plik ZIP, po jego rozpakowaniu otrzymasz folder główny quickstart-ios
.
Tworzenie nowej aplikacji
Utwórz własną aplikację testową, wykonując te czynności (poniższe kroki dotyczą XCode 12.3):
- Otwórz Xcode i kliknij Create a new Xcode project (Utwórz nowy projekt w Xcode).
- Kliknij kolejno Aplikacja i Dalej.
- Wpisz Nazwę produktu (np. MessagingExample)
- Wybierz Zespół (jeśli nie masz utworzonego zespołu, skonfiguruj go na koncie dewelopera Apple).
- Wpisz identyfikator organizacji (np.
com.
your-name
) - Wpisz identyfikator pakietu (np.
com.
your-name
.MessagingExample
, musi być unikalny wśród wszystkich aplikacji na iOS). - W menu Interfejs wybierz Storyboard.
- W menu Life Cycle (Cykl życia) wybierz UIKit App Delegate (Delegat aplikacji UIKit).
- Wybierz Swift w sekcji Język.
- Kliknij Dalej.
Identyfikator pakietu będzie potrzebny podczas tworzenia klucza APN i rejestrowania aplikacji w projekcie Firebase.
3. Konfigurowanie APNs
Utwórz klucz uwierzytelniający
Z tej sekcji dowiesz się, jak wygenerować klucz uwierzytelniania dla identyfikatora aplikacji, w której włączono powiadomienia push. Jeśli masz już klucz, możesz go użyć zamiast generować nowy.
Aby utworzyć klucz uwierzytelniający:
- Na koncie dewelopera otwórz Certyfikaty, identyfikatory i profile, a następnie Klucze.
- W prawym górnym rogu kliknij przycisk Dodaj (+).
- Wpisz opis klucza uwierzytelniania APNs
- W sekcji Usługi kluczy zaznacz pole wyboru APNs i kliknij Dalej.
- Kliknij Zarejestruj, a następnie Pobierz. Zapisz klucz w bezpiecznym miejscu. Jest to jednorazowe pobieranie, a klucza nie można później odzyskać.
Tworzenie identyfikatora aplikacji
Identyfikator aplikacji to identyfikator, który w niepowtarzalny sposób określa aplikację. Zgodnie z konwencją jest on reprezentowany przez odwróconą domenę.
- Otwórz Apple Developer Member Center i zaloguj się.
- Otwórz Certyfikaty, identyfikatory i profile.
- Kliknij Identyfikatory.
- Kliknij przycisk +, aby utworzyć nowy identyfikator aplikacji.
- Kliknij przycisk Identyfikatory aplikacji i kliknij Dalej.
- Wybierz Aplikacja i kliknij Dalej.
- Aby utworzyć nowy identyfikator aplikacji:
- Wpisz nazwę identyfikatora aplikacji.
- Wpisz identyfikator zespołu. Ta wartość musi być zgodna z identyfikatorem zespołu na karcie Członkostwo.
- W sekcji Sufiks identyfikatora aplikacji wybierz Jawny identyfikator aplikacji, a następnie wpisz Identyfikator pakietu.
- W sekcji Usługi aplikacji sprawdź, czy jest zaznaczona opcja Powiadomienia push.
- Kliknij Dalej i sprawdź, czy wpisane dane są prawidłowe:
- Wartość Identyfikator powinna być zgodna z połączeniem wartości identyfikatora zespołu i identyfikatora pakietu.
- Powiadomienia push powinny być konfigurowalne.
- Aby utworzyć identyfikator aplikacji, kliknij Zarejestruj.
Tworzenie profilu
Aby testować aplikację w trakcie jej tworzenia, musisz mieć profil deweloperski, który autoryzuje Twoje urządzenia do uruchamiania aplikacji, która nie została jeszcze opublikowana w App Store.
- Otwórz Apple Developer Member Center i zaloguj się.
- Otwórz Certyfikaty, identyfikatory i profile.
- W menu u góry po lewej stronie wybierz iOS, tvOS, watchOS, jeśli nie jest jeszcze wybrany, a następnie przejdź do Profili.
- Kliknij przycisk +, aby utworzyć nowy profil.
- Jako typ profilu administracyjnego wybierz iOS App Development, a następnie kliknij Continue (Dalej).
- W menu wybierz identyfikator aplikacji, którego chcesz użyć, a potem kliknij Dalej.
- Wybierz certyfikat deweloperski iOS dla identyfikatora aplikacji wybranego w poprzednim kroku, a następnie kliknij Dalej.
- Wybierz urządzenia z iOS, które chcesz uwzględnić w profilu administracyjnym, a następnie kliknij Dalej. Wybierz wszystkie urządzenia, których chcesz używać do testowania.
- Wpisz nazwę tego profilu aprowizacyjnego (np. MessagingExampleProfile), a następnie kliknij Wygeneruj.
- Kliknij Pobierz, aby zapisać profil administracyjny na Macu.
- Aby zainstalować plik profilu administracyjnego, kliknij go dwukrotnie.
4. Dodawanie Firebase do projektu na iOS
Tworzenie projektu Firebase
Zanim dodasz Firebase do aplikacji na iOS, musisz utworzyć projekt Firebase, aby połączyć go z tą aplikacją. Więcej informacji o projektach Firebase znajdziesz w artykule Informacje o projektach Firebase.
- W konsoli Firebase kliknij Dodaj projekt, a następnie wybierz lub wpisz nazwę projektu.
Jeśli masz już projekt Google Cloud Platform (GCP), możesz wybrać go w menu, aby dodać do niego zasoby Firebase.
- (Opcjonalnie) Jeśli tworzysz nowy projekt, możesz edytować identyfikator projektu.
Firebase automatycznie przypisuje unikalny identyfikator do Twojego projektu Firebase. Więcej informacji o tym, jak Firebase używa identyfikatora projektu, znajdziesz w artykule Projekty w Firebase.
- Kliknij Dalej.
- Skonfiguruj Google Analytics w projekcie, aby optymalnie korzystać z tych usług Firebase:
- Firebase Crashlytics
- Prognozy Firebase
- Komunikacja w chmurze Firebase
- Wysyłanie wiadomości w aplikacji Firebase
- Zdalna konfiguracja Firebase
- Testy A/B Firebase
Gdy pojawi się odpowiedni komunikat, wybierz, czy chcesz użyć dotychczasowego konta Google Analytics, czy utworzyć nowe. Jeśli zdecydujesz się utworzyć nowe konto, wybierz lokalizację raportowania Analytics, a następnie zaakceptuj ustawienia udostępniania danych i warunki korzystania z Google Analytics w przypadku swojego projektu.
- Kliknij Utwórz projekt (lub Dodaj Firebase, jeśli używasz istniejącego projektu GCP).
Firebase automatycznie udostępnia zasoby dla Twojego projektu Firebase. Po zakończeniu procesu otworzy się strona podglądu projektu Firebase w konsoli Firebase.
Rejestrowanie aplikacji w Firebase
Mając projekt Firebase, możesz dodać do niego swoją aplikację na iOS.
Więcej informacji o sprawdzonych metodach i kwestiach, które należy wziąć pod uwagę podczas dodawania aplikacji do projektu Firebase, w tym o obsłudze wielu wariantów kompilacji, znajdziesz w artykule Informacje o projektach Firebase.
- Otwórz konsolę Firebase.
- W centrum strony „Opis” projektu kliknij ikonę iOS, aby uruchomić proces konfiguracji.
Jeśli masz już aplikację w projekcie Firebase, kliknij Dodaj aplikację, aby wyświetlić opcje platformy.
- W polu Identyfikator pakietu na iOS wpisz identyfikator pakietu aplikacji.
- (Opcjonalnie) wpisz inne informacje o aplikacji: pseudonim aplikacji i identyfikator App Store.
- Kliknij Zarejestruj aplikację.
Dodawanie pliku konfiguracyjnego Firebase
- Kliknij Pobierz plik GoogleService-Info.plist, aby uzyskać plik konfiguracyjny Firebase na iOS (
GoogleService-Info.plist
). - Przenieś plik konfiguracyjny do katalogu głównego projektu Xcode. Jeśli pojawi się prośba, wybierz opcję dodania pliku konfiguracyjnego do wszystkich miejsc docelowych.
Jeśli w projekcie masz kilka identyfikatorów pakietu, musisz powiązać każdy z nich z zarejestrowaną aplikacją w konsoli Firebase, aby każda aplikacja miała własny plik GoogleService-Info.plist
.
Zamknij Xcode.
Dodaj do aplikacji pakiety SDK Firebase
Do instalowania bibliotek Firebase zalecamy używanie CocoaPods. Jeśli jednak nie chcesz używać CocoaPods, możesz zintegrować struktury pakietu SDK bezpośrednio lub skorzystać z wersji beta narzędzia Swift Package Manager.
- Utwórz plik Podfile, jeśli jeszcze go nie masz. Jeśli korzystasz z przykładowego projektu z szybkiego wprowadzenia, projekt Xcode i plik Podfile (z podami) są już dostępne.
$ cd MessagingExample $ pod init
- Do pliku Podfile dodaj pody Firebase, których chcesz używać w aplikacji.
Do aplikacji na iOS możesz dodać dowolną z obsługiwanych usług Firebase.
W przykładowym projekcie szybkiego startu dodano pakiety SDK Google Analytics i Firebase Cloud Messaging.
# Add the Firebase pod for Google Analytics pod 'Firebase/Analytics' # Add the pod for Firebase Cloud Messaging pod 'Firebase/Messaging'
- Zainstaluj pody, a następnie otwórz plik
.xcworkspace
, aby wyświetlić projekt w Xcode:
$ pod install
- Otwórz
MessagingExample.xcworkspace
i w konsoli Firebase kliknij Dalej.
Inicjowanie Firebase w aplikacji
Musisz dodać do aplikacji kod inicjalizacji Firebase.
Zaimportuj moduł Firebase i skonfiguruj instancję współdzieloną (w przykładowym programie szybkiego startu moduł Firebase jest już zaimportowany).
- Zaimportuj moduł Firebase w
UIApplicationDelegate
:
AppDelegate.swift
import UIKit
import Firebase // Add this line
- Skonfiguruj udostępnioną instancję FirebaseApp, zwykle w metodzie
application:didFinishLaunchingWithOptions:
aplikacji:
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure() // Add this line
return true
}
- W konsoli Firebase kliknij Dalej.
- Pakiety SDK Firebase zostaną dodane do aplikacji. Kliknij Przejdź do konsoli.
5. Konfigurowanie klienta FCM
Prześlij klucz uwierzytelniania APNs
Prześlij klucz uwierzytelniania APNs do Firebase.
- W projekcie w konsoli Firebase kliknij ikonę koła zębatego, wybierz Ustawienia projektu, a następnie kliknij kartę Cloud Messaging.
- W sekcji Klucz uwierzytelniania APNs w obszarze Konfiguracja aplikacji na iOS kliknij przycisk Prześlij.
- Przejdź do lokalizacji, w której został zapisany klucz, wybierz go i kliknij Otwórz. Dodaj identyfikator klucza (dostępny w sekcji Certyfikaty, identyfikatory i profile w Apple Developer Member Center) i kliknij Prześlij.
Rejestracja powiadomień zdalnych
Zarejestruj aplikację do otrzymywania powiadomień zdalnych podczas uruchamiania lub w odpowiednim momencie w jej działaniu.
W przykładzie szybkiego startu element registerForRemoteNotifications
jest już dodany.
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
// [START register for remote notifications]
if #available(iOS 10.0, *) {
// For iOS 10 display notification (sent via APNS)
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(options: authOptions, completionHandler: {_, _ in })
} else {
let settings: UIUserNotificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
application.registerUserNotificationSettings(settings)
}
application.registerForRemoteNotifications()
// [END register for remote notifications]
return true
}
Przypisz UNUserNotificationCenter
właściwość delegata, dodając te wiersze na końcu pliku AppDelegate.swift.
AppDelegate.swift
@available(iOS 10, *)
extension AppDelegate : UNUserNotificationCenterDelegate {
// Receive displayed notifications for iOS 10 devices.
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
let userInfo = notification.request.content.userInfo
// Print full message.
print(userInfo)
// Change this to your preferred presentation option
completionHandler([[.alert, .sound]])
}
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
// Print full message.
print(userInfo)
completionHandler()
}
}
Ustawianie delegata do obsługi wiadomości
Aby otrzymywać tokeny rejestracji, zaimplementuj protokół delegata wiadomości i ustaw właściwość FIRMessaging
delegate
po wywołaniu [FIRApp configure]
. Jeśli na przykład delegat aplikacji jest zgodny z protokołem delegata przesyłania wiadomości, możesz ustawić delegata w application:didFinishLaunchingWithOptions:
na samego siebie (w przykładowym przewodniku Szybki start jest on już ustawiony).
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
Messaging.messaging().delegate = self // Add this line
// [START register for remote notifications]
if #available(iOS 10.0, *) {
// For iOS 10 display notification (sent via APNS)
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(options: authOptions, completionHandler: {_, _ in })
} else {
let settings: UIUserNotificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
application.registerUserNotificationSettings(settings)
}
application.registerForRemoteNotifications()
// [END register for remote notifications]
return true
}
Przypisz FIRMessaging
właściwość delegata, dodając te wiersze na końcu pliku AppDelegate.swift.
AppDelegate.swift
extension AppDelegate : MessagingDelegate {
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
print("Firebase registration token: \(String(describing: fcmToken))")
let dataDict:[String: String] = ["token": fcmToken ?? ""]
NotificationCenter.default.post(name: Notification.Name("FCMToken"), object: nil, userInfo: dataDict)
}
}
Dodawanie uprawnień
W sekcji Tworzenie identyfikatora aplikacji dodano funkcję powiadomień push, ale musisz też dodać tę funkcję w XCode, wykonując te czynności (poniższe czynności dotyczą XCode 12.3):
- W obszarze nawigacji kliknij nazwę projektu.
- Kliknij Podpisywanie i możliwości.
- Kliknij + Możliwość.
- Kliknij dwukrotnie Tryby działania w tle.
- Ponownie kliknij + Możliwość.
- Kliknij dwukrotnie Powiadomienia push.
- W sekcji Tryby działania w tle zaznacz Powiadomienia zdalne.
6. Wysyłanie wiadomości z powiadomieniem
Aby wysłać wiadomość testową, wykonaj te czynności:
- Zainstaluj i uruchom aplikację na urządzeniu docelowym. Musisz zaakceptować prośbę o zezwolenie na otrzymywanie powiadomień zdalnych.
- Uzyskaj token rejestracji z logu XCode.
- Upewnij się, że aplikacja działa w tle na urządzeniu.
- Otwórz edytor powiadomień i kliknij Nowe powiadomienie.
- Wpisz tekst wiadomości.
- Kliknij Wyślij wiadomość testową.
- W polu Dodaj token rejestracji FCM wpisz token rejestracji uzyskany w kroku 2.
- Kliknij Przetestuj.
Po kliknięciu Test (Testuj) urządzenie klienta, na które kierowane jest powiadomienie (z aplikacją działającą w tle), powinno otrzymać powiadomienie w centrum powiadomień.
Aby uzyskać informacje o dostarczaniu wiadomości do aplikacji, zapoznaj się z panelem raportowania FCM, który rejestruje liczbę wysłanych i otwartych wiadomości na urządzeniach z iOS i Androidem.
7. Gratulacje
Gratulacje. Wiadomość testowa została wysłana.
W FCM jest o wiele więcej funkcji i konfiguracji, takich jak subskrypcja tematu.
Jeśli Cię interesują, zapoznaj się z oficjalnym dokumentem dla deweloperów.
Co dalej?
Zapoznaj się z tymi samouczkami.