Google is committed to advancing racial equity for Black communities. See how.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Richten Sie eine Firebase Cloud Messaging-Client-App unter iOS ein

Für iOS-Client-Apps können Sie Benachrichtigungen und Datennutzdaten bis zu 4 KB über die Firebase Cloud Messaging-APN-Oberfläche empfangen.

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

Methoden-Swizzling in Firebase Cloud Messaging

Das FCM-SDK führt in zwei Schlüsselbereichen ein Methoden-Swizzling durch: Zuordnen Ihres APN-Tokens zum FCM-Registrierungstoken und Erfassen von Analysedaten während der Verarbeitung von Downstream-Nachrichtenrückrufen . Entwickler, die Swizzling nicht verwenden möchten, können es deaktivieren, indem sie das Flag FirebaseAppDelegateProxyEnabled in die Info.plist-Datei der App einfügen und auf NO (boolescher Wert) setzen. Relevante Bereiche der Handbücher enthalten Codebeispiele mit und ohne aktiviertem Methoden-Swizzling.

Fügen Sie Ihrem iOS-Projekt Firebase hinzu

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

Voraussetzungen

  • Installieren Sie Folgendes:

    • Xcode 11.0 oder höher
    • CocoaPods 1.4.0 oder höher
  • Stellen Sie sicher, dass Ihr Projekt die folgenden Anforderungen erfüllt:

    • Ihr Projekt muss auf iOS 8 oder höher ausgerichtet sein.
  • Richten Sie ein physisches iOS-Gerät zum Ausführen Ihrer App ein und führen Sie die folgenden Aufgaben aus:

    • Erhalten Sie einen Apple Push Notification-Authentifizierungsschlüssel für Ihr Apple Developer-Konto .
    • Aktivieren Sie Push-Benachrichtigungen in XCode unter App> Funktionen .

Wenn Sie noch kein Xcode-Projekt haben und nur ein Firebase-Produkt ausprobieren möchten, können Sie eines unserer Schnellstartbeispiele herunterladen.

Erstellen Sie ein Firebase-Projekt

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

Registrieren Sie Ihre App bei Firebase

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

Besuchen Sie Firebase-Projekte verstehen , um mehr über bewährte Methoden und Überlegungen zum Hinzufügen von Apps zu einem Firebase-Projekt zu erfahren, einschließlich der Behandlung mehrerer Build-Varianten.

  1. Gehen Sie zur Firebase-Konsole .

  2. Klicken Sie in der Mitte der auf das iOS- Symbol ( ), um den Setup-Workflow zu starten.

    Wenn Sie Ihrem Firebase-Projekt bereits eine App hinzugefügt haben, klicken Sie auf App hinzufügen, um die Plattformoptionen anzuzeigen.

  3. Geben Sie die Bundle-ID Ihrer App in das Feld iOS-Bundle-ID ein.

  4. (Optional) Geben Sie weitere App-Informationen ein: App-Kurzname und App Store-ID .

  5. Klicken Sie auf App registrieren .

Fügen Sie eine Firebase-Konfigurationsdatei hinzu

  1. Klicken Sie auf GoogleService-Info.plist herunterladen , um Ihre Firebase iOS-Konfigurationsdatei ( GoogleService-Info.plist ) GoogleService-Info.plist .

  2. Verschieben Sie Ihre Konfigurationsdatei in das Stammverzeichnis Ihres Xcode-Projekts. Wenn Sie dazu aufgefordert werden, wählen Sie, um die Konfigurationsdatei allen Zielen hinzuzufügen.

Wenn Ihr Projekt mehrere Bundle-IDs enthält, müssen Sie jede Bundle-ID einer registrierten App in der Firebase-Konsole GoogleService-Info.plist , damit jede App über eine eigene GoogleService-Info.plist Datei verfügt.

Fügen Sie Ihrer App Firebase-SDKs hinzu

Wir empfehlen die Verwendung von CocoaPods zur Installation der Firebase-Bibliotheken. Wenn Sie CocoaPods jedoch lieber nicht verwenden möchten, können Sie die SDK-Frameworks direkt integrieren oder die Beta- Version von Swift Package Manager verwenden .

Verwenden Sie eines der Schnellstartbeispiele ? Das Xcode-Projekt und die Poddatei (mit Pods) sind bereits vorhanden, Sie müssen jedoch noch Ihre Firebase-Konfigurationsdatei hinzufügen und die Pods installieren .

  1. Erstellen Sie eine Poddatei, falls Sie noch keine haben:

    cd your-project-directory
    pod init
  2. Fügen Sie Ihrer Poddatei die Firebase-Pods hinzu, die Sie in Ihrer App verwenden möchten.

    Sie können Ihrer iOS-App jedes der unterstützten Firebase-Produkte hinzufügen.

    Für eine optimale Erfahrung mit Firebase Cloud Messaging empfehlen wir , Google Analytics in Ihrem Projekt zu aktivieren . Außerdem müssen Sie im Rahmen der Einrichtung von Analytics das Firebase SDK für Analytics zu Ihrer App hinzufügen.

    Analytics aktiviert

    # Add the Firebase pod for Google Analytics
    pod 'Firebase/Analytics'
    # Add the pod for Firebase Cloud Messaging pod 'Firebase/Messaging'

    Analytics nicht aktiviert

    # Add the pod for Firebase Cloud Messaging
    pod 'Firebase/Messaging'
  3. Installieren Sie die Pods und öffnen Sie dann Ihre .xcworkspace Datei, um das Projekt in Xcode .xcworkspace :

    pod install
    open your-project.xcworkspace

Laden Sie den Authentifizierungsschlüssel Ihres APN hoch

Laden Sie den Authentifizierungsschlüssel Ihres APN auf Firebase hoch. Wenn Sie noch keinen APN-Authentifizierungsschlüssel haben, lesen Sie Konfigurieren von APNs mit FCM .

  1. Wählen Sie in Ihrem Projekt in der Firebase-Konsole das Zahnradsymbol aus, wählen Sie Projekteinstellungen und dann die Registerkarte Cloud Messaging .

  2. Klicken Sie im APN-Authentifizierungsschlüssel unter iOS-App-Konfiguration auf die Schaltfläche Hochladen .

  3. Navigieren Sie zu dem Speicherort, an dem Sie Ihren Schlüssel gespeichert haben, wählen Sie ihn aus und klicken Sie auf Öffnen . Fügen Sie die Schlüssel-ID für den Schlüssel hinzu (verfügbar unter Zertifikate, Kennungen und Profile im Apple Developer Member Center ) und klicken Sie auf Hochladen .

Initialisieren Sie Firebase in Ihrer App

Sie müssen Ihrer Anwendung Firebase-Initialisierungscode hinzufügen. Importieren Sie das Firebase-Modul und konfigurieren Sie eine gemeinsam genutzte Instanz wie folgt:

  1. Importieren Sie das Firebase-Modul in Ihr UIApplicationDelegate :

    Schnell

    import Firebase

    Ziel c

    @import Firebase;
  2. Konfigurieren Sie eine freigegebene FirebaseApp Instanz, normalerweise in der application:didFinishLaunchingWithOptions: Ihrer App application:didFinishLaunchingWithOptions: method:

    Schnell

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

    Ziel c

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

Registrieren Sie sich für Remote-Benachrichtigungen

Registrieren Sie Ihre App entweder beim Start oder am gewünschten Punkt in Ihrem Anwendungsablauf für Remote-Benachrichtigungen. Rufen Sie registerForRemoteNotifications wie folgt auf:

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 APN-Gerätetoken können Sie mit diesem Token gezielte Benachrichtigungen an eine bestimmte Instanz Ihrer App senden.

In der gleichen Weise, IOS typischerweise eine APNs Gerät app Start Token liefert, liefert eine FCM Registrierungstoken über FIRMessagingDelegate ‚s messaging:didReceiveRegistrationToken: Methode. Das FCM SDK ruft beim ersten Start der App und bei jeder Aktualisierung oder Ungültigmachung des Tokens ein neues oder vorhandenes Token ab. In allen Fällen ruft das FCM SDK das 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.

Legen Sie den Messaging-Delegaten fest

Um Registrierungstoken zu erhalten, implementieren Sie das Messaging-Delegate-Protokoll und legen FIRMessaging die delegate Eigenschaft von FIRMessaging , nachdem Sie [FIRApp configure] . Wenn Ihr Anwendungsdelegierter beispielsweise dem Messaging- application:didFinishLaunchingWithOptions: entspricht, können Sie den Delegaten für die application:didFinishLaunchingWithOptions: auf sich selbst.

Schnell

Messaging.messaging().delegate = self

Ziel c

[FIRMessaging messaging].delegate = self;

Abrufen des aktuellen Registrierungstokens

Registrierungstoken werden über die Methode messaging:didReceiveRegistrationToken: . Diese Methode wird in der Regel einmal pro App-Start mit dem Registrierungstoken aufgerufen. Wenn diese Methode aufgerufen wird, ist dies 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 direkt mit instanceIDWithHandler abrufen : . Dieser Rückruf stellt ein InstanceIDResult bereit, das das Token enthält. Ein Fehler ungleich Null wird angezeigt, wenn das Abrufen der InstanceID in irgendeiner Weise fehlgeschlagen ist.

Schnell

InstanceID.instanceID().instanceID { (result, error) in
  if let error = error {
    print("Error fetching remote instance ID: \(error)")
  } else if let result = result {
    print("Remote instance ID token: \(result.token)")
    self.instanceIDTokenMessage.text  = "Remote InstanceID token: \(result.token)"
  }
}

Ziel c

[[FIRInstanceID instanceID] instanceIDWithHandler:^(FIRInstanceIDResult * _Nullable result,
                                                    NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"Error fetching remote instance ID: %@", error);
  } else {
    NSLog(@"Remote instance ID token: %@", result.token);
    NSString* message =
      [NSString stringWithFormat:@"Remote InstanceID token: %@", result.token];
    self.instanceIDTokenMessage.text = message;
  }
}];

Im Allgemeinen ist das Token lokal verfügbar, sodass bei dieser Methode keine Netzwerkverbindung hergestellt wird. Sie können diese Methode jederzeit verwenden, um auf das Token zuzugreifen, anstatt es zu speichern.

Token-Aktualisierung überwachen

Geben Sie einen Delegaten an, der dem Messaging-Delegatenprotokoll entspricht, um benachrichtigt zu werden, wenn das Token aktualisiert wird. Im folgenden Beispiel wird der Delegat registriert und die richtige Delegatenmethode hinzugefügt:

Schnell

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
  print("Firebase registration token: \(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 auf eine NSNotification Namen kFIRMessagingRegistrationTokenRefreshNotification anstatt eine Delegate-Methode kFIRMessagingRegistrationTokenRefreshNotification . Die Token-Eigenschaft hat immer den aktuellen Token-Wert.

Swizzling deaktiviert: Zuordnung Ihres APN- und Registrierungstokens

Wenn Sie das Swizzling von Methoden deaktiviert haben, müssen Sie Ihr APN-Token explizit dem FCM-Registrierungstoken zuordnen. didRegisterForRemoteNotificationsWithDeviceToken die Methoden didRegisterForRemoteNotificationsWithDeviceToken , um das APN-Token abzurufen, und legen FIRMessaging dann die FIRMessaging -Eigenschaft von APNSToken :

Schnell

func application(application: UIApplication,
                 didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
  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 Swizzling darauf zugreifen und auf Aktualisierungsereignisse warten.

Importieren Sie vorhandene Benutzer-APN-Token

Wenn Sie über eine vorhandene Benutzerbasis verfügen, die Sie in eine FCM-Client-App integrieren möchten, verwenden Sie die von der Instanz-ID bereitgestellte BatchImport- API. Mit dieser API können Sie vorhandene iOS-APN-Token als Massenimport in FCM importieren und sie neuen, gültigen Registrierungstoken zuordnen.

Verhindern Sie die automatische Initialisierung

FCM generiert eine Instanz-ID, die als Registrierungstoken in FCM verwendet wird. Wenn eine Instanz-ID generiert wird, lädt die Bibliothek die Kennung und die Konfigurationsdaten in Firebase hoch. Wenn Sie vor der Verwendung der Instanz-ID eine explizite Anmeldung erhalten möchten, können Sie die Generierung zum Zeitpunkt der Konfiguration verhindern, indem Sie FCM deaktivieren. Info.plist Sie dazu Ihrer Info.plist einen Metadatenwert Info.plist (nicht Ihrer GoogleService-Info.plist ):

FirebaseMessagingAutoInitEnabled = NO

Um FCM wieder zu aktivieren, können Sie einen Laufzeitaufruf ausführen:

Schnell

Messaging.messaging().autoInitEnabled = true

Ziel c

[FIRMessaging messaging].autoInitEnabled = YES;

Dieser Wert bleibt auch nach dem Festlegen des App-Neustarts erhalten.

Nächste Schritte

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