1. Introduction
Dernière mise à jour:06/01/2020
Firebase Cloud Messaging (FCM) est une solution de messagerie multiplate-forme qui vous permet d'envoyer des messages de manière fiable et sans frais.
FCM vous permet d'informer une application cliente que de nouveaux e-mails ou d'autres données peuvent être synchronisés. Vous pouvez envoyer des messages de notification pour réengager et fidéliser les utilisateurs. Pour des cas d'utilisation tels que la messagerie instantanée, un message peut transférer une charge utile allant jusqu'à 4 Ko vers une application cliente.
Comment ça marche ?
Une implémentation FCM comprend deux composants principaux pour l'envoi et la réception:
- Un environnement de confiance tel que Cloud Functions for Firebase ou un serveur d'applications sur lequel créer, cibler et envoyer des messages
- Une application cliente iOS, Android ou Web (JavaScript) qui reçoit des messages via le service de transport spécifique à la plate-forme correspondant
Présentation de l'architecture FCM
FCM s'appuie sur l'ensemble de composants suivant pour créer, transporter et recevoir des messages:
- Outils permettant de rédiger ou de créer des invitations à discuter L'outil de création de notifications fournit une option basée sur une IUG pour créer des demandes de notification. Pour bénéficier d'une automatisation et d'une compatibilité totales pour tous les types de messages, vous devez créer des invitations à discuter dans un environnement de serveur de confiance compatible avec le SDK Firebase Admin ou les protocoles de serveur FCM. Il peut s'agir de Cloud Functions for Firebase, de Google App Engine ou de votre propre serveur d'applications.
- Le backend FCM, qui (entre autres fonctions) accepte les demandes de messages, effectue une distribution ramifiée des messages via des sujets et génère des métadonnées de message telles que leur ID.
- Une couche de transport au niveau de la plate-forme, qui achemine le message vers l'appareil ciblé, gère la distribution des messages et applique la configuration spécifique à la plate-forme, le cas échéant. Cette couche transport comprend:
- Couche de transport Android (ATL) pour les appareils Android avec les services Google Play
- Service de notifications push Apple (APN) pour les appareils iOS
- Protocole Web push pour les applications Web
- SDK FCM sur l'appareil de l'utilisateur, où la notification est affichée ou le message est géré en fonction de l'état de premier plan/d'arrière-plan de l'application et de toute logique d'application pertinente.
Objectifs de l'atelier
Dans cet atelier de programmation, vous allez ajouter une notification push à un exemple d'application iOS avec FCM.
Points abordés
- Abonner un utilisateur aux messages push et le désabonner de celui-ci
- Gérer les messages push entrants
- Afficher une notification
- Répondre aux clics sur les notifications
Prérequis
- Xcode 11.0 ou version ultérieure
- CocoaPods 1.9.0 ou version ultérieure
- Compte de développeur Apple
- Un appareil iOS physique pour exécuter votre application
- Connaissances de base sur Swift
2. Configuration
Télécharger l'exemple de code
Dans cet atelier de programmation, vous allez créer votre propre application de test. Toutefois, si vous souhaitez voir et exécuter l'application exemple existante, vous pouvez télécharger l'exemple de code du guide de démarrage rapide.
Il existe deux façons d'obtenir l'échantillon:
- Clonez le dépôt Git :
$ git clone https://github.com/firebase/quickstart-ios.git
- Téléchargez le fichier ZIP:
Si vous téléchargez la source en tant que fichier ZIP, vous obtiendrez un dossier racine quickstart-ios
.
Créer une application
Créez votre propre application de test en suivant les étapes ci-dessous (dans XCode 12.3):
- Ouvrez XCode, puis sélectionnez Create a new Xcode project (Créer un projet Xcode).
- Sélectionnez App (Application), puis cliquez sur Next (Suivant).
- Indiquez le nom du produit (par exemple, MessagingExample)
- Sélectionnez Équipe (si vous n'avez pas créé d'équipe, configurez-la dans le compte de développeur Apple).
- Indiquez l'identifiant de l'organisation (par exemple,
com.
your-name
) - Saisissez un identifiant de bundle (par exemple,
com.
your-name
.MessagingExample
, il doit être unique parmi toutes les applications iOS). - Sélectionnez Storyboard dans le menu déroulant Interface.
- Sélectionnez Délégué d'application UIKit dans le menu déroulant Cycle de vie.
- Dans le champ Language (Langue), sélectionnez Swift.
- Cliquez sur Suivant.
Vous aurez besoin de l'identifiant de bundle lorsque vous créerez une clé APN et enregistrerez votre application dans votre projet Firebase.
3. Configuration des APNs
Créer la clé d'authentification
Cette section explique comment générer une clé d'authentification pour un ID d'application compatible avec les notifications push. Si vous disposez déjà d'une clé, vous pouvez l'utiliser au lieu d'en générer une nouvelle.
Pour créer une clé d'authentification:
- Dans votre compte de développeur, accédez à Certificates, Identifiers & Profils, puis accédez à Clés.
- Cliquez sur le bouton Ajouter (+) dans le coin supérieur droit.
- Saisissez une description pour la clé d'authentification APNs
- Sous "Services de clés", cochez la case "APN", puis cliquez sur Continuer.
- Cliquez sur Register (S'inscrire), puis sur Download (Télécharger). Conservez votre clé en lieu sûr. Il s'agit d'un téléchargement unique et la clé ne peut pas être récupérée ultérieurement.
Créer un ID d'application
Un ID d'application est un identifiant qui identifie une application de manière unique. Par convention, elle est représentée par un domaine inversé.
- Accédez à l'Apple Developer Member Center et connectez-vous.
- Accédez à Certificats, identifiants et profils.
- Accédez à Identifiants.
- Cliquez sur le bouton + pour créer un ID d'application.
- Sélectionnez la case d'option ID des applications, puis cliquez sur Continuer.
- Sélectionnez Application, puis cliquez sur Continuer.
- Pour créer l'ID d'application:
- Saisissez un nom pour l'ID de votre application.
- Saisissez un ID d'équipe. Cette valeur doit correspondre à l'ID d'équipe de l'onglet "Membres".
- Dans la section Suffixe d'ID d'application, sélectionnez ID d'application explicite, puis saisissez votre ID de bundle.
- Dans la section Services d'applications, assurez-vous que l'option Notifications push est cochée.
- Cliquez sur Continue (Continuer) et vérifiez que votre saisie est correcte:
- La valeur de l'identifiant doit correspondre à la concaténation des valeurs de l'ID d'équipe et de l'ID de bundle
- Les notifications push doivent être configurables.
- Cliquez sur Enregistrer pour créer l'ID d'application.
Créer le profil
Pour tester votre application pendant le développement, vous avez besoin d'un profil de développement afin d'autoriser vos appareils à exécuter une application qui n'est pas encore publiée sur l'App Store.
- Accédez à l'Apple Developer Member Center et connectez-vous.
- Accédez à Certificats, identifiants et profils.
- Dans le menu déroulant en haut à gauche, sélectionnez iOS, tvOS, watchOS si ce n'est pas déjà fait, puis accédez à Profiles (Profils).
- Cliquez sur le bouton + pour créer un profil.
- Sélectionnez iOS App Development (Développement d'applications iOS) comme type de profil de provisionnement, puis cliquez sur Continue (Continuer).
- Dans le menu déroulant, sélectionnez l'ID d'application que vous souhaitez utiliser, puis cliquez sur Continuer.
- Sélectionnez le certificat de développement iOS associé à l'ID d'application que vous avez choisi à l'étape précédente, puis cliquez sur Continuer.
- Sélectionnez les appareils iOS que vous souhaitez inclure dans le profil de provisionnement, puis cliquez sur Continuer. Veillez à sélectionner tous les appareils que vous souhaitez utiliser pour vos tests.
- Attribuez un nom à ce profil de gestion des comptes (par exemple, MessagingExampleProfile), puis cliquez sur Générer.
- Cliquez sur Download (Télécharger) pour enregistrer le profil de provisionnement sur votre Mac.
- Double-cliquez sur le fichier de profil de provisionnement pour l'installer.
4. Ajouter Firebase à votre projet iOS
Créer un projet Firebase
Avant d'ajouter Firebase à votre application iOS, vous devez créer un projet Firebase afin de l'associer à votre application iOS. Pour en savoir plus sur les projets Firebase, consultez Comprendre les projets Firebase.
- Dans la console Firebase, cliquez sur Ajouter un projet, puis sélectionnez ou saisissez un nom de projet.
Si vous disposez déjà d'un projet Google Cloud Platform (GCP), vous pouvez le sélectionner dans le menu déroulant pour y ajouter des ressources Firebase.
- (Facultatif) Si vous créez un projet, vous pouvez modifier son ID de projet.
Firebase attribue automatiquement un identifiant unique à votre projet Firebase. Consultez la page "Comprendre les projets Firebase" pour savoir comment Firebase utilise l'ID de projet.
- Cliquez sur Continuer.
- Configurez Google Analytics pour votre projet afin de bénéficier d'une expérience optimale avec l'un des produits Firebase suivants:
- Firebase Crashlytics
- Firebase Predictions
- Firebase Cloud Messaging
- Messagerie dans l'application Firebase
- Firebase Remote Config
- Firebase A/B Testing
Lorsque vous y êtes invité, choisissez d'utiliser un compte Google Analytics existant ou d'en créer un. Si vous choisissez de créer un compte, sélectionnez l'emplacement de vos rapports Analytics, puis acceptez les paramètres de partage des données et les conditions d'utilisation de Google Analytics pour votre projet.
- Cliquez sur Créer un projet (ou sur Ajouter Firebase si vous utilisez un projet GCP existant).
Firebase provisionne automatiquement des ressources pour votre projet Firebase. Une fois le processus terminé, vous êtes redirigé vers la page de présentation de votre projet Firebase dans la console Firebase.
Enregistrer votre application auprès de Firebase
Une fois que vous avez créé un projet Firebase, vous pouvez y ajouter votre application iOS.
Consultez la page Comprendre les projets Firebase pour en savoir plus sur les bonnes pratiques et les éléments à prendre en compte concernant l'ajout d'applications à un projet Firebase, y compris sur la gestion de plusieurs variantes de compilation.
- Accédez à la console Firebase.
- Au centre de la page de présentation du projet, cliquez sur l'icône iOS pour lancer le processus 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.
- Saisissez l'ID du bundle de votre application dans le champ ID du bundle iOS.
- (Facultatif) Saisissez d'autres informations sur l'application: Pseudo de l'application et ID App Store.
- Cliquez sur Enregistrer l'application.
Ajouter un fichier de configuration Firebase
- Cliquez sur Download GoogleService-Info.plist (Télécharger GoogleService-Info.plist) pour obtenir votre fichier de configuration iOS Firebase (
GoogleService-Info.plist
). - Déplacez votre fichier de configuration à la racine de votre projet Xcode. Si vous y êtes invité, sélectionnez cette option pour ajouter le fichier de configuration à toutes les cibles.
Si votre projet comporte plusieurs ID de bundle, vous devez associer chacun d'eux à une application enregistrée dans la console Firebase afin que chaque application puisse avoir son propre fichier GoogleService-Info.plist
.
Fermez XCode.
Ajouter les SDK Firebase à votre application
Nous vous recommandons d'utiliser CocoaPods pour installer les bibliothèques Firebase. Toutefois, si vous préférez ne pas utiliser CocoaPods, vous pouvez intégrer directement les frameworks du SDK ou utiliser la version bêta de Swift Package Manager.
- Créez un Podfile si vous n'en avez pas déjà un. Si vous utilisez l'exemple de démarrage rapide, le projet Xcode et le fichier Podfile (avec des pods) sont déjà présents.
$ cd MessagingExample $ pod init
- Dans votre fichier Podfile, ajoutez les pods Firebase que vous souhaitez utiliser dans votre application.
Vous pouvez ajouter n'importe quel produit Firebase compatible à votre application iOS.
Dans l'exemple de démarrage rapide, les SDK Google Analytics et Firebase Cloud Messaging ont été ajoutés.
# Add the Firebase pod for Google Analytics pod 'Firebase/Analytics' # Add the pod for Firebase Cloud Messaging pod 'Firebase/Messaging'
- Installez les pods, puis ouvrez votre fichier
.xcworkspace
pour voir le projet dans Xcode:
$ pod install
- Ouvrez
MessagingExample.xcworkspace
, puis cliquez sur Suivant dans la console Firebase.
Initialiser Firebase dans votre application
Vous devez ajouter le code d'initialisation Firebase à votre application.
Importez le module Firebase et configurez une instance partagée (dans l'exemple de démarrage rapide, le module Firebase est déjà importé).
- Importez le module Firebase dans
UIApplicationDelegate
:
AppDelegate.swift
import UIKit
import Firebase // Add this line
- Configurez une instance partagée FirebaseApp, généralement dans la méthode
application:didFinishLaunchingWithOptions:
de votre application:
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure() // Add this line
return true
}
- Cliquez sur Suivant dans la console Firebase.
- Les SDK Firebase sont ajoutés à votre application. Cliquez sur Accéder à la console.
5. Configurer le client FCM
Importer votre clé d'authentification APNs
Importez votre clé d'authentification APNs dans Firebase.
- Dans la console Firebase, dans votre projet, sélectionnez l'icône en forme de roue dentée, Paramètres du projet, puis l'onglet Cloud Messaging.
- Dans Clé d'authentification APNs, sous Configuration de l'application iOS, cliquez sur le bouton Importer.
- Accédez à l'emplacement où vous avez enregistré votre clé, sélectionnez-la et cliquez sur Ouvrir. Ajoutez l'ID de la clé (disponible dans la section Certificats, identifiants et profils de l'Apple Developer Member Center), puis cliquez sur Importer.
S'inscrire pour recevoir des notifications à distance
Enregistrez votre application pour recevoir des notifications à distance, soit au démarrage, soit au moment souhaité dans le flux de votre application.
Dans l'exemple du guide de démarrage rapide, registerForRemoteNotifications
a déjà été ajouté.
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
// [START register for remote notifications]
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()
// [END register for remote notifications]
return true
}
Attribuez la propriété déléguée de UNUserNotificationCenter
en ajoutant ces lignes à la fin d'AppDelegate.swift.
AppDelegate.swift
@available(iOS 10, *)
extension AppDelegate : UNUserNotificationCenterDelegate {
// Receive displayed notifications for iOS 10 devices.
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
let userInfo = notification.request.content.userInfo
// Print full message.
print(userInfo)
// Change this to your preferred presentation option
completionHandler([[.alert, .sound]])
}
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
// Print full message.
print(userInfo)
completionHandler()
}
}
Définir le délégué de messagerie
Pour recevoir des jetons d'enregistrement, implémentez le protocole de délégation 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égation de messagerie, vous pouvez définir le délégué sur application:didFinishLaunchingWithOptions:
sur lui-même (dans l'exemple du guide de démarrage rapide, il est déjà défini).
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
Messaging.messaging().delegate = self // Add this line
// [START register for remote notifications]
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()
// [END register for remote notifications]
return true
}
Attribuez la propriété déléguée de FIRMessaging
en ajoutant ces lignes à la fin d'AppDelegate.swift.
AppDelegate.swift
extension AppDelegate : MessagingDelegate {
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)
}
}
Ajouter des fonctionnalités
Vous avez ajouté la fonctionnalité de notifications push dans la section "Créer un ID d'application", mais vous devez également l'ajouter à XCode en procédant comme suit (les étapes ci-dessous sont dans XCode 12.3):
- Cliquez sur le nom du projet dans la zone de navigation.
- Cliquez sur Signature et fonctionnalités.
- Cliquez sur + Capacité.
- Double-cliquez sur Modes d'arrière-plan.
- Cliquez à nouveau sur + Capacité.
- Double-cliquez sur Notifications push.
- Cochez Notifications à distance dans la section Modes arrière-plan.
6. Envoyer un message de notification
Pour envoyer un message de test, procédez comme suit:
- Installez et exécutez l'application sur l'appareil cible. Vous devrez accepter la demande d'autorisation pour recevoir les notifications à distance.
- Récupérez le jeton d'enregistrement dans le journal XCode.
- Assurez-vous que l'application est exécutée en arrière-plan sur l'appareil.
- Ouvrez l'outil de création de notifications, puis sélectionnez Nouvelle notification.
- Saisissez le texte du message.
- Sélectionnez Envoyer un message de test.
- Dans le champ Ajouter un jeton d'enregistrement FCM, saisissez le jeton d'enregistrement obtenu à l'étape 2.
- Cliquez sur Tester.
Une fois que vous avez cliqué sur Tester, l'appareil client ciblé (avec l'application en arrière-plan) devrait recevoir la notification dans le centre de notifications.
Pour en savoir plus sur la distribution des messages dans votre application, consultez le tableau de bord des rapports FCM, qui enregistre le nombre de messages envoyés et ouverts sur les appareils iOS et Android.
7. Félicitations
Félicitations, vous avez envoyé un message de test.
Il existe de nombreuses autres fonctions et configurations dans FCM, telles que l'abonnement à un sujet.
Si cela vous intéresse, consultez le document officiel destiné aux développeurs.
Et ensuite ?
Découvrez quelques-uns de ces ateliers de programmation.