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

W przypadku aplikacji klienckich firmy Apple możesz odbierać powiadomienia i ładunki danych o rozmiarze do 4096 bajtów przez interfejs APNs Komunikacja w chmurze Firebase (FCM).

Do pisania kodu klienta w języku Objective-C lub Swift zalecamy użycie FIRMessaging API. Krótkie wprowadzenie zawiera przykładowy kod dla obu języków.

Zmiana metod w Komunikacji w chmurze Firebase (FCM)

Pakiet SDK FCM zmienia metody w 2 kluczowych obszarach: mapuje token APNs na token rejestracji FCM i pobiera dane analityczne podczas obsługi wywołań zwrotnych wiadomości. Deweloperzy, którzy nie chcą używać przesuwania, mogą je wyłączyć, dodając flagę FirebaseAppDelegateProxyEnabled do pliku Info.plist aplikacji i ustawiając ją na NO (wartość logiczna). Odpowiednie obszary w przewodnikach zawierają przykłady kodu – zarówno z włączoną funkcją przesuwania metod, jak i bez niej.

Dodaj Firebase do projektu Apple

Dodaj Firebase do swojego projektu Apple, chyba że masz to już za sobą.

Prześlij klucz uwierzytelniania APNs

Prześlij swój klucz uwierzytelniania APNs do Firebase. Jeśli nie masz jeszcze klucza uwierzytelniania APNs, utwórz go w Apple Developer Member Center.

  1. W projekcie w konsoli Firebase kliknij ikonę koła zębatego, wybierz Ustawienia projektu, a następnie kartę Komunikacja w chmurze.

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

  3. Przejdź do lokalizacji, w której masz zapisany klucz, wybierz go i kliknij Otwórz. Dodaj identyfikator klucza (dostępny w Apple Developer Member Center) i kliknij Prześlij.

Zarejestruj się, aby otrzymywać powiadomienia zdalne

Przy uruchamianiu lub w wybranym momencie przepływu aplikacji zarejestruj ją na potrzeby powiadomień zdalnych. Wywołaj registerForRemoteNotifications, 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 instancji aplikacji klienckiej przy uruchamianiu aplikacji. Podobnie jak token urządzenia APNs ten token pozwala wysyłać kierowane powiadomienia do dowolnej instancji Twojej aplikacji.

W ten sam sposób, w jaki platformy Apple zwykle dostarczają token urządzenia APNs przy uruchamianiu aplikacji, FCM udostępnia token rejestracji za pomocą metody messaging:didReceiveRegistrationToken: FIRMessagingDelegate. Pakiet FCM SDK pobiera nowy lub istniejący token podczas pierwszego uruchomienia aplikacji oraz za każdym razem, gdy token zostanie zaktualizowany lub unieważniony. We wszystkich przypadkach pakiet SDK FCM wywołuje messaging:didReceiveRegistrationToken: za pomocą prawidłowego tokena.

Token rejestracji może się zmienić, gdy:

  • Aplikacja zostanie przywrócona na nowym urządzeniu
  • Użytkownik odinstalowuje lub ponownie instaluje 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 Twój dostęp do aplikacji jest zgodny z protokołem przesyłania komunikatów, możesz go ustawić w application:didFinishLaunchingWithOptions: na siebie.

Swift

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

Pobieram bieżący token rejestracji

Tokeny rejestracji są dostarczane przy użyciu metody messaging:didReceiveRegistrationToken:. Ta metoda jest zwykle wywoływana raz na każdą aplikację rozpoczynający się od tokena rejestracji. Gdy ta metoda jest wywoływana, jest to idealny moment, aby:

  • 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 w sytuacjach, gdy użytkownik ponownie zainstalował aplikację.

Token możesz pobrać bezpośrednio za pomocą token(completion:). Jeśli pobranie tokena nie powiodło się w jakikolwiek sposób, zgłaszany 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;
  }
}];

Możesz użyć tej metody w dowolnym momencie, 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. Ten przykład służy do zarejestrowania delegata i dodania odpowiedniej metody:

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.
}

Zamiast udostępniać metodę delegowania, możesz też nasłuchiwać NSNotification o nazwie kFIRMessagingRegistrationTokenRefreshNotification. Właściwość tokena zawsze ma bieżącą wartość tokena.

Wyłączono Swizzling: mapowanie tokena APNs i tokena rejestracji

Jeśli masz wyłączone przesuwanie metod lub tworzysz aplikację SwiftUI, musisz jawnie zmapować swój token APNs na token rejestracji FCM. Zaimplementuj metodę application(_:didRegisterForRemoteNotificationsWithDeviceToken:), aby pobierać token APNs, a następnie ustaw właściwość apnsToken Messaging:

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 tokena rejestracji FCM możesz uzyskać do niego dostęp i nasłuchiwać zdarzeń odświeżania przy użyciu tych samych metod, co przy włączonym przesuwaniu.

Zapobiegaj automatycznemu inicjowaniu

Po wygenerowaniu tokena rejestracji FCM biblioteka przesyła do Firebase dane identyfikatora i konfiguracji. 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ść będzie się utrzymywać w przypadku ponownych uruchomień 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: