Pour les applications clientes Apple, vous pouvez recevoir des charges utiles de notification et de données jusqu'à 4 096 octets via l'interface des APN Firebase Cloud Messaging.
Pour écrire votre code client en Objective-C ou en Swift, nous vous recommandons d'utiliser l'API FIRMessaging. L'exemple de démarrage rapide fournit un exemple de code pour les deux langages.
Mélange de méthodes dans Firebase Cloud Messaging
Le SDK FCM effectue un échange de méthode dans deux domaines clés : la mise en correspondance de votre jeton APN avec le jeton d'enregistrement FCM et la capture de données analytiques lors de la gestion du rappel de message en aval.
Les développeurs qui préfèrent ne pas utiliser le forçage de type 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 sections pertinentes des guides fournissent des exemples de code, avec et sans le mélange de méthodes activé.
Ajouter Firebase à votre projet Apple
Si ce n'est pas encore fait, ajoutez Firebase à votre projet Apple.
Importer votre clé d'authentification APNs
Importez votre clé d'authentification d'APN dans Firebase. Si vous ne possédez pas encore de clé d'authentification d'APN, veillez à en créer une dans le Centre des membres pour les développeurs Apple.
-
Dans la console Firebase, sélectionnez l'icône en forme de roue dentée, Paramètres du projet, puis l'onglet Cloud Messaging.
-
Dans Clés d'authentification d'APN, sous Configuration de l'application iOS, cliquez sur le bouton Importer.
-
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 le Apple Developer Member Center) et cliquez sur Importer.
S'inscrire pour recevoir des notifications à distance
Au démarrage ou au point souhaité de votre flux d'application, enregistrez votre application pour les notifications à distance. AppelezregisterForRemoteNotifications
comme indiqué :
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 au démarrage de l'application. Comme le jeton d'appareil APN, 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 APN 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 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 du délégué de messagerie et définissez la propriété delegate
de FIRMessaging
après avoir appelé [FIRApp configure]
.
Par exemple, si le délégué de votre 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ération du jeton d'enregistrement actuel
Les jetons d'enregistrement sont envoyés via la méthode messaging:didReceiveRegistrationToken:
. Cette méthode est généralement appelée une fois par démarrage de l'application avec le 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'application.
- Abonnez le jeton d'enregistrement aux sujets. Cette opération 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(completion:). Une erreur non nulle est fournie si la récupération du jeton a échoué.
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 du jeton
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 de délégué 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 de délégué. La propriété de jeton contient toujours la valeur de jeton actuelle.
Swizzling désactivé: mappage de votre jeton APN et de votre jeton d'enregistrement
Si vous avez désactivé le forçage de méthode ou que vous créez une application SwiftUI, vous devrez mapper explicitement votre jeton APN au jeton d'enregistrement FCM. Implémentez la méthode application(_:didRegisterForRemoteNotificationsWithDeviceToken:)
pour récupérer le jeton APN, 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 à l'aide des mêmes méthodes que lorsque le forçage de l'ordre des éléments est activé.
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 autorisation 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'environnement 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 que vous avez configuré votre client Apple, vous pouvez ajouter la gestion des messages et d'autres comportements plus avancés à votre application. Pour en savoir plus, consultez ces guides:
- Recevoir des messages dans une application Apple
- Envoyer des messages de discussion
- Envoyer aux groupes d'appareils