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

Für Apple-Client-Apps können Sie Benachrichtigungen und Datennutzlasten von bis zu 4.000 Byte über die Firebase Cloud Messaging APNs-Schnittstelle 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.

Methodenwechsel in Firebase Cloud Messaging

Das FCM SDK führt Methoden-Swizzling in zwei Schlüsselbereichen durch: Zuordnen Ihres APNs-Tokens zum FCM-Registrierungstoken und Erfassen von Analysedaten während der nachgelagerten Nachrichtenrückrufverarbeitung . Entwickler, die Swizzling lieber nicht verwenden möchten, 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 aktiviertem Methoden-Swizzling.

Fügen Sie Firebase zu Ihrem Apple-Projekt hinzu

Falls noch nicht geschehen, fügen Sie Firebase zu Ihrem Apple-Projekt hinzu .

Laden Sie Ihren APNs-Authentifizierungsschlüssel hoch

Laden Sie Ihren APNs-Authentifizierungsschlüssel auf Firebase hoch. Wenn Sie noch keinen APNs-Authentifizierungsschlüssel haben, erstellen Sie unbedingt einen im Apple Developer Member Center .

  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 unter „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 Fernbenachrichtigungen

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 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 das APNs-Gerätetoken ermöglicht Ihnen dieses Token, gezielte Benachrichtigungen an jede bestimmte Instanz Ihrer App zu 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: von FIRMessagingDelegate bereit. Das FCM SDK ruft beim ersten App-Start und immer dann, wenn das Token aktualisiert oder ungültig gemacht wird, ein neues oder vorhandenes Token ab. 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/neuinstalliert die App
  • Der Benutzer löscht App-Daten.

Legen Sie den Nachrichtendelegierten fest

Um Registrierungstoken zu empfangen, implementieren Sie das Messaging-Delegatprotokoll und legen Sie delegate von FIRMessaging fest, nachdem Sie [FIRApp configure] aufgerufen haben. Wenn Ihr Anwendungsdelegat beispielsweise dem Messaging-Delegatprotokoll 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: übermittelt. Diese Methode wird im Allgemeinen 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 erneut installiert hat.

Sie können das Token direkt mit token(completion:) abrufen. Wenn der Tokenabruf in irgendeiner Weise fehlgeschlagen ist, wird ein Fehler ungleich Null ausgegeben.

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

Mit dieser Methode können Sie jederzeit auf den Token zugreifen, anstatt ihn zu speichern.

Überwachen Sie die Tokenaktualisierung

Um bei jeder Aktualisierung des Tokens benachrichtigt zu werden, stellen Sie einen Delegaten bereit, der dem Messaging-Delegatenprotokoll entspricht. Das folgende Beispiel registriert den Delegaten und fügt die richtige Delegatenmethode 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 Delegate-Methode bereitzustellen. Die Token-Eigenschaft hat immer den aktuellen Token-Wert.

Swizzling deaktiviert: Zuordnung Ihres APNs-Tokens und Registrierungstokens

Wenn Sie das Methoden-Swizzling 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 auf Aktualisierungsereignisse warten, indem Sie dieselben Methoden verwenden wie bei aktiviertem Swizzling.

Verhindern Sie die automatische Initialisierung

Wenn ein FCM-Registrierungstoken generiert wird, lädt die Bibliothek die Kennung und Konfigurationsdaten in Firebase hoch. Wenn Sie zuerst eine explizite Zustimmung der Benutzer einholen möchten, können Sie die Token-Generierung zum Zeitpunkt der Konfiguration verhindern, indem Sie FCM deaktivieren. Fügen Sie dazu einen Metadatenwert zu Ihrer Info.plist hinzu (nicht zu Ihrer GoogleService-Info.plist ):

FirebaseMessagingAutoInitEnabled = NO

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

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 Leitfäden: