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

Pour les applications clientes Apple, vous pouvez recevoir des notifications et des charges utiles de données pouvant atteindre 4 096 octets via l'interface APNs de 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 langages.

Modélisation des méthodes dans Firebase Cloud Messaging

Le SDK FCM effectue un balayage rapide des méthodes dans deux domaines clés : le mappage de votre jeton APNs avec le jeton d'enregistrement FCM et la capture des données d'analyse lors du traitement du rappel des messages en aval. Les développeurs qui préfèrent ne pas l'utiliser peuvent le désactiver en ajoutant l'indicateur FirebaseAppDelegateProxyEnabled au 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 mode swizzling activé.

Ajouter Firebase à votre projet Apple

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

Importez votre clé d'authentification APNs

Importez votre clé d'authentification APNs dans Firebase. Si vous ne possédez pas encore de clé d'authentification APNs, veillez à en créer une dans l'Apple Developer Member Center.

  1. Dans votre projet, dans la console Firebase, cliquez sur l'icône en forme de roue dentée, puis sur Paramètres du projet et sélectionnez l'onglet Cloud Messaging.

  2. Dans Clé d'authentification APNs, sous Configuration de l'application iOS, cliquez sur le bouton Importer.

  3. Accédez à l'emplacement où vous avez enregistré votre clé, sélectionnez-la, puis cliquez sur Ouvrir. Ajoutez l'ID de la clé (disponible dans l' Apple Developer Member Center), puis cliquez sur Importer.

S'inscrire aux notifications à distance

Au démarrage ou au moment souhaité du flux de votre application, enregistrez votre application pour les notifications à distance. Appelez registerForRemoteNotifications comme indiqué ci-dessous :

Swift


UNUserNotificationCenter.current().delegate = self

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

application.registerForRemoteNotifications()

Objective-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'enregistrement

Par défaut, le SDK FCM génère un jeton d'enregistrement pour l'instance de l'application cliente lors du lancement de l'application. Semblable au jeton d'appareil 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 d'appareil 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 qu'il 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 dans les cas suivants:

  • 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 de 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.

Swift

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

Récupérer le jeton d'enregistrement actuel

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

  • S'il s'agit d'un nouveau jeton, envoyez-le à votre serveur d'application.
  • Abonner le jeton d'enregistrement aux sujets. Cette étape n'est requise que pour les nouveaux abonnements ou lorsque l'utilisateur a réinstallé l'application.

Vous pouvez récupérer le jeton directement à l'aide de token(complete:). Une erreur non nulle est générée en cas d'échec de la récupération du jeton.

Swift

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

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

Surveiller l'actualisation des jetons

Pour être averti chaque fois que le jeton est mis à jour, indiquez 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ée appropriée:

Swift

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

Objective-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 un NSNotification nommé kFIRMessagingRegistrationTokenRefreshNotification au lieu de fournir une méthode déléguée. La propriété de jeton 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é la méthode swizzling ou si vous créez une application SwiftUI, vous devez explicitement mapper votre jeton APNs avec le jeton d'enregistrement FCM. Implémentez la méthode application(_:didRegisterForRemoteNotificationsWithDeviceToken:) pour récupérer le jeton APNs, puis définissez la propriété apnsToken de Messaging:

Swift

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

Objective-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 que lorsque la fonctionnalité swizzling est activée.

Empêcher l'initialisation automatique

Lorsqu'un jeton d'enregistrement FCM est généré, la bibliothèque importe l'identifiant et les données de configuration dans Firebase. Si vous souhaitez d'abord obtenir une activation explicite de la part 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 (et non à votre GoogleService-Info.plist):

FirebaseMessagingAutoInitEnabled = NO

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

Swift

Messaging.messaging().autoInitEnabled = true

Objective-C

[FIRMessaging messaging].autoInitEnabled = YES;

Une fois définie, cette valeur persiste lors des redémarrages de l'application.

Étapes suivantes

Une fois votre client Apple configuré, 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: