Catch up on everthing we announced at this year's Firebase Summit. Learn more

Einrichten einer Firebase Cloud Messaging-Client-App auf Apple-Plattformen

Für Apple-Client-Apps können Sie Benachrichtigungen und Datennutzlasten bis zu 4000 Byte über die Firebase Cloud Messaging APNs-Schnittstelle empfangen.

Um Ihren Client - Code in Objective-C oder Swift zu schreiben, empfehlen wir , dass Sie die Verwendung FIRMessaging API . Das Quickstart Beispiel enthält Beispielcode für beide Sprachen.

Um das Senden von Push-Benachrichtigungen über APNs zu aktivieren, benötigen Sie:

  • Ein Apple-Push-Benachrichtigungs-Authentifizierungsschlüssel für Ihr Apple-Entwicklerkonto. Firebase Cloud Messaging verwendet dieses Token, um Push-Benachrichtigungen an die durch die App-ID identifizierte Anwendung zu senden.

  • Ein Bereitstellungsprofil für die App - ID mit Push - Benachrichtigungen aktiviert . Um Ihre App während der Entwicklung zu testen, benötigen Sie außerdem ein Bereitstellungsprofil für die Entwicklung, um Ihre Geräte zum Ausführen einer App zu autorisieren, die noch nicht im App Store veröffentlicht wurde.

Sie legen sowohl im Apple Developer Member Center .

Methodenwechsel in Firebase Cloud Messaging

Der FCM SDK führt Methode Swizzling in zwei Schlüsselbereichen: Abbildung Ihrer APNs Token an den FCM Registrierungstoken und Analysedaten während Erfassung Downstream - Nachricht Rückruf Handhabung . Entwickler , die nicht zu verwenden Swizzling bevorzugen , können sie deaktivieren , indem Sie das Flag Hinzufügen FirebaseAppDelegateProxyEnabled Info.plist in der App Datei und es auf NO (boolean value) zu setzen. Relevante Bereiche der Leitfäden enthalten Codebeispiele, sowohl mit als auch ohne aktiviertes Methoden-Swizzling.

Firebase zu Ihrem Apple-Projekt hinzufügen

In diesem Abschnitt werden Aufgaben behandelt, die Sie möglicherweise erledigt haben, wenn Sie bereits andere Firebase-Funktionen für Ihre App aktiviert haben. Speziell für FCM, müssen Sie Ihre APNs Authentifizierungsschlüssel laden und registrieren Sie sich für Remote - Benachrichtigungen .

Voraussetzungen

  • Installieren Sie Folgendes:

    • Xcode 12.5 oder höher
  • Stellen Sie sicher, dass Ihr Projekt diese Anforderungen erfüllt:

    • Ihr Projekt muss auf diese Plattformversionen oder höher ausgerichtet sein:
      • iOS 10
      • macOS 10.12
      • tvOS 12
      • watchOS 6
  • Stellen Sie ein physisches Apple - Gerät bis zu Ihrer Anwendung ausführen, und führen Sie die folgenden Aufgaben:

    • Erhalten Sie einen Apple Push Notification - Authentifizierungsschlüssel für Ihr Apple Developer Account .
    • Aktivieren Sie Push Notifications in XCode unter App> Capabilities.

Wenn Sie nicht bereits über ein Xcode - Projekt haben und wollen nur ein Produkt Firebase auszuprobieren, können Sie einen unserer Download quickstart Proben .

Erstellen Sie ein Firebase-Projekt

Bevor Sie Firebase zu Ihrer Apple-App hinzufügen können, müssen Sie ein Firebase-Projekt erstellen, um eine Verbindung zu Ihrer App herzustellen. Besuchen Sie verstehen Firebase Projekte mehr über Projekte Firebase zu lernen.

Registrieren Sie Ihre App bei Firebase

Nachdem Sie ein Firebase-Projekt erstellt haben, können Sie ihm Ihre Apple-App hinzufügen.

Besuchen Sie verstehen Firebase Projekte für das Hinzufügen von Anwendungen zu einem Projekt Firebase mehr über Best Practices und Überlegungen zu lernen, auch , wie mehrere Build - Varianten zu behandeln.

  1. Gehen Sie auf die Firebase Konsole .

  2. Im Zentrum des Projekts Übersichtsseite klicken Sie auf das iOS + Symbol , um das Setup - Workflow zu starten.

    Wenn Sie bereits eine App zu Ihrem Firebase - Projekt hinzugefügt haben, klicken Sie App Fügen Sie die Plattform - Optionen anzuzeigen.

  3. Geben Sie Ihre App-Bundle - ID in dem Bündel - ID - Feld.

  4. (Optional) Geben Sie weitere Informationen zur App: App Spitznamen und App Store - ID.

  5. Klicken Sie auf Registrieren App.

Eine Firebase-Konfigurationsdatei hinzufügen

  1. Klicken Sie auf Download GoogleService-Info.plist auf Ihre Firebase Apple - Plattformen Konfigurationsdatei (erhalten GoogleService-Info.plist ).

  2. Verschieben Sie Ihre Konfigurationsdatei in das Stammverzeichnis Ihres Xcode-Projekts. Wenn Sie dazu aufgefordert werden, wählen Sie aus, ob die Konfigurationsdatei allen Zielen hinzugefügt werden soll.

Wenn Sie mehr Bündel IDs in Ihrem Projekt haben, müssen Sie jedes Bündel ID mit einer registrierten Anwendung in der Konsole verbinden Firebase so dass jede App eine eigene haben kann GoogleService-Info.plist - Datei.

Firebase SDKs zu Ihrer App hinzufügen

Verwenden Sie den Swift Package Manager, um Firebase-Abhängigkeiten zu installieren und zu verwalten.

  1. In Xcode, mit Ihrem App - Projekt zu öffnen, navigieren Sie zu Datei> Swift Packages> Paket hinzufügen Abhängigkeit.
  2. Wenn Sie dazu aufgefordert werden, fügen Sie das SDK-Repository der Firebase Apple Platforms hinzu:
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. Wählen Sie die Firebase Cloud Messaging-Bibliothek aus.
  5. Für ein optimales Benutzererlebnis mit Firebase Cloud Messaging, empfehlen wir Google Analytics ermöglicht in Ihrem Firebase - Projekt und das Hinzufügen des Firebase SDK für Google Analytics in Ihrer App. Sie können entweder die Bibliothek ohne IDFA-Sammlung oder mit IDFA-Sammlung auswählen.
  6. Wenn Sie fertig sind, beginnt Xcode automatisch, Ihre Abhängigkeiten im Hintergrund aufzulösen und herunterzuladen.

Laden Sie Ihren APNs-Authentifizierungsschlüssel hoch

Laden Sie Ihren APNs-Authentifizierungsschlüssel in Firebase hoch. Wenn Sie nicht bereits über einen APNs Authentifizierungsschlüssel haben, stellen Sie sicher , dass man in der erstellen Apple Developer Member Center .

  1. In Ihrem Projekt in der Firebase - Konsole, wählen Sie das Zahnradsymbol, Projekteinstellungen auswählen und anschließend die Cloud Messaging Registerkarte.

  2. In APNs Authentifizierungsschlüssel unter iOS - App - Konfiguration, klicken Sie auf die Schaltfläche Hochladen.

  3. Wechseln Sie zu dem Ort , an dem Sie Ihren Schlüssel gespeichert, wählen Sie aus und klicken Sie auf Öffnen. Fügen Sie den Schlüssel - ID für den Schlüssel (erhältlich im Apple Developer Member Center ) und klicken Sie auf Hochladen.

Firebase in Ihrer App initialisieren

Sie müssen Ihrer Anwendung den Firebase-Initialisierungscode hinzufügen. Importieren Sie das Firebase-Modul und konfigurieren Sie eine freigegebene Instanz wie gezeigt:

  1. Importieren Sie die Firebase Modul in Ihrem UIApplicationDelegate :

    Schnell

    import Firebase

    Ziel c

    @import Firebase;
  2. Konfigurieren ein FirebaseApp gemeinsame Instanz, in der Regel in Ihrem App - application:didFinishLaunchingWithOptions: Methode:

    Schnell

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

    Ziel c

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

Für Fernbenachrichtigungen registrieren

Registrieren Sie Ihre App entweder beim Start oder an der gewünschten Stelle in Ihrem Anwendungsablauf für Remote-Benachrichtigungen. Rufen Sie registerForRemoteNotifications wie gezeigt:

Schnell

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()

Ziel 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];

Greifen Sie auf das Registrierungstoken zu

Standardmäßig generiert das FCM SDK beim App-Start ein Registrierungstoken für die Client-App-Instanz. Ähnlich wie beim APNs-Gerätetoken können Sie mit diesem Token gezielte Benachrichtigungen an eine bestimmte Instanz Ihrer App senden.

Auf die gleiche Art und Weise , dass Apple - Plattformen typischerweise eine APNs Gerät auf app Start Token liefern, bietet FCM eine Registrierungstoken über FIRMessagingDelegate ‚s messaging:didReceiveRegistrationToken: Methode. Das FCM SDK ruft ein neues oder vorhandenes Token während des ersten App-Starts und immer dann ab, wenn das Token aktualisiert oder ungültig gemacht wird. In allen Fällen ruft das FCM SDK messaging:didReceiveRegistrationToken: mit einem gültigen Token.

Das Registrierungstoken kann sich ändern, wenn:

  • Die App wird auf einem neuen Gerät wiederhergestellt
  • Der Benutzer deinstalliert/installiert die App neu
  • Der Benutzer löscht App-Daten.

Stellen Sie den Messaging-Delegierten ein

So empfängt Registrierung Token, implementieren , um das Messaging - Delegierten - Protokoll und setzt FIRMessaging ‚s delegate Eigenschaft nach dem Aufruf von [FIRApp configure] . Zum Beispiel, wenn Ihre Anwendung Delegierter auf dem Messaging - Delegat - Protokoll entspricht, können Sie die Delegierten am Set application:didFinishLaunchingWithOptions: auf sich.

Schnell

Messaging.messaging().delegate = self

Ziel c

[FIRMessaging messaging].delegate = self;

Abrufen des aktuellen Registrierungstokens

Registration Token werden über die Methode geliefert messaging:didReceiveRegistrationToken: . Diese Methode wird im Allgemeinen einmal pro App-Start mit Registrierungstoken aufgerufen. Wenn diese Methode aufgerufen wird, ist es der ideale Zeitpunkt, um:

  • Wenn das Registrierungstoken neu ist, senden Sie es an Ihren Anwendungsserver.
  • Abonnieren Sie das Registrierungstoken für Themen. Dies ist nur für neue Abonnements oder für Situationen erforderlich, in denen der Benutzer die App neu installiert hat.

Sie können das Token abrufen direkt mit Token (Abschluss :) . Ein Fehler ungleich null wird ausgegeben, wenn der Tokenabruf in irgendeiner Weise fehlgeschlagen ist.

Schnell

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)"
  }
}

Ziel 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;
  }
}];

Sie können diese Methode jederzeit verwenden, um auf das Token zuzugreifen, anstatt es zu speichern.

Token-Aktualisierung überwachen

Um bei jeder Aktualisierung des Tokens benachrichtigt zu werden, stellen Sie einen Delegaten bereit, der dem Messaging-Delegatenprotokoll entspricht. Im folgenden Beispiel wird der Delegat registriert und die richtige Delegatmethode hinzugefügt:

Schnell

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.
}

Ziel 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.
}

Alternativ können Sie für einen hören NSNotification namens kFIRMessagingRegistrationTokenRefreshNotification anstatt eine Delegatmethode liefern. Die Token-Eigenschaft hat immer den aktuellen Token-Wert.

Swizzling deaktiviert: Zuordnung Ihres APNs-Tokens und Registrierungstokens

Wenn Sie die Methodenumschaltung deaktiviert haben, müssen Sie Ihr APNs-Token explizit dem FCM-Registrierungstoken zuordnen. Überschreiben Sie die Methoden didRegisterForRemoteNotificationsWithDeviceToken die APNs Token abzurufen, und dann setzen FIRMessaging ‚s APNSToken Eigenschaft:

Schnell

func application(application: UIApplication,
                 didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
  Messaging.messaging().apnsToken = deviceToken
}

Ziel c

// With "FirebaseAppDelegateProxyEnabled": NO
- (void)application:(UIApplication *)application
    didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    [FIRMessaging messaging].APNSToken = deviceToken;
}

Nachdem das FCM-Registrierungstoken generiert wurde, können Sie mit denselben Methoden wie bei aktiviertem Swizling darauf zugreifen und auf Aktualisierungsereignisse warten.

Automatische Initialisierung verhindern

Wenn ein FCM-Registrierungstoken generiert wird, lädt die Bibliothek die Kennung und die Konfigurationsdaten in Firebase hoch. Wenn Sie zuerst eine explizite Zustimmung von Benutzern erhalten möchten, können Sie die Tokengenerierung zum Zeitpunkt der Konfiguration verhindern, indem Sie FCM deaktivieren. Dazu fügen Sie einen Metadatenwert für Ihren Info.plist (nicht Ihr GoogleService-Info.plist ):

FirebaseMessagingAutoInitEnabled = NO

Um FCM wieder zu aktivieren, können Sie einen Laufzeitaufruf tätigen:

Schnell

Messaging.messaging().autoInitEnabled = true

Ziel c

[FIRMessaging messaging].autoInitEnabled = YES;

Dieser Wert bleibt über App-Neustarts hinweg bestehen, sobald er festgelegt wurde.

Nächste Schritte

Nachdem Sie Ihren Apple-Client eingerichtet haben, können Sie Ihrer App die Nachrichtenverarbeitung und andere erweiterte Verhaltensweisen hinzufügen. Weitere Informationen finden Sie in diesen Anleitungen: