Skonfiguruj aplikację kliencką Firebase Cloud Messaging na platformach Apple

W przypadku aplikacji klienckich Apple możesz otrzymywać powiadomienia i ładunki danych do 4000 bajtów przez interfejs APNs Firebase Cloud Messaging.

Aby napisać kod klienta w Objective-C lub Swift, zalecamy użycie FIRMessaging API . Przykład szybkiego startu zawiera przykładowy kod dla obu języków.

Zmiana metody w Firebase Cloud Messaging

FCM SDK wykonuje manipulacje metodami w dwóch kluczowych obszarach: mapowanie tokena APNs na token rejestracji FCM i przechwytywanie danych analitycznych podczas obsługi wywołania zwrotnego wiadomości . 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 NO (wartość logiczna). Odpowiednie obszary przewodników zawierają przykłady kodu, zarówno z włączonym swizzlingiem, jak i bez niego.

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 uwierzytelniania APNs do Firebase. Jeśli nie masz jeszcze klucza uwierzytelniania APNs, utwórz go w Apple Developer Member Center .

  1. W swoim projekcie w konsoli Firebase wybierz ikonę koła zębatego, wybierz Ustawienia projektu , a następnie wybierz kartę Wiadomości w chmurze .

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

  3. Przejdź do lokalizacji, w której zapisano 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

Podczas uruchamiania lub w żądanym punkcie przepływu aplikacji zarejestruj aplikację, aby otrzymywać powiadomienia zdalne. registerForRemoteNotifications połączeń dla zdalnych powiadomień, jak pokazano:

Szybki

if #available(iOS 10.0, *) {
  // For iOS 10 display notification (sent via APNS)
  UNUserNotificationCenter.current().delegate = self

  let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
  UNUserNotificationCenter.current().requestAuthorization(
    options: authOptions,
    completionHandler: { _, _ in }
  )
} else {
  let settings: UIUserNotificationSettings =
    UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
  application.registerUserNotificationSettings(settings)
}

application.registerForRemoteNotifications()

Cel C

if ([UNUserNotificationCenter class] != nil) {
  // iOS 10 or later
  // For iOS 10 display notification (sent via APNS)
  [UNUserNotificationCenter currentNotificationCenter].delegate = self;
  UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
      UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
  [[UNUserNotificationCenter currentNotificationCenter]
      requestAuthorizationWithOptions:authOptions
      completionHandler:^(BOOL granted, NSError * _Nullable error) {
        // ...
      }];
} else {
  // iOS 10 notifications aren't available; fall back to iOS 8-9 notifications.
  UIUserNotificationType allNotificationTypes =
  (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
  UIUserNotificationSettings *settings =
  [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
  [application registerUserNotificationSettings:settings];
}

[application registerForRemoteNotifications];

Uzyskaj dostęp do tokena rejestracji

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

W ten sam sposób, w jaki platformy Apple zazwyczaj dostarczają token urządzenia APNs podczas uruchamiania aplikacji, FCM udostępnia token rejestracji za pośrednictwem FIRMessagingDelegate ' messaging:didReceiveRegistrationToken: . FCM SDK pobiera nowy lub istniejący token podczas początkowego uruchamiania aplikacji oraz za każdym razem, gdy token jest aktualizowany lub unieważniany. We wszystkich przypadkach FCM SDK wywołuje messaging:didReceiveRegistrationToken: z prawidłowym tokenem.

Token rejestracyjny może ulec zmianie, gdy:

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

Ustaw delegata wiadomości

Aby otrzymać tokeny rejestracji, zaimplementuj protokół delegata 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 delegata przesyłania komunikatów, można ustawić delegata na application:didFinishLaunchingWithOptions: do siebie.

Szybki

Messaging.messaging().delegate = self

Cel C

[FIRMessaging messaging].delegate = self;

Pobieranie aktualnego tokena rejestracji

Tokeny rejestracji są dostarczane za pośrednictwem messaging:didReceiveRegistrationToken: . Ta metoda jest wywoływana zwykle raz na aplikację, aby rozpocząć od tokenu rejestracji. Kiedy ta metoda jest wywoływana, jest to idealny moment, aby:

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

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

Aby otrzymywać powiadomienia za każdym razem, gdy token jest aktualizowany, 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żna nasłuchiwać NSNotification o nazwie kFIRMessagingRegistrationTokenRefreshNotification , zamiast podawać metodę delegata. Właściwość token zawsze ma aktualną wartość tokena.

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

Jeśli wyłączyłeś swizzling metody, musisz jawnie zamapować swój token APNs na token rejestracji FCM. Zaimplementuj metodę application(_:didRegisterForRemoteNotificationsWithDeviceToken:) , aby pobrać token APNs, a następnie ustaw właściwość apnsToken w systemie 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 przy użyciu tych samych metod, co przy włączonym swizzlingu.

Zapobiegaj automatycznej inicjalizacji

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

Ta wartość jest zachowywana po ponownym uruchomieniu aplikacji po ustawieniu.

Następne kroki

Po skonfigurowaniu klienta Apple możesz dodać obsługę wiadomości i inne, bardziej zaawansowane zachowanie do swojej aplikacji. Zobacz te przewodniki, aby uzyskać więcej informacji: