Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

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, zalecamy użycie FIRMessaging API . Przykład szybkiego startu zawiera przykładowy kod dla obu języków.

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.

  • Profil aprowizacji dla tego identyfikatora aplikacji z włączonymi powiadomieniami wypychanymi . 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.

Oba tworzysz w Apple Developer Member Center .

Zmiana metody w Firebase Cloud Messaging

FCM SDK wykonuje manipulacje metodami w dwóch kluczowych obszarach: mapowanie tokenu APNs na token rejestracji FCM i przechwytywanie danych analitycznych podczas obsługi wywołań zwrotnych komunikatów podrzędnych . 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 na iOS

W tej sekcji opisano zadania, które mogłeś wykonać, jeśli masz już włączone inne funkcje Firebase w swojej aplikacji. W przypadku FCM musisz przesłać klucz uwierzytelniania APNs i zarejestrować się, aby otrzymywać powiadomienia zdalne .

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 fizyczne urządzenie z systemem iOS, aby uruchomić aplikację, i wykonaj następujące zadania:

    • Uzyskaj klucz uwierzytelniania Apple Push Notification dla swojego konta Apple Developer .
    • Włącz powiadomienia wypychane w XCode w obszarze App > Capabilities .

Jeśli nie masz jeszcze projektu Xcode i chcesz tylko 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ź Zrozumienie projektów Firebase, 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.

Odwiedź stronę Omówienie projektów Firebase, aby dowiedzieć się więcej o sprawdzonych metodach i zagadnieniach dotyczących dodawania 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ć przepływ pracy instalacji.

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

  3. Wpisz identyfikator pakietu swojej aplikacji w polu identyfikator pakietu 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 w projekcie wiele identyfikatorów pakietów, 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

Do instalacji bibliotek Firebase zalecamy użycie CocoaPods . Jeśli jednak wolisz nie używać CocoaPods, możesz bezpośrednio zintegrować frameworki SDK lub zamiast tego użyć Swift Package Manager .

Czy używasz jednej z próbek szybkiego startu ? Projekt Xcode i plik Podfile (z zasobnikami) są już obecne, ale nadal musisz dodać plik konfiguracyjny Firebase i zainstalować zasobniki.

  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.

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

    Aby zapewnić optymalne działanie 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.

    Analiza włączona

    # 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 Apple dotyczącej prywatności użytkowników i wykorzystania danych oraz przejrzystości śledzenia aplikacji .

    Analytics nie jest włączone

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

    pod install
    open your-project.xcworkspace

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 .

Zainicjuj Firebase w swojej aplikacji

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

  1. Zaimportuj moduł UIApplicationDelegate swojego 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. registerForRemoteNotifications połączeń dla zdalnych 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, w jaki system iOS zwykle dostarcza token urządzenia FIRMessagingDelegate 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 komunikatów i ustaw FIRMessaging delegate [FIRApp configure] 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 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ż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 obsługi 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 nazwie kFIRMessagingRegistrationTokenRefreshNotification zamiast kFIRMessagingRegistrationTokenRefreshNotification 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. Zastąp metody didRegisterForRemoteNotificationsWithDeviceToken aby pobrać token FIRMessaging , 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 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ę użytkowników, możesz zapobiec generowaniu tokenów w czasie konfiguracji, wyłączając FCM. Aby to zrobić, dodaj wartość metadanych do GoogleService-Info.plist Info.plist (nie do 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: