Skonfiguruj aplikację kliencką Firebase Cloud Messaging na iOS

W przypadku aplikacji klienckich na iOS 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, zaleca się korzystanie z API FIRMessaging . Przykład quickstart udostępnia przykładowy kod dla obu językach.

Aby włączyć wysyłanie powiadomień push przez APN, potrzebujesz:

  • Klucz uwierzytelniania Apple Push Notification dla Twojego konta Apple Developer. Firebase Cloud Messaging używa tego tokena do wysyłania powiadomień push do aplikacji identyfikowanej przez identyfikator aplikacji.

  • Tworzenie rezerw profil dla tej App ID z powiadomień Push włączony . Ponadto, aby przetestować swoją aplikację w trakcie tworzenia, potrzebujesz profilu aprowizacji na potrzeby programowania, aby autoryzować urządzenia do uruchamiania aplikacji, która nie została jeszcze opublikowana w App Store.

Utworzyć zarówno w Państwa firmy Apple Developer Center .

Zmiana metody w Firebase Cloud Messaging

FCM SDK metoda wykonuje swizzling w dwóch kluczowych obszarach: mapowanie swoje APN żeton do rejestracji FCM tokena i przechwytywania danych analitycznych w trakcie dalszego postępowania wiadomość zwrotną . Deweloperzy, którzy nie wolą używać swizzling może wyłączyć go poprzez dodanie flagi FirebaseAppDelegateProxyEnabled w pliku Info.plist o aplikacji i ustawienie go 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 na iOS

W tej sekcji opisano zadania, które mogłeś wykonać, jeśli masz już włączone inne funkcje Firebase w swojej aplikacji. Dla FCM konkretnie, musisz przesłać swój klucz uwierzytelniający APN i zarejestrować się na zdalnych powiadomień .

Warunki wstępne

  • Zainstaluj następujące elementy:

    • Xcode 12.2 lub nowszy
    • CocoaPods 1.10.0 lub nowszy
  • Upewnij się, że Twój projekt spełnia te wymagania:

    • Twój projekt musi być kierowany na system iOS 10 lub nowszy.
  • Skonfiguruj fizycznego urządzenia z iOS, aby uruchomić aplikację i wykonać następujące czynności:

    • Otrzymać powiadomienie Apple Push klucz uwierzytelniania dla koncie Apple Developer .
    • Włącz powiadomienia push w Xcode pod App> możliwości.

Jeżeli nie masz jeszcze projektu Xcode i po prostu chcą wypróbować Firebase produkt można pobrać jeden z naszych próbek QuickStart .

Utwórz projekt Firebase

Zanim dodasz Firebase do swojej aplikacji na iOS, musisz utworzyć projekt Firebase, aby połączyć się z aplikacją na iOS. Wizyta Zrozum Firebase Projekty aby dowiedzieć się więcej o projektach Firebase.

Zarejestruj swoją aplikację w Firebase

Gdy masz już projekt Firebase, możesz dodać do niego swoją aplikację na iOS.

Wizyta Zrozum Firebase Projects , aby dowiedzieć się więcej na temat najlepszych praktyk i rozważań na dodawanie aplikacji do projektu Firebase, w tym jak obsługiwać wiele wariantów budowy.

  1. Przejdź do konsoli Firebase .

  2. W środku strony głównej projektu kliknij ikonę iOS ( ), aby uruchomić przepływ pracy instalacji.

    Jeśli już dodany aplikację do projektu Firebase, kliknij Dodaj aplikację, aby wyświetlić opcje platformy.

  3. Wpisz swój identyfikator pakietu aplikacji w iOS wiązek polu ID.

  4. (Opcjonalnie) Wprowadź inne informacje APL: App Store App nick i identyfikator.

  5. Kliknij Register aplikację.

Dodaj plik konfiguracyjny Firebase

  1. Kliknij Pobierz GoogleService-Info.plist aby uzyskać plik konfiguracyjny Firebase iOS ( GoogleService-Info.plist ).

  2. Przenieś plik konfiguracyjny do katalogu głównego projektu Xcode. Jeśli pojawi się monit, wybierz, aby dodać plik konfiguracyjny do wszystkich celów.

Jeśli masz wiele identyfikatorów wiązki w projekcie, należy powiązać każdy identyfikator pakietu z zarejestrowanej aplikacji w konsoli Firebase tak, że każda aplikacja może mieć własne GoogleService-Info.plist pliku.

Dodaj pakiety SDK Firebase do swojej aplikacji

Zalecamy stosowanie CocoaPods instalacji bibliotek Firebase. Jednakże, jeśli nie chcesz używać CocoaPods można zintegrować ram SDK bezpośrednio lub używać Swift Package Manager zamiast.

Używasz jednej z próbek QuickStart ? W ramach projektu Xcode i Podfile (ze strąkami) są już obecne, ale będzie trzeba jeszcze dodać plik konfiguracyjny Firebase i zainstalować strąków.

  1. Utwórz plik Podfile, jeśli jeszcze go nie masz:

    cd your-project-directory
    pod init
  2. Do pliku Podfile dodaj bloki Firebase, których chcesz używać w swojej aplikacji.

    Można dodać dowolny z obsługiwanych produktów Firebase do swojej aplikacji na iOS.

    Dla optymalnego doświadczenia z Firebase Cloud Messaging, zalecamy umożliwiając Google Analytics w projekcie. Ponadto w ramach konfigurowania Analytics musisz dodać do swojej aplikacji pakiet SDK Firebase dla Analytics.

    Analytics włączone

    # Add the Firebase pod for Google Analytics
    pod 'Firebase/Analytics'
    
    # For Analytics without IDFA collection capability, use this pod instead
    # pod ‘Firebase/AnalyticsWithoutAdIdSupport’
    
    # Add the pod for Firebase Cloud Messaging
    pod 'Firebase/Messaging'

    Dowiedz się więcej o IDFA, identyfikatora reklamowego na poziomie urządzenia, w Apple użytkownika prywatności i danych użytkowania i App Tracking przejrzystości dokumentacji.

    Analytics nie jest włączone

    # Add the pod for Firebase Cloud Messaging
    pod 'Firebase/Messaging'
  3. Zainstalować strąków, następnie otwórz .xcworkspace plik, aby zobaczyć projekt w Xcode:

    pod install
    open your-project.xcworkspace

Prześlij swój klucz uwierzytelniania APNs

Prześlij swój klucz uwierzytelniania APNs do Firebase. Jeżeli nie masz jeszcze klucza uwierzytelniania APN, upewnij się, aby utworzyć w Państwa firmy Apple Developer Center .

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

  2. W APN klucza uwierzytelniającego pod iOS konfiguracji aplikacji, kliknij przycisk Prześlij.

  3. Przejdź do lokalizacji, w której został zapisany klucz, zaznacz go i kliknij przycisk Otwórz. Dodaj identyfikator klucza do klucza (dostępne w firmy Apple Developer Center użytkownika ) i kliknij przycisk Prześlij.

Zainicjuj Firebase w swojej aplikacji

Musisz dodać do aplikacji kod inicjujący Firebase. Zaimportuj moduł Firebase i skonfiguruj udostępnioną instancję, jak pokazano:

  1. Zaimportować moduł Firebase w UIApplicationDelegate :

    Szybki

    import Firebase

    Cel C

    @import Firebase;
  2. Skonfiguruj FirebaseApp wspólne wystąpienie, zazwyczaj w swojej aplikacji application:didFinishLaunchingWithOptions: metodę:

    Szybki

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Cel C

    // Use Firebase library to configure APIs
    [FIRApp configure];

Zarejestruj się, aby otrzymywać powiadomienia zdalne

Podczas uruchamiania lub w żądanym punkcie przepływu aplikacji zarejestruj aplikację, aby otrzymywać powiadomienia zdalne. Zadzwoń registerForRemoteNotifications 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, ten token umożliwia wysyłanie ukierunkowanych powiadomień do dowolnego wystąpienia Twojej aplikacji.

W ten sam sposób, że iOS zazwyczaj dostarcza urządzenia Nazwy APN Reklamowe na starcie aplikacji, FCM zapewnia rejestrację Reklamowe poprzez FIRMessagingDelegate „s messaging:didReceiveRegistrationToken: metody. 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 wymaga messaging:didReceiveRegistrationToken: z ważną tokena.

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ć znaki rejestracyjne, wdrożyć protokół przesyłania wiadomości delegata i ustaw FIRMessaging „s delegate własność po wywołaniu [FIRApp configure] . Na przykład, jeśli delegat wniosek jest zgodny z protokołem wiadomości delegata, 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 rejestracyjne są dostarczane za pośrednictwem metody messaging:didReceiveRegistrationToken: . Ta metoda jest wywoływana zazwyczaj 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żna pobierać token bezpośrednio za pomocą tokena (zakończenie :) . 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 słuchać na NSNotification nazwie kFIRMessagingRegistrationTokenRefreshNotification zamiast dostarczania 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. Przesłonić metody didRegisterForRemoteNotificationsWithDeviceToken aby pobrać APN żeton, a następnie ustawić FIRMessaging „s APNSToken właściwość:

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ć, należy dodać wartość metadanych do Info.plist (nie Twój 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 iOS możesz dodać obsługę wiadomości i inne, bardziej zaawansowane zachowanie do swojej aplikacji. Zobacz te przewodniki, aby uzyskać więcej informacji: