W przypadku aplikacji klienckich Apple możesz otrzymywać powiadomienia i dane o długości do 4096 bajtów za pomocą interfejsu Firebase Cloud Messaging APN.
Aby napisać kod klienta w języku Objective-C lub Swift, zalecamy użycie interfejsu FIRMessaging API. Przykładowy krótki przewodnik zawiera przykładowy kod dla obu języków.
Podmiana metody w Firebase Cloud Messaging
Pakiet SDK FCM wykonuje zamianę metody w 2 kluczowych obszarach: przypisuje token APN do tokenu rejestracji FCM oraz rejestruje dane Analytics podczas obsługi wywołania zwrotnego wiadomości z dalszego ciągu.
Deweloperzy, którzy nie chcą korzystać z swizlowania, mogą go wyłączyć, dodając flagę FirebaseAppDelegateProxyEnabled
w pliku Info.plist aplikacji i ustawiając ją na „NO” (wartość logiczna). Odpowiednie sekcje przewodników zawierają przykłady kodu z włączonym i wyłączonym mieszaniem metod.
Dodawanie Firebase do projektu Apple
Jeśli jeszcze tego nie zrobisz, dodaj Firebase do swojego projektu Apple.
Przesyłanie klucza uwierzytelniania APNs
Prześlij klucz uwierzytelniania APNs do Firebase. Jeśli nie masz jeszcze klucza uwierzytelniania APN, utwórz go w Centrum dla deweloperów Apple.
-
W konsoli Firebase projektu kliknij ikonę koła zębatego, wybierz Ustawienia projektu, a następnie kartę Cloud Messaging.
-
W sekcji Konfiguracja aplikacji na iOS kliknij Prześlij obok Klucz uwierzytelniania APNs.
-
Przejdź do lokalizacji, w której został zapisany klucz, wybierz go i kliknij Otwórz. Dodaj identyfikator klucza (dostępny w Centrum dla deweloperów Apple) i kliknij Prześlij.
Rejestrowanie się na powiadomienia zdalne
Zarejestruj aplikację do otrzymywania powiadomień zdalnych na etapie uruchamiania lub w wybranym miejscu w przebiegu aplikacji. Wywołaj funkcjęregisterForRemoteNotifications
w ten sposób:
Swift
UNUserNotificationCenter.current().delegate = self let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] UNUserNotificationCenter.current().requestAuthorization( options: authOptions, completionHandler: { _, _ in } ) application.registerForRemoteNotifications()
Objective-C
[UNUserNotificationCenter currentNotificationCenter].delegate = self; UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge; [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:authOptions completionHandler:^(BOOL granted, NSError * _Nullable error) { // ... }]; [application registerForRemoteNotifications];
Dostęp do tokena rejestracji
Domyślnie pakiet SDK FCM generuje token rejestracji dla wystąpienia aplikacji klienta po uruchomieniu aplikacji. Podobnie jak token urządzenia APN, ten token umożliwia wysyłanie ukierunkowanych powiadomień do dowolnego konkretnego wystąpienia aplikacji.
Podobnie jak platformy Apple zwykle dostarczają token urządzenia APN po uruchomieniu aplikacji, FCM dostarcza token rejestracji za pomocą metody FIRMessagingDelegate
messaging:didReceiveRegistrationToken:
.
Pakiet FCM SDK pobiera nowy lub istniejący token podczas uruchamiania aplikacji oraz za każdym razem, gdy token zostanie zaktualizowany lub unieważniony.
W każdym przypadku pakiet FCM SDK wywołuje funkcję messaging:didReceiveRegistrationToken:
z poprawnym tokenem.
Token rejestracji może się zmienić, gdy:
- Aplikacja jest przywracana na nowym urządzeniu
- Użytkownik odinstaluje/ponownie zainstaluje aplikację.
- Użytkownik czyści dane aplikacji.
Konfigurowanie delegata do obsługi wiadomości
Aby otrzymywać tokeny rejestracji, zaimplementuj protokół obsługi wiadomości i po wywołaniu funkcji [FIRApp configure]
ustaw właściwość delegate
obiektu FIRMessaging
.
Jeśli na przykład delegowanie aplikacji jest zgodne z protokołem delegowania wiadomości, możesz ustawić delegowanie w application:didFinishLaunchingWithOptions:
na samo siebie.
Swift
Messaging.messaging().delegate = self
Objective-C
[FIRMessaging messaging].delegate = self;
Pobieranie bieżącego tokena rejestracji
Tokeny rejestracji są dostarczane za pomocą metody messaging:didReceiveRegistrationToken:
. Ta metoda jest wywoływana zwykle raz na rozpoczęcie aplikacji za pomocą tokena rejestracji. Wywołanie tej metody to idealny moment na:
- Jeśli token rejestracji jest nowy, prześlij go na serwer aplikacji.
- Subskrybuj token rejestracji w tematach. Jest to wymagane tylko w przypadku nowych subskrypcji lub sytuacji, gdy użytkownik ponownie zainstalował aplikację.
Token możesz pobrać bezpośrednio za pomocą funkcji token(completion:). Jeśli pobranie tokena zakończyło się niepowodzeniem, zwracany jest błąd inny niż null.
Swift
Messaging.messaging().token { token, error in if let error = error { print("Error fetching FCM registration token: \(error)") } else if let token = token { print("FCM registration token: \(token)") self.fcmRegTokenMessage.text = "Remote FCM registration token: \(token)" } }
Objective-C
[[FIRMessaging messaging] tokenWithCompletion:^(NSString *token, NSError *error) { if (error != nil) { NSLog(@"Error getting FCM registration token: %@", error); } else { NSLog(@"FCM registration token: %@", token); self.fcmRegTokenMessage.text = token; } }];
W każdej chwili możesz użyć tej metody, aby uzyskać dostęp do tokena zamiast go przechowywać.
Monitorowanie odświeżania tokena
Aby otrzymywać powiadomienia o aktualizacji tokena, podaj delegata zgodnego z protokołem delegata wiadomości. W tym przykładzie rejestrujemy delegata i dodajemy odpowiednią metodę delegata:
Swift
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 ) // TODO: If necessary send token to application server. // Note: This callback is fired at each app startup and whenever a new token is generated. }
Objective-C
- (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken { NSLog(@"FCM registration token: %@", fcmToken); // Notify about received token. NSDictionary *dataDict = [NSDictionary dictionaryWithObject:fcmToken forKey:@"token"]; [[NSNotificationCenter defaultCenter] postNotificationName: @"FCMToken" object:nil userInfo:dataDict]; // TODO: If necessary send token to application server. // Note: This callback is fired at each app startup and whenever a new token is generated. }
Możesz też nasłuchiwać zdarzenia NSNotification
o nazwie kFIRMessagingRegistrationTokenRefreshNotification
, zamiast podawać metodę delegowaną. Właściwość tokena zawsze zawiera bieżącą wartość tokena.
Zmapowanie tokena APN i tokena rejestracji jest wyłączone
Jeśli masz wyłączone swizlowanie metod lub tworzysz aplikację SwiftUI, musisz wyraźnie mapować token APN na token rejestracji FCM. Wykonaj metodę application(_:didRegisterForRemoteNotificationsWithDeviceToken:)
, aby pobrać token APN, a potem ustaw właściwość Messaging
na apnsToken
:
Swift
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Messaging.messaging().apnsToken = deviceToken }
Objective-C
// With "FirebaseAppDelegateProxyEnabled": NO - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [FIRMessaging messaging].APNSToken = deviceToken; }
Po wygenerowaniu tokenu rejestracji FCM możesz uzyskać do niego dostęp i nasłuchiwać zdarzeń odświeżania za pomocą tych samych metod co w przypadku włączonego swizlowania.
Zapobieganie automatycznej inicjalizacji
Gdy wygenerowany zostanie token rejestracji FCM, biblioteka prześle do Firebase identyfikator i dane konfiguracji. Jeśli chcesz najpierw uzyskać od użytkowników wyraźną zgodę, możesz uniemożliwić generowanie tokenów w czasie konfiguracji, wyłączając FCM. Aby to zrobić, dodaj wartość metadanych do Info.plist
(a nie do GoogleService-Info.plist
):
FirebaseMessagingAutoInitEnabled = NO
Aby ponownie włączyć FCM, możesz wywołać go w czasie wykonywania:
Swift
Messaging.messaging().autoInitEnabled = true
Objective-C
[FIRMessaging messaging].autoInitEnabled = YES;
Po ustawieniu ta wartość jest zachowywana po ponownym uruchomieniu aplikacji.
Dalsze kroki
Po skonfigurowaniu klienta Apple możesz dodać do aplikacji obsługę wiadomości i inne zaawansowane funkcje. Więcej informacji znajdziesz w tych przewodnikach:
- Odbieranie wiadomości w aplikacji Apple
- Wysyłanie wiadomości dotyczących tematu
- Wysyłanie do grup urządzeń