Cette page a été traduite par l'API Cloud Translation.
Switch to English

Configurer une application cliente Firebase Cloud Messaging sur iOS

Pour les applications clientes iOS, vous pouvez recevoir des notifications et des charges utiles de données allant jusqu'à 4 Ko via l'interface APN 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 langues.

Méthode swizzling dans Firebase Cloud Messaging

Le SDK FCM effectue un basculement de méthode dans deux domaines clés: le mappage de votre jeton APN avec le jeton d'enregistrement FCM et la capture des données d'analyse pendant 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 le swizzling de méthode activé.

Ajoutez Firebase à votre projet iOS

Cette section couvre les tâches que vous avez peut-être effectuées si vous avez déjà activé d'autres fonctionnalités Firebase pour votre application. Pour FCM en particulier, vous devrez télécharger votre clé d'authentification APN et vous inscrire aux notifications à distance .

Conditions préalables

  • Installez ce qui suit:

    • Xcode 11.0 ou version ultérieure
    • CocoaPods 1.4.0 ou version ultérieure
  • Assurez-vous que votre projet répond à ces exigences:

    • Votre projet doit cibler iOS 8 ou une version ultérieure.
  • Configurez un appareil iOS physique pour exécuter votre application et effectuez ces tâches:

    • Obtenez une clé d'authentification Apple Push Notification pour votre compte de développeur Apple .
    • Activez les notifications push dans XCode sous App> Capabilities .

Si vous n'avez pas encore de projet Xcode et que vous souhaitez simplement essayer un produit Firebase, vous pouvez télécharger l'un de nos exemples de démarrage rapide .

Créer un projet Firebase

Avant de pouvoir ajouter Firebase à votre application iOS, vous devez créer un projet Firebase pour vous connecter à votre application iOS. Consultez Comprendre les projets Firebase pour en savoir plus sur les projets Firebase.

Enregistrez votre application avec Firebase

Une fois que vous avez un projet Firebase, vous pouvez y ajouter votre application iOS.

Consultez Comprendre les projets Firebase pour en savoir plus sur les bonnes pratiques et les considérations relatives à l'ajout d'applications à un projet Firebase, notamment sur la gestion de plusieurs variantes de build.

  1. Accédez à la console Firebase .

  2. Au centre de la page de du projet, cliquez sur l'icône iOS ( ) pour lancer le workflow de configuration.

    Si vous avez déjà ajouté une application à votre projet Firebase, cliquez sur Ajouter une application pour afficher les options de la plate-forme.

  3. Entrez l'ID de groupe de votre application dans le champ ID de groupe iOS .

  4. (Facultatif) Saisissez d'autres informations sur l'application: le pseudo de l' application et l' identifiant de l'App Store

  5. Cliquez sur Enregistrer l'application .

Ajouter un fichier de configuration Firebase

  1. Cliquez sur Télécharger GoogleService-Info.plist pour obtenir votre fichier de configuration Firebase iOS ( GoogleService-Info.plist ).

  2. Déplacez votre fichier de configuration à la racine de votre projet Xcode. Si vous y êtes invité, sélectionnez pour ajouter le fichier de configuration à toutes les cibles.

Si vous avez plusieurs ID de bundle dans votre projet, vous devez associer chaque ID de bundle à une application enregistrée dans la console Firebase afin que chaque application puisse avoir son propre fichier GoogleService-Info.plist .

Ajouter des SDK Firebase à votre application

Nous vous recommandons d'utiliser CocoaPods pour installer les bibliothèques Firebase. Cependant, si vous préférez ne pas utiliser CocoaPods, vous pouvez intégrer directement les frameworks SDK ou utiliser la version bêta de Swift Package Manager .

Utilisez-vous l'un des exemples de démarrage rapide ? Le projet Xcode et Podfile (avec pods) sont déjà présents, mais vous devrez toujours ajouter votre fichier de configuration Firebase et installer les pods.

  1. Créez un Podfile si vous n'en avez pas déjà un:

    cd your-project-directory
    pod init
  2. À votre Podfile, ajoutez les pods Firebase que vous souhaitez utiliser dans votre application.

    Vous pouvez ajouter l'un des produits Firebase pris en charge à votre application iOS.

    Pour une expérience optimale avec Firebase Cloud Messaging, nous vous recommandons d' activer Google Analytics dans votre projet. De plus, dans le cadre de la configuration d'Analytics, vous devez ajouter le SDK Firebase pour Analytics à votre application.

    Analytics activé

    # Add the Firebase pod for Google Analytics
    pod 'Firebase/Analytics'
    # Add the pod for Firebase Cloud Messaging pod 'Firebase/Messaging'

    Analytics non activé

    # Add the pod for Firebase Cloud Messaging
    pod 'Firebase/Messaging'
  3. Installez les pods, puis ouvrez votre fichier .xcworkspace pour voir le projet dans Xcode:

    pod install
    open your-project.xcworkspace

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

Téléchargez votre clé d'authentification APN sur Firebase. Si vous ne disposez pas déjà d'une clé d'authentification APN, consultez Configuration des APN avec FCM .

  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 Cloud Messaging .

  2. Dans la clé d'authentification APN sous la 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-le et cliquez sur Ouvrir . Ajoutez l'ID de clé de la clé (disponible dans Certificats, identifiants et profils dans le centre des membres Apple Developer ) et cliquez sur Télécharger .

Initialisez Firebase dans votre application

Vous devrez ajouter le code d'initialisation Firebase à votre application. Importez le module Firebase et configurez une instance partagée comme indiqué:

  1. Importez le module Firebase dans votre UIApplicationDelegate :

    Rapide

    import Firebase

    Objectif c

    @import Firebase;
  2. Configurez une instance partagée FirebaseApp , généralement dans l'application de votre application:didFinishLaunchingWithOptions: method:

    Rapide

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Objectif c

    // Use Firebase library to configure APIs
    [FIRApp configure];

Inscrivez-vous aux notifications à distance

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

Rapide

if #available(iOS 10.0, *) {
  // For iOS 10 display notification (sent via APNS)
  UNUserNotificationCenter.current().delegate = self

  let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
  UNUserNotificationCenter.current().requestAuthorization(
    options: authOptions,
    completionHandler: {_, _ in })
} else {
  let settings: UIUserNotificationSettings =
  UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
  application.registerUserNotificationSettings(settings)
}

application.registerForRemoteNotifications()

Objectif c

if ([UNUserNotificationCenter class] != nil) {
  // iOS 10 or later
  // For iOS 10 display notification (sent via APNS)
  [UNUserNotificationCenter currentNotificationCenter].delegate = self;
  UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
      UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
  [[UNUserNotificationCenter currentNotificationCenter]
      requestAuthorizationWithOptions:authOptions
      completionHandler:^(BOOL granted, NSError * _Nullable error) {
        // ...
      }];
} else {
  // iOS 10 notifications aren't available; fall back to iOS 8-9 notifications.
  UIUserNotificationType allNotificationTypes =
  (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
  UIUserNotificationSettings *settings =
  [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
  [application registerUserNotificationSettings:settings];
}

[application registerForRemoteNotifications];

Accéder au jeton d'inscription

Par défaut, le SDK FCM génère un jeton d'inscription pour l'instance d'application cliente au 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 façon que iOS fournit généralement un dispositif de jeton APNs au démarrage de l' application, la FCM fournit un enregistrement jeton via FIRMessagingDelegate de messaging:didReceiveRegistrationToken: méthode. 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 la 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, mettre en œuvre le protocole de délégué de messagerie et définir FIRMessaging du delegate des biens 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 l' application:didFinishLaunchingWithOptions: sur lui-même.

Rapide

Messaging.messaging().delegate = self

Objectif c

[FIRMessaging messaging].delegate = self;

Récupération du jeton d'enregistrement actuel

Les jetons d'inscription sont délivrés via la méthode de messaging:didReceiveRegistrationToken: Cette méthode est généralement appelée une fois par début 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. Cela n'est requis que pour les nouveaux abonnements ou pour les situations où l'utilisateur a réinstallé l'application.

Vous pouvez récupérer le jeton directement à l'aide de instanceIDWithHandler:. Ce rappel fournit un InstanceIDResult , qui contient le jeton. Une erreur non nulle est fournie si la récupération de l'ID d'instance a échoué de quelque manière que ce soit.

Rapide

InstanceID.instanceID().instanceID { (result, error) in
  if let error = error {
    print("Error fetching remote instance ID: \(error)")
  } else if let result = result {
    print("Remote instance ID token: \(result.token)")
    self.instanceIDTokenMessage.text  = "Remote InstanceID token: \(result.token)"
  }
}

Objectif c

[[FIRInstanceID instanceID] instanceIDWithHandler:^(FIRInstanceIDResult * _Nullable result,
                                                    NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"Error fetching remote instance ID: %@", error);
  } else {
    NSLog(@"Remote instance ID token: %@", result.token);
    NSString* message =
      [NSString stringWithFormat:@"Remote InstanceID token: %@", result.token];
    self.instanceIDTokenMessage.text = message;
  }
}];

En règle générale, le jeton est disponible localement, cette méthode n'ouvre donc pas de connexion réseau. 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 notifié 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:

Rapide

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
  print("Firebase registration token: \(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 token.

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

Si vous avez désactivé le swizzling de méthode, vous devrez mapper explicitement votre jeton APN avec le jeton d'enregistrement FCM. Remplacez les méthodes didRegisterForRemoteNotificationsWithDeviceToken pour récupérer le jeton FIRMessaging , puis définissez la propriété APNSToken :

Rapide

func application(application: UIApplication,
                 didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
  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 que lorsque le swizzling est activé.

Importer les jetons APN des utilisateurs existants

Si vous disposez d'une base d'utilisateurs existante que vous souhaitez intégrer à une application cliente FCM, utilisez l'API batchImport fournie par l'ID d'instance. Avec cette API, vous pouvez importer en bloc des jetons APN iOS existants dans FCM, en les mappant à de nouveaux jetons d'enregistrement valides.

Empêcher l'initialisation automatique

FCM génère un ID d'instance, qui est utilisé comme jeton d'enregistrement dans FCM. Lorsqu'un ID d'instance est généré, la bibliothèque télécharge l'identifiant et les données de configuration sur Firebase.Si vous souhaitez obtenir un opt-in explicite avant d'utiliser l'ID d'instance, vous pouvez empêcher la génération 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

Une fois que vous avez configuré votre client iOS, 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: