W przypadku aplikacji klienckich Apple możesz otrzymywać powiadomienia i ładunki danych do 4000 bajtów za pośrednictwem interfejsu APN Firebase Cloud Messaging.
Aby napisać kod klienta w języku Objective-C lub Swift, zalecamy użycie interfejsu FIRMessaging API . Przykład szybkiego startu zawiera przykładowy kod dla obu języków.
Metoda swizzling w Firebase Cloud Messaging
Zestaw SDK FCM wykonuje zamianę metod w dwóch kluczowych obszarach: mapowanie tokenu APN na token rejestracji FCM i przechwytywanie danych analitycznych podczas obsługi wywołania zwrotnego komunikatu w dół strumienia . Deweloperzy, którzy wolą nie używać swizzlingu, mogą go wyłączyć, dodając flagę FirebaseAppDelegateProxyEnabled
w pliku Info.plist aplikacji i ustawiając ją na NO (wartość logiczna). Odpowiednie obszary przewodników zawierają przykłady kodu, zarówno z włączonym przełączaniem metod, jak i bez niego.
Dodaj Firebase do swojego projektu Apple
Jeśli jeszcze tego nie zrobiłeś, dodaj Firebase do swojego projektu Apple .
Prześlij swój klucz uwierzytelniający APNs
Prześlij swój klucz uwierzytelniający APN do Firebase. Jeśli nie masz jeszcze klucza uwierzytelniającego APNs, utwórz go w Apple Developer Member Center .
W swoim projekcie w konsoli Firebase wybierz ikonę koła zębatego, wybierz Ustawienia projektu , a następnie wybierz kartę Cloud Messaging .
W kluczu uwierzytelniania APNs w konfiguracji aplikacji na iOS kliknij przycisk Prześlij .
Przejdź do lokalizacji, w której zapisałeś klucz, wybierz go i kliknij Otwórz . Dodaj identyfikator klucza dla klucza (dostępny w Apple Developer Member Center ) i kliknij Prześlij .
Zarejestruj się, aby otrzymywać powiadomienia zdalne
Podczas uruchamiania lub w wybranym momencie przepływu aplikacji zarejestruj swoją aplikację, aby otrzymywać powiadomienia zdalne. ZadzwońregisterForRemoteNotifications
, jak pokazano:Szybki
UNUserNotificationCenter.current().delegate = self let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] UNUserNotificationCenter.current().requestAuthorization( options: authOptions, completionHandler: { _, _ in } ) application.registerForRemoteNotifications()
Cel C
[UNUserNotificationCenter currentNotificationCenter].delegate = self; UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge; [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:authOptions completionHandler:^(BOOL granted, NSError * _Nullable error) { // ... }]; [application registerForRemoteNotifications];
Uzyskaj dostęp do tokena rejestracji
Domyślnie zestaw SDK FCM generuje token rejestracji dla wystąpienia aplikacji klienckiej podczas uruchamiania aplikacji. Podobnie jak token urządzenia APNs, ten token umożliwia wysyłanie ukierunkowanych powiadomień do dowolnej konkretnej instancji Twojej aplikacji.
W ten sam sposób, w jaki platformy Apple zazwyczaj dostarczają token urządzenia APNs podczas uruchamiania aplikacji, FCM udostępnia token rejestracji za pośrednictwem metody komunikatów FIRMessagingDelegate
messaging:didReceiveRegistrationToken:
:. Zestaw SDK FCM pobiera nowy lub istniejący token podczas pierwszego uruchomienia aplikacji oraz za każdym razem, gdy token jest aktualizowany lub unieważniany. We wszystkich przypadkach zestaw FCM SDK wywołuje messaging:didReceiveRegistrationToken:
z prawidłowym tokenem.
Token rejestracji może ulec zmianie, gdy:
- Aplikacja zostanie przywrócona na nowym urządzeniu
- Użytkownik odinstalowuje/ponownie instaluje aplikację
- Użytkownik czyści dane aplikacji.
Ustaw delegata wiadomości
Aby otrzymać tokeny rejestracji, zaimplementuj protokół delegowania komunikatów i ustaw właściwość delegate
FIRMessaging
po wywołaniu [FIRApp configure]
. Na przykład jeśli delegat aplikacji jest zgodny z protokołem delegowania komunikatów, można ustawić delegata na application:didFinishLaunchingWithOptions:
na siebie.
Szybki
Messaging.messaging().delegate = self
Cel C
[FIRMessaging messaging].delegate = self;
Pobieranie bieżącego tokena rejestracji
Tokeny rejestracyjne są dostarczane za pomocą metody messaging:didReceiveRegistrationToken:
. Ta metoda jest zwykle wywoływana raz na uruchomienie aplikacji z tokenem rejestracji. Kiedy ta metoda jest wywoływana, jest to idealny czas na:
- Jeśli token rejestracji jest nowy, wyślij go do serwera aplikacji.
- Subskrybuj token rejestracji do tematów. Jest to wymagane tylko w przypadku nowych subskrypcji lub sytuacji, gdy użytkownik ponownie zainstalował aplikację.
Możesz pobrać token bezpośrednio za pomocą token(completion:) . Jeśli pobieranie tokenu nie powiedzie się w jakikolwiek sposób, zostanie wyświetlony błąd inny niż null.
Szybki
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)" } }
Cel 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; } }];
Możesz użyć tej metody w dowolnym momencie, aby uzyskać dostęp do tokena zamiast go przechowywać.
Monitoruj odświeżanie tokena
Aby otrzymywać powiadomienia za każdym razem, gdy token zostanie zaktualizowany, podaj delegata zgodnego z protokołem delegowania komunikatów. Poniższy przykład rejestruje delegata i dodaje odpowiednią metodę delegata:
Szybki
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. }
Cel 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. }
Alternatywnie możesz nasłuchiwać NSNotification
o nazwie kFIRMessagingRegistrationTokenRefreshNotification
zamiast dostarczać metodę delegata. Właściwość token zawsze ma bieżącą wartość tokenu.
Swizzling wyłączony: mapowanie tokena APN i tokena rejestracji
Jeśli wyłączyłeś przełączanie metod lub tworzysz aplikację SwiftUI, musisz jawnie zamapować swój token APN na token rejestracji FCM. Zaimplementuj application(_:didRegisterForRemoteNotificationsWithDeviceToken:)
w celu pobrania tokenu APNs, a następnie ustaw właściwość apnsToken
elementu Messaging
:
Szybki
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Messaging.messaging().apnsToken = deviceToken }
Cel C
// With "FirebaseAppDelegateProxyEnabled": NO - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [FIRMessaging messaging].APNSToken = deviceToken; }
Po wygenerowaniu tokenu rejestracji FCM można uzyskać do niego dostęp i nasłuchiwać zdarzeń odświeżania przy użyciu tych samych metod, co przy włączonym przełączaniu.
Zapobiegaj automatycznej inicjalizacji
Gdy generowany jest token rejestracji FCM, biblioteka przesyła identyfikator i dane konfiguracyjne do Firebase. Jeśli chcesz najpierw uzyskać jawną zgodę użytkowników, możesz zapobiec generowaniu tokenów w czasie konfiguracji, wyłączając FCM. Aby to zrobić, dodaj wartość metadanych do pliku Info.plist
(nie GoogleService-Info.plist
):
FirebaseMessagingAutoInitEnabled = NO
Aby ponownie włączyć FCM, możesz wykonać wywołanie w czasie wykonywania:
Szybki
Messaging.messaging().autoInitEnabled = true
Cel C
[FIRMessaging messaging].autoInitEnabled = YES;
Ta wartość utrzymuje się po ponownym uruchomieniu aplikacji.
Następne kroki
Po skonfigurowaniu klienta Apple możesz dodać obsługę wiadomości i inne, bardziej zaawansowane zachowanie do swojej aplikacji. Zobacz te przewodniki, aby uzyskać więcej informacji: