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 jusqu'à 4 000 octets 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 QuickStart fournit un exemple de code pour les deux langues.

Pour activer l'envoi de notifications push via les APN, vous avez besoin :

  • Une clé d'authentification Apple Push Notification pour votre compte Apple Developer. Firebase Cloud Messaging utilise ce jeton pour envoyer des notifications push à l'application identifiée par l'ID d'application.

  • Un profil d' approvisionnement pour cet ID App avec les notifications push activé . De plus, pour tester votre application en cours de développement, vous avez besoin d'un profil d'approvisionnement pour le développement afin d'autoriser vos appareils à exécuter une application qui n'est pas encore publiée sur l'App Store.

Vous créez aussi bien dans le Apple Developer Member Center .

Méthode swizzling dans Firebase Cloud Messaging

Le SDK FCM swizzling exécute la méthode dans deux domaines clés: cartographie votre jeton APNs à l'enregistrement de la FCM jeton et la saisie des données d'analyse lors de la manipulation de rappel de message en aval . Les développeurs qui préfèrent ne pas utiliser swizzling peut le désactiver en ajoutant le drapeau FirebaseAppDelegateProxyEnabled dans le fichier Info.plist de l'application et la mise à NO (valeur booléenne). Les zones pertinentes des guides fournissent des exemples de code, avec et sans le swizzling de méthode activé.

Ajouter 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 la FCM précisément, vous devrez télécharger votre clé d'authentification APNs et inscrivez -vous pour les notifications à distance .

Conditions préalables

  • Installez les éléments suivants :

    • Xcode 12.2 ou version ultérieure
    • CocoaPods 1.10.0 ou version ultérieure
  • Assurez-vous que votre projet répond aux exigences suivantes :

    • Votre projet doit cibler iOS 10 ou une version ultérieure.
  • Mettre en place un dispositif iOS physique pour exécuter votre application, et effectuez les tâches suivantes :

    • Obtenir un Apple Push Notification clé d' authentification pour votre compte Apple Developer .
    • Activer les notifications Push dans XCode sous App> Capacités.

Si vous ne possédez pas déjà un projet Xcode et que vous voulez juste essayer un produit Firebase, vous pouvez télécharger un de nos échantillons 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. Visitez Comprendre Firebase projets 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.

Visitez Comprendre Firebase projets pour en savoir plus sur les meilleures pratiques et considérations pour ajouter des applications à un projet Firebase, y compris la façon de traiter les variantes multiples de construction.

  1. Allez à la console Firebase .

  2. Au centre de la page d'aperçu du projet, cliquez sur l'icône iOS ( ) pour lancer le flux de travail de configuration.

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

  3. Entrez ID paquet de votre application dans le paquet iOS champ ID.

  4. (Facultatif) Entrez les autres informations de l' application: surnom App et App ID Store.

  5. Cliquez sur l' application de vous inscrire.

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 paquet dans votre projet, vous devez associer chaque ID bundle avec une application enregistrée dans la console Firebase afin que chaque application peut avoir son propre GoogleService-Info.plist fichier.

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 les cadres du SDK directement ou utiliser Package Swift Gestionnaire place.

Utilisez - vous l' un des échantillons de démarrage rapide ? Le projet Xcode et PODFILE (avec les gousses) sont déjà présents, mais vous aurez besoin encore ajouter votre fichier de configuration Firebase et installer les gousses.

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

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

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

    Pour une expérience optimale avec Firebase - Cloud Messaging, nous vous recommandons de permettre à 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'
    
    # For Analytics without IDFA collection capability, use this pod instead
    # pod ‘Firebase/AnalyticsWithoutAdIdSupport’
    
    # Add the pod for Firebase Cloud Messaging
    pod 'Firebase/Messaging'

    En savoir plus sur IDFA, le dispositif identifiant le niveau de la publicité, dans Apple la vie privée des utilisateurs et l' utilisation des données et applications de suivi de transparence documentation.

    Analytics non activé

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

    pod install
    open your-project.xcworkspace

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

Téléchargez votre clé d'authentification APNs sur Firebase. Si vous ne possédez pas déjà une clé d'authentification APNs, assurez - vous de créer un dans le Apple Developer Member Center .

  1. A l' intérieur de votre projet dans la console Firebase, sélectionnez l'icône d'engrenage, sélectionnez Paramètres du projet, puis sélectionnez l'onglet Nuage de messagerie.

  2. Dans clé d'authentification APNs sous la configuration iOS app, cliquez sur le bouton Ajouter.

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

Initialiser 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. Importer le module Firebase dans votre UIApplicationDelegate :

    Rapide

    import Firebase

    Objectif c

    @import Firebase;
  2. Configurer une FirebaseApp instance partagée, généralement dans votre application application:didFinishLaunchingWithOptions: méthode:

    Rapide

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

    Objectif c

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

S'inscrire aux notifications à distance

Soit au démarrage, soit au point souhaité dans le flux de votre application, enregistrez votre application pour les notifications à distance. Appel registerForRemoteNotifications 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'enregistrement 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 FCM SDK 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é de demande est conforme au protocole délégué de messagerie, vous pouvez définir le délégué sur application:didFinishLaunchingWithOptions: elle - même.

Rapide

Messaging.messaging().delegate = self

Objectif c

[FIRMessaging messaging].delegate = self;

Récupérer le jeton d'enregistrement actuel

Jetons d'inscription sont livrés par la méthode messaging:didReceiveRegistrationToken: . Cette méthode est appelée généralement une fois par démarrage d'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'applications.
  • Abonnez le jeton d'inscription aux sujets. Ceci 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 jetons (fin :) . 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.

Surveiller l'actualisation du jeton

Pour être averti à chaque mise à jour du jeton, fournissez un délégué conforme au protocole de délégation 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: \(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 écouter un NSNotification nommé kFIRMessagingRegistrationTokenRefreshNotification plutôt que de fournir une méthode de délégué. 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, vous devrez mapper explicitement votre jeton APNs au jeton d'enregistrement FCM. Remplacer les méthodes didRegisterForRemoteNotificationsWithDeviceToken pour récupérer les APNs jeton, puis définissez FIRMessaging de APNSToken propriété:

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 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 une acceptation 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 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 :