Configurer une application client Firebase Cloud Messaging sur les plates-formes Apple

Pour les applications client Apple, vous pouvez recevoir des notifications et des charges utiles de données jusqu'à 4 000 octets via l'interface APN Firebase Cloud Messaging.

Pour écrire votre code client en Objective-C ou Swift, nous vous recommandons d'utiliser l' API FIRMessaging . L' exemple de démarrage rapide fournit un exemple de code pour les deux langues.

Méthode tourbillonnante dans Firebase Cloud Messaging

Le SDK FCM effectue un swizzling de méthodes dans deux domaines clés : mapper votre jeton APNs au jeton d'enregistrement FCM et capturer les données d'analyse lors de la gestion des rappels de messages en aval . Les développeurs qui préfèrent ne pas utiliser le swizzling peuvent le désactiver en ajoutant l'indicateur FirebaseAppDelegateProxyEnabled dans le fichier Info.plist de l'application et en le définissant sur NO (valeur booléenne). Les zones pertinentes des guides fournissent des exemples de code, avec et sans méthode swizzling activée.

Ajoutez Firebase à votre projet Apple

Si vous ne l'avez pas déjà fait, ajoutez Firebase à votre projet Apple .

Téléchargez votre clé d'authentification APNs

Téléchargez votre clé d'authentification APN sur Firebase. Si vous ne disposez pas déjà d'une clé d'authentification APNs, assurez-vous d'en créer une dans le Centre des membres des développeurs Apple .

  1. Dans votre projet dans la console Firebase, sélectionnez l'icône d'engrenage, sélectionnez Paramètres du projet , puis sélectionnez l'onglet Messagerie cloud .

  2. Dans Clé d'authentification APN sous Configuration de l'application iOS , cliquez sur le bouton Télécharger .

  3. Accédez à l'emplacement où vous avez enregistré votre clé, sélectionnez-la et cliquez sur Ouvrir . Ajoutez l'ID de clé pour la clé (disponible dans le Centre des membres des développeurs Apple ) et cliquez sur Télécharger .

Inscrivez-vous aux notifications à distance

Soit au démarrage, soit au moment souhaité dans votre flux de candidature, enregistrez votre application pour les notifications à distance. Appelez registerForRemoteNotifications comme indiqué :

Rapide


UNUserNotificationCenter.current().delegate = self

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

application.registerForRemoteNotifications()

Objectif c


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

[application registerForRemoteNotifications];

Accéder au jeton d'inscription

Par défaut, le SDK FCM génère un jeton d'enregistrement pour l'instance d'application cliente au lancement de l'application. Semblable au jeton de périphérique APNs, ce jeton vous permet d'envoyer des notifications ciblées à n'importe quelle instance particulière de votre application.

De la même manière que les plates-formes Apple fournissent généralement un jeton de périphérique APNs au démarrage de l'application, FCM fournit un jeton d'enregistrement via la méthode messaging:didReceiveRegistrationToken: de FIRMessagingDelegate . Le SDK FCM récupère un jeton nouveau ou existant lors du lancement initial de l'application et chaque fois que le jeton est mis à jour ou invalidé. Dans tous les cas, le SDK FCM appelle messaging:didReceiveRegistrationToken: avec un jeton valide.

Le jeton d'enregistrement peut changer lorsque :

  • L'application est restaurée sur un nouvel appareil
  • L'utilisateur désinstalle/réinstalle l'application
  • L'utilisateur efface les données de l'application.

Définir le délégué de messagerie

Pour recevoir des jetons d'enregistrement, implémentez le protocole délégué de messagerie et définissez la propriété delegate de FIRMessaging après avoir appelé [FIRApp configure] . Par exemple, si votre délégué d’application est conforme au protocole de délégué de messagerie, vous pouvez définir le délégué sur application:didFinishLaunchingWithOptions: sur lui-même.

Rapide

Messaging.messaging().delegate = self

Objectif c

[FIRMessaging messaging].delegate = self;

Récupérer le jeton d'enregistrement actuel

Les jetons d'enregistrement sont délivrés via la méthode messaging:didReceiveRegistrationToken: . Cette méthode est généralement appelée une fois par démarrage d'application avec un jeton d'enregistrement. Lorsque cette méthode est appelée, c'est le moment idéal pour :

  • Si le jeton d'enregistrement est nouveau, envoyez-le à votre serveur d'applications.
  • Abonnez le jeton d'inscription aux sujets. Ceci n'est requis que pour les nouveaux abonnements ou pour les situations dans lesquelles l'utilisateur a réinstallé l'application.

Vous pouvez récupérer le jeton directement en utilisant token(completion:) . Une erreur non nulle est fournie si la récupération du jeton a échoué de quelque manière que ce soit.

Rapide

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

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

Vous pouvez utiliser cette méthode à tout moment pour accéder au jeton au lieu de le stocker.

Actualisation du jeton de surveillance

Pour être averti chaque fois que le jeton est mis à jour, fournissez un délégué conforme au protocole de délégué de messagerie. L'exemple suivant enregistre le délégué et ajoute la méthode délégué appropriée :

Rapide

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

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

Vous pouvez également écouter une NSNotification nommée kFIRMessagingRegistrationTokenRefreshNotification plutôt que de fournir une méthode déléguée. La propriété token a toujours la valeur actuelle du jeton.

Swizzling désactivé : mappage de votre jeton APNs et de votre jeton d'enregistrement

Si vous avez désactivé le swizzling de méthode ou si vous créez une application SwiftUI, vous devrez mapper explicitement votre jeton APNs au jeton d'enregistrement FCM. Implémentez la application(_:didRegisterForRemoteNotificationsWithDeviceToken:) pour récupérer le jeton APNs, puis définissez la propriété apnsToken de Messaging :

Rapide

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

Objectif c

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

Une fois le jeton d'enregistrement FCM généré, vous pouvez y accéder et écouter les événements d'actualisation en utilisant les mêmes méthodes qu'avec le swizzling activé.

Empêcher l'initialisation automatique

Lorsqu'un jeton d'enregistrement FCM est généré, la bibliothèque télécharge l'identifiant et les données de configuration sur Firebase. Si vous souhaitez d'abord obtenir un consentement explicite des utilisateurs, vous pouvez empêcher la génération de jetons au moment de la configuration en désactivant FCM. Pour ce faire, ajoutez une valeur de métadonnées à votre Info.plist (pas à votre GoogleService-Info.plist ) :

FirebaseMessagingAutoInitEnabled = NO

Pour réactiver FCM, vous pouvez effectuer un appel d'exécution :

Rapide

Messaging.messaging().autoInitEnabled = true

Objectif c

[FIRMessaging messaging].autoInitEnabled = YES;

Cette valeur persiste lors des redémarrages de l'application une fois définie.

Prochaines étapes

Après avoir configuré votre client Apple, vous êtes prêt à ajouter la gestion des messages et d'autres comportements plus avancés à votre application. Consultez ces guides pour plus d’informations :