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

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

Aby napisać kod klienta w języku Objective-C lub Swift, zalecamy użycie FIRMessaging API. Przykład z krótkim wprowadzeniem zawiera przykładowy kod w obu językach.

Zamykanie metod w Komunikacji w chmurze Firebase (FCM)

Pakiet SDK FCM umożliwia zmianę metody w 2 głównych obszarach: mapowanie tokena APNs na token rejestracji FCM i rejestrowanie danych analitycznych podczas obsługi wywołań zwrotnych wiadomości wysyłanych do klienta. Programiści, którzy nie chcą korzystać z wizerunku, mogą go wyłączyć, dodając flagę FirebaseAppDelegateProxyEnabled w pliku Info.plist aplikacji i ustawiając ją na wartość NO (wartość logiczna). Odpowiednie sekcje tych przewodników zawierają przykłady kodu – zarówno z włączonym, jak i bez włączania przesuwania metod.

Dodaj Firebase do swojego projektu Apple

Dodaj Firebase do swojego projektu Apple.

Przesyłanie klucza uwierzytelniania APNs

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

  1. W swoim projekcie w konsoli Firebase kliknij kolejno ikonę koła zębatego, Ustawienia projektu i kartę Komunikacja w chmurze.

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

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

Rejestrowanie powiadomień zdalnych

Zarejestruj aplikację na potrzeby powiadomień zdalnych podczas uruchamiania lub w określonym momencie przepływu aplikacji. Wywołaj registerForRemoteNotifications, jak pokazano na ekranie:

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 podczas jej uruchamiania. Ten token, podobnie jak token urządzenia APNs, pozwala wysyłać kierowane powiadomienia do dowolnej instancji aplikacji.

W taki sam sposób, w jaki platformy Apple zwykle dostarczają token urządzenia APNs przy uruchomieniu aplikacji, FCM udostępnia token rejestracji za pomocą metody messaging:didReceiveRegistrationToken: FIRMessagingDelegate. Pakiet SDK FCM pobiera nowy lub istniejący token podczas pierwszego uruchamiania aplikacji oraz za każdym razem, gdy token jest aktualizowany lub unieważniany. We wszystkich przypadkach pakiet SDK FCM wywołuje messaging:didReceiveRegistrationToken: z prawidłowym tokenem.

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

  • Aplikacja została przywrócona na nowym urządzeniu
  • Użytkownik odinstaluje lub ponownie zainstaluje aplikację.
  • Użytkownik usuwa dane aplikacji.

Przekazywanie dostępu do wiadomości

Aby otrzymywać tokeny rejestracji, zaimplementuj protokół przesyłania wiadomości i ustaw właściwość delegate dla FIRMessaging po wywołaniu [FIRApp configure]. Jeśli na przykład delegat aplikacji spełnia wymagania protokołu delegacji do przesyłania wiadomości, możesz ustawić przedstawiciela 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 metodą messaging:didReceiveRegistrationToken:. Ta metoda jest zwykle wywoływana raz na każdą aplikację, która rozpoczyna się od tokena rejestracji. Wywołanie tej metody oznacza idealny moment na:

  • Jeśli token rejestracji jest nowy, wyślij go do serwera aplikacji.
  • Zasubskrybuj token rejestracji do tematów. Jest to wymagane tylko w przypadku nowych subskrypcji i sytuacji, gdy użytkownik ponownie zainstalował aplikację.

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

Tej metody możesz użyć w każdej chwili, aby uzyskać dostęp do tokena zamiast go zapisywać.

Monitorowanie odświeżania tokenów

Aby otrzymać powiadomienie o aktualizacji tokena, podaj przedstawiciela zgodnego z protokołem przekazywania wiadomości. Ten przykład rejestruje delegata i dodaje odpowiednią metodę przekazywania:

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 podawać metodę delegata, możesz też nasłuchiwać obiektu NSNotification o nazwie kFIRMessagingRegistrationTokenRefreshNotification. Właściwość tokena ma zawsze bieżącą wartość tokena.

Zawieszanie wyłączone: mapowanie tokenów APNs i rejestracji

Jeśli wyłączysz zapamiętywanie metod lub tworzysz aplikację SwiftUI, musisz jawnie zmapować swój token APNs na token rejestracji FCM. Zaimplementuj metodę application(_:didRegisterForRemoteNotificationsWithDeviceToken:), aby pobrać token APN, 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 za pomocą tych samych metod, co przy włączonym szwizowaniu.

Zapobiegaj automatycznemu inicjowaniu

Po wygenerowaniu tokena rejestracji FCM biblioteka przesyła do Firebase identyfikator i dane konfiguracji. Jeśli chcesz najpierw uzyskać wyraźną zgodę użytkowników, możesz uniemożliwić generowanie tokenów podczas konfiguracji, wyłączając FCM. Aby to zrobić, dodaj wartość metadanych do elementu Info.plist (nie GoogleService-Info.plist):

FirebaseMessagingAutoInitEnabled = NO

Aby ponownie włączyć FCM, możesz wykonać wywołanie w środowisku wykonawczym:

Swift

Messaging.messaging().autoInitEnabled = true

Objective-C

[FIRMessaging messaging].autoInitEnabled = YES;

Ta wartość będzie się utrzymywać przy każdym ponownym uruchomieniu aplikacji po jej ustawieniu.

Dalsze kroki

Po skonfigurowaniu klienta Apple możesz dodać do swojej aplikacji obsługę wiadomości i inne, bardziej zaawansowane działania. Więcej informacji znajdziesz w tych przewodnikach: