Save the date - Google I/O returns May 18-20. Register to get the most out of the digital experience: Build your schedule, reserve space, participate in Q&As, earn Google Developer profile badges, and more. Register now
Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Skonfiguruj aplikację kliencką Firebase Cloud Messaging na iOS

W przypadku aplikacji klienckich na iOS możesz otrzymywać powiadomienia i ładunki danych do 4KB przez interfejs Firebase Cloud Messaging APNs.

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.

Aby umożliwić wysyłanie powiadomień push przez APN, potrzebujesz:

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

  • Profil aprowizacji dla tego identyfikatora aplikacji z włączonymi powiadomieniami push . Ponadto, aby przetestować aplikację w fazie rozwoju, potrzebujesz profilu aprowizacji do programowania, aby autoryzować swoje urządzenia do uruchamiania aplikacji, która nie została jeszcze opublikowana w App Store.

Tworzysz oba w Apple Developer Member Center .

Zmiana metod w Firebase Cloud Messaging

FCM SDK wykonuje zamianę metod w dwóch kluczowych obszarach: mapowanie tokenu APNs na token rejestracji FCM i przechwytywanie danych analitycznych podczas obsługi wywołań zwrotnych wiadomości . Programiści, 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łączonym przełączaniem metod, jak i bez niego.

Dodaj Firebase do swojego projektu na iOS

W tej sekcji omówiono zadania, które mogłeś wykonać, jeśli masz już włączone inne funkcje Firebase dla swojej aplikacji. W szczególności w przypadku FCM musisz przesłać klucz uwierzytelniający APN i zarejestrować się w celu otrzymywania zdalnych powiadomień .

Wymagania wstępne

  • Zainstaluj następujące elementy:

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

    • Twój projekt musi być przeznaczony dla systemu iOS 10 lub nowszego.
  • Skonfiguruj fizyczne urządzenie z systemem iOS, aby uruchomić aplikację, i wykonaj następujące czynności:

    • Uzyskaj klucz uwierzytelniania Apple Push Notification dla swojego konta Apple Developer .
    • Włącz powiadomienia push w XCode w aplikacji> Możliwości .

Jeśli nie masz jeszcze projektu Xcode i chcesz po prostu wypróbować produkt Firebase, możesz pobrać jeden z naszych przykładów szybkiego startu .

Utwórz projekt Firebase

Zanim dodasz Firebase do swojej aplikacji na iOS, musisz utworzyć projekt Firebase, aby połączyć się z aplikacją na iOS. Odwiedź artykuł Omówienie projektów Firebase, aby dowiedzieć się więcej o projektach Firebase.

Zarejestruj swoją aplikację w Firebase

Po utworzeniu projektu Firebase możesz dodać do niego swoją aplikację na iOS.

Odwiedź artykuł Omówienie projektów Firebase, aby dowiedzieć się więcej o sprawdzonych metodach i kwestiach związanych z dodawaniem aplikacji do projektu Firebase, w tym o tym, jak obsługiwać wiele wariantów kompilacji.

  1. Przejdź do konsoli Firebase .

  2. Na środku strony przeglądu projektu kliknij ikonę iOS ( ), aby uruchomić proces konfiguracji.

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

  3. Wpisz identyfikator pakietu aplikacji w polu ID pakietu na iOS .

  4. (Opcjonalnie) Wpisz inne informacje o aplikacji: pseudonim aplikacji i identyfikator App Store .

  5. Kliknij Zarejestruj aplikację .

Dodaj plik konfiguracyjny Firebase

  1. Kliknij Pobierz GoogleService-Info.plist, aby uzyskać plik konfiguracyjny GoogleService-Info.plist 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 pakietów w swoim projekcie, musisz powiązać każdy identyfikator pakietu z zarejestrowaną aplikacją w konsoli GoogleService-Info.plist aby każda aplikacja mogła mieć własny plik GoogleService-Info.plist .

Dodaj pakiety SDK Firebase do swojej aplikacji

Zalecamy użycie CocoaPods do zainstalowania bibliotek Firebase . Jeśli jednak wolisz nie używać CocoaPods, możesz bezpośrednio zintegrować struktury SDK lub zamiast tego użyć Swift Package Manager .

Czy używasz jednego z przykładów szybkiego startu ? Projekt Xcode i Podfile (z podami) są już obecne, ale nadal musisz dodać plik konfiguracyjny Firebase i zainstalować pody.

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

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

    Do aplikacji na iOS możesz dodać dowolne obsługiwane produkty Firebase .

    Aby uzyskać optymalne wrażenia z Firebase Cloud Messaging, zalecamy włączenie Google Analytics w swoim 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, identyfikatorze reklamowym na poziomie urządzenia, w dokumentacji firmy Apple dotyczącej prywatności i wykorzystywania danych oraz przejrzystości śledzenia aplikacji .

    Analytics nie jest włączony

    # Add the pod for Firebase Cloud Messaging
    pod 'Firebase/Messaging'
  3. Zainstaluj pody, a następnie otwórz plik .xcworkspace , aby wyświetlić projekt w Xcode:

    pod install
    open your-project.xcworkspace

Prześlij swój klucz uwierzytelniania APN

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

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

  2. W kluczu uwierzytelniania APN w 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 dla klucza (dostępny w Apple Developer Member Center ) i kliknij Prześlij .

Zainicjuj Firebase w swojej aplikacji

Musisz dodać kod inicjujący Firebase do swojej aplikacji. Zaimportuj moduł Firebase i skonfiguruj współdzieloną instancję, jak pokazano:

  1. Zaimportuj moduł 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ć zdalne powiadomienia

Podczas uruchamiania lub w odpowiednim momencie przepływu aplikacji zarejestruj aplikację w celu otrzymywania zdalnych powiadomień. registerForRemoteNotifications połączeń 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 rejestracyjnego

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

W ten sam sposób, w jaki iOS zwykle dostarcza token urządzenia FIRMessagingDelegate podczas uruchamiania aplikacji, FCM zapewnia token rejestracji za pośrednictwem messaging:didReceiveRegistrationToken: metoda. FCM SDK pobiera nowy lub istniejący token podczas początkowego uruchamiania aplikacji i za każdym razem, gdy token jest aktualizowany lub unieważniany. We wszystkich przypadkach messaging:didReceiveRegistrationToken: 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 czyści dane aplikacji.

Ustaw pełnomocnika do obsługi wiadomości

Aby otrzymać tokeny rejestracji, zaimplementuj protokół delegata wiadomości i ustaw FIRMessaging delegate [FIRApp configure] po wywołaniu [FIRApp configure] . Na przykład, jeśli delegat aplikacji jest zgodny z protokołem delegata obsługi wiadomości, możesz ustawić delegata w 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 zwykle raz na uruchomienie aplikacji z tokenem rejestracji. Kiedy ta metoda jest wywoływana, jest to idealny moment na:

  • Jeśli token rejestracji 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ą tokena (uzupełnianie :) . Jeśli pobranie tokenu w jakikolwiek sposób nie powiodło się, zostanie podany 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 tokenu zamiast go przechowywać.

Monitoruj odświeżanie tokenu

Aby otrzymywać powiadomienia o każdej aktualizacji tokenu, należy dostarczyć delegata zgodnego z protokołem delegata obsługi wiadomości. 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 nazwie kFIRMessagingRegistrationTokenRefreshNotification zamiast dostarczania metody delegata. Właściwość token zawsze ma bieżącą wartość tokenu.

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

Jeśli wyłączyłeś swizzling metod, musisz jawnie zamapować swój token APN na token rejestracji FCM. Zastąp metody didRegisterForRemoteNotificationsWithDeviceToken aby pobrać token APN, a następnie ustaw FIRMessaging APNSToken :

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 w przypadku włączonego swizzlingu.

Zapobiegaj automatycznej inicjalizacji

Gdy generowany jest token 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 uniemożliwić generowanie tokenu w czasie konfiguracji, wyłączając FCM. Aby to zrobić, dodaj wartość metadanych do swojego 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;

Po ustawieniu ta wartość utrzymuje się po ponownym uruchomieniu aplikacji.

Następne kroki

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