Skonfiguruj aplikację kliencką Firebase Cloud Messaging na platformach Apple

W przypadku aplikacji klienckich Apple możesz odbierać powiadomienia i ładunki danych o rozmiarze 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 API FIRMessaging . Przykład szybkiego startu zawiera przykładowy kod dla obu języków.

Zmiana metody w Firebase Cloud Messaging

Zestaw SDK FCM wykonuje zmianę metod w dwóch kluczowych obszarach: mapowanie tokenu APN na token rejestracji FCM i przechwytywanie danych analitycznych podczas obsługi wywołania zwrotnego wiadomości na dalszym etapie . 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 NIE (wartość logiczna). Odpowiednie obszary przewodników zawierają przykłady kodu, zarówno z włączoną opcją zmiany metod, jak i bez niej.

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 APNs do Firebase. Jeśli nie masz jeszcze klucza uwierzytelniającego APNs, pamiętaj o utworzeniu go w Apple Developer Member Center .

  1. Wewnątrz projektu w konsoli Firebase wybierz ikonę koła zębatego, wybierz Ustawienia projektu , a następnie wybierz kartę Cloud Messaging .

  2. W kluczu uwierzytelniania APN w obszarze konfiguracji aplikacji na iOS kliknij przycisk Prześlij .

  3. Przejdź do lokalizacji, w której zapisałeś 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ć zdalne powiadomienia

Zarejestruj aplikację przy uruchamianiu lub w żądanym momencie przepływu aplikacji, aby otrzymywać zdalne powiadomienia. Zadzwoń do 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 rejestracyjnego

Domyślnie zestaw SDK FCM generuje token rejestracji dla instancji aplikacji klienckiej podczas uruchamiania aplikacji. Podobnie jak token urządzenia APNs, ten token umożliwia wysyłanie ukierunkowanych powiadomień do dowolnej konkretnej instancji aplikacji.

W ten sam sposób, w jaki platformy Apple zazwyczaj dostarczają token urządzenia APNs przy uruchamianiu aplikacji, FCM udostępnia token rejestracji za pośrednictwem metody messaging:didReceiveRegistrationToken: FIRMessagingDelegate Zestaw FCM SDK 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 rejestracyjny może ulec zmianie w przypadku:

  • Aplikacja zostanie przywrócona na nowym urządzeniu
  • Użytkownik odinstalowuje/ponownie instaluje aplikację
  • Użytkownik czyści dane aplikacji.

Ustaw delegata przesyłania wiadomości

Aby otrzymać tokeny rejestracji, zaimplementuj protokół delegowania przesyłania wiadomości 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 przesyłania wiadomości, możesz ustawić delegata na application:didFinishLaunchingWithOptions: na siebie.

Szybki

Messaging.messaging().delegate = self

Cel C

[FIRMessaging messaging].delegate = self;

Pobieranie bieżącego tokena rejestracyjnego

Tokeny rejestracyjne dostarczane są metodą messaging:didReceiveRegistrationToken: . Ta metoda jest wywoływana zazwyczaj raz na aplikację uruchamianą z tokenem rejestracji. Po wywołaniu tej metody jest to idealny moment na:

  • Jeśli token rejestracyjny jest nowy, wyślij go na serwer aplikacji.
  • Subskrybuj token rejestracyjny do tematów. Jest to wymagane tylko w przypadku nowych subskrypcji lub w sytuacjach, gdy użytkownik ponownie zainstalował aplikację.

Możesz pobrać token bezpośrednio za pomocą token(completion:) . Jeśli w jakikolwiek sposób nie udało się pobrać tokenu, 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 tokenu

Aby otrzymywać powiadomienia za każdym razem, gdy token zostanie zaktualizowany, podaj delegata zgodnego z protokołem delegata przesyłania 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ę delegowania. Właściwość tokenu zawsze ma bieżącą wartość tokenu.

Swizzling wyłączony: mapowanie tokena APN i tokena rejestracji

Jeśli wyłączyłeś zmianę metody lub tworzysz aplikację SwiftUI, musisz jawnie zmapować token APN na token rejestracji FCM. Zaimplementuj application(_:didRegisterForRemoteNotificationsWithDeviceToken:) w celu pobrania tokenu APNs, a następnie ustaw właściwość apnsToken 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, korzystając z tych samych metod, co przy włączonej opcji swizzling.

Zapobiegaj automatycznej inicjalizacji

Po wygenerowaniu tokenu rejestracji FCM biblioteka przesyła identyfikator i dane konfiguracyjne do Firebase. Jeśli chcesz najpierw uzyskać wyraźną zgodę użytkowników, możesz uniemożliwić generowanie tokenów w czasie konfiguracji, wyłączając FCM. Aby to zrobić, dodaj wartość metadanych do pliku Info.plist (nie do pliku 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;

Po ustawieniu ta wartość będzie obowiązywać po ponownym uruchomieniu aplikacji.

Następne kroki

Po skonfigurowaniu klienta Apple możesz dodać do swojej aplikacji obsługę komunikatów i inne, bardziej zaawansowane zachowania. Więcej informacji można znaleźć w tych przewodnikach: