Firebase is back at Google I/O on May 10! Register now

Richten Sie eine Firebase Cloud Messaging-Client-App auf Apple-Plattformen ein

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

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

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

Methodenwechsel in Firebase Cloud Messaging

Das FCM-SDK führt Methoden-Swizzling in zwei Schlüsselbereichen durch: Zuordnung Ihres APNs-Tokens zum FCM-Registrierungstoken und Erfassung von Analysedaten während der nachgelagerten Message-Callback-Verarbeitung . Entwickler, die es vorziehen, Swizzling nicht zu verwenden, können es deaktivieren, indem sie das Flag FirebaseAppDelegateProxyEnabled in der Info.plist-Datei der App hinzufügen und es auf NO (boolescher Wert) setzen. Relevante Bereiche der Leitfäden enthalten Codebeispiele, sowohl mit als auch ohne aktiviertes Methoden-Swizzling.

Fügen Sie Ihrem Apple-Projekt Firebase hinzu

Fügen Sie Ihrem Apple-Projekt Firebase hinzu , falls Sie dies noch nicht getan haben .

Laden Sie Ihren APNs-Authentifizierungsschlüssel hoch

Laden Sie Ihren APNs-Authentifizierungsschlüssel in Firebase hoch. Wenn Sie noch keinen APNs-Authentifizierungsschlüssel haben, stellen Sie sicher, dass Sie einen im Apple Developer Member Center erstellen.

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

  2. Klicken Sie im APNs-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 im Apple Developer Member Center ) und klicken Sie auf Hochladen .

Registrieren Sie sich für Remote-Benachrichtigungen

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

Schnell


UNUserNotificationCenter.current().delegate = self

let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
  options: authOptions,
  completionHandler: { _, _ in }
)

application.registerForRemoteNotifications()

Ziel c


[UNUserNotificationCenter currentNotificationCenter].delegate = self;
UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
    UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
[[UNUserNotificationCenter currentNotificationCenter]
    requestAuthorizationWithOptions:authOptions
    completionHandler:^(BOOL granted, NSError * _Nullable error) {
      // ...
    }];

[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 Weise, wie Apple-Plattformen normalerweise beim App-Start ein APNs-Gerätetoken bereitstellen, stellt FCM ein Registrierungstoken über die Methode messaging:didReceiveRegistrationToken: FIRMessagingDelegate bereit. 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 auf.

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-Delegat-Protokoll und legen Sie delegate Eigenschaft von FIRMessaging fest, nachdem Sie [FIRApp configure] aufgerufen haben. Wenn Ihr Anwendungsdelegat beispielsweise dem Messaging-Delegatenprotokoll entspricht, können Sie den Delegaten für application:didFinishLaunchingWithOptions: auf sich selbst festlegen.

Schnell

Messaging.messaging().delegate = self

Ziel c

[FIRMessaging messaging].delegate = self;

Abrufen des aktuellen Registrierungstokens

Registrierungstoken werden über die Methode messaging:didReceiveRegistrationToken: geliefert. Diese Methode wird in der Regel einmal pro App-Start mit Registrierungstoken aufgerufen. Wenn diese Methode aufgerufen wird, ist dies der ideale Zeitpunkt für Folgendes:

  • 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 token(completion:) abrufen. Ein Nicht-Null-Fehler wird bereitgestellt, wenn der Token-Abruf 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.

Überwachen Sie die Token-Aktualisierung

Um bei jeder Aktualisierung des Tokens benachrichtigt zu werden, geben Sie einen Delegaten an, der dem Messaging-Delegatenprotokoll entspricht. Das folgende Beispiel registriert den Delegaten und fügt die richtige Delegatmethode hinzu:

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 auf eine NSNotification mit dem Namen kFIRMessagingRegistrationTokenRefreshNotification warten, anstatt eine Delegatmethode bereitzustellen. Die Tokeneigenschaft hat immer den aktuellen Tokenwert.

Swizzling deaktiviert: Zuordnung Ihres APNs-Tokens und Registrierungstokens

Wenn Sie die Methodenumschaltung deaktiviert haben oder eine SwiftUI-App erstellen, müssen Sie Ihr APNs-Token explizit dem FCM-Registrierungstoken zuordnen. Implementieren Sie die application(_:didRegisterForRemoteNotificationsWithDeviceToken:) um das APNs-Token abzurufen, und legen Sie dann die Eigenschaft apnsToken von Messaging fest:

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 darauf zugreifen und mit den gleichen Methoden wie bei aktiviertem Swizzling 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 Token-Generierung zur Konfigurationszeit verhindern, indem Sie FCM deaktivieren. Fügen Sie dazu Ihrer Info.plist (nicht Ihrer GoogleService-Info.plist ) einen Metadatenwert hinzu:

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 nach dem Festlegen über App-Neustarts hinweg bestehen.

Nächste Schritte

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