Konfigurowanie aplikacji klienckiej Komunikacja w chmurze Firebase (FCM) na platformach Apple

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.

  1. W konsoli Firebase projektu kliknij ikonę koła zębatego, wybierz Ustawienia projektu, a następnie kartę Cloud Messaging.

  2. W sekcji Konfiguracja aplikacji na iOS kliknij Prześlij obok Klucz uwierzytelniania APNs.

  3. 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 FIRMessagingDelegatemessaging: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: