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.
Do napisania kodu 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.
Dodaj Firebase do projektu Apple
Jeśli jeszcze tego nie zrobiono, dodaj Firebase do projektu Apple.
Przesyłanie klucza uwierzytelniania APNs
Prześlij klucz uwierzytelniania APNs do Firebase. Jeśli nie masz jeszcze klucza uwierzytelniania APNs, utwórz go w Apple Developer Member Center.
-
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 masz zapisany klucz, wybierz go i kliknij Otwórz. Dodaj identyfikator klucza (dostępny w Centrum dla deweloperów Apple) i kliknij Prześlij.
Zarejestruj się, aby otrzymywać powiadomienia zdalne
Na początku lub w wybranym momencie w przebiegu uruchamiania aplikacji zarejestruj aplikację na potrzeby powiadomień zdalnych. WywołajregisterForRemoteNotifications
, jak pokazano poniżej:
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 w przypadku tokena 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.
We wszystkich przypadkach pakiet SDK FCM wywołuje messaging:didReceiveRegistrationToken:
, podając prawidłowy token.
Token rejestracji może się zmienić, gdy:
- Aplikacja zostanie przywrócona na nowym urządzeniu
- Użytkownik odinstaluje/ponownie zainstaluje aplikację.
- Użytkownik czyści dane aplikacji.
Ustawianie osoby z przekazanym dostępem do wiadomości
Aby otrzymywać tokeny rejestracji, zaimplementuj protokół przekazywania komunikatów i ustaw właściwość delegate
w FIRMessaging
po wywołaniu [FIRApp configure]
.
Jeśli na przykład delegowanie aplikacji jest zgodne z protokołem obsługi 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. Gdy ta metoda jest wywoływana, jest to idealny moment, aby:
- 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ą 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ć.
Odświeżanie tokenów monitorowania
Aby otrzymywać powiadomienia za każdym razem, gdy token zostanie zaktualizowany, podaj przedstawiciela zgodnego z protokołem przekazywania. 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 ma aktualną wartość tokena.
Zmapowanie tokena APN i tokena rejestracji jest wyłączone
Jeśli masz wyłączone przesuwanie metod lub tworzysz aplikację SwiftUI, musisz jawnie zmapować swój token APNs na token rejestracji FCM. Wykonaj metodę application(_:didRegisterForRemoteNotificationsWithDeviceToken:)
, aby pobrać token APN, a potem ustaw właściwość Messaging
: 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
Po wygenerowaniu tokena rejestracji FCM biblioteka przesyła do Firebase dane identyfikacyjne i konfiguracyjne. Jeśli chcesz najpierw uzyskać wyraźną zgodę użytkowników, możesz zapobiec generowaniu tokenów podczas konfiguracji, wyłączając FCM. Aby to zrobić, dodaj wartość metadanych do Info.plist
(nie do GoogleService-Info.plist
):
FirebaseMessagingAutoInitEnabled = NO
Aby ponownie włączyć FCM, możesz wykonać wywołanie w czasie działania aplikacji:
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 swojej aplikacji obsługę wiadomości i inne, bardziej 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ń