[SWIFT] Implémentation des notifications push iOS dans Firebase

Au début

Lorsque j'ai essayé d'implémenter la fonction de notification push dans l'application iOS, j'ai eu plus de mal que prévu, je vais donc regarder en arrière.

Créer un projet Firebase

Dans la console Firebase (https://console.firebase.google.com/?hl=fr "Firebase Console"), cliquez sur Ajouter un projet, sélectionnez Nom du projet et saisissez un nouveau nom de projet. Faire.

Enregistrez votre application avec Firebase

  1. Une fois que vous avez créé votre projet Firebase, vous pouvez ajouter des applications iOS à votre projet. Depuis la console Firebase (https://console.firebase.google.com/?hl=ja "Firebase Console"), accédez à la page Projet et cliquez sur l'icône iOS au centre pour lancer le workflow de configuration. Faire.
  2. Saisissez l'ID de groupe de votre application dans le champ ID de groupe iOS. Pour trouver cet ID de bundle, ouvrez votre application dans XCode et accédez à l'onglet Général dans le répertoire de niveau supérieur. La valeur dans le champ d'identifiant du bundle est l'ID du bundle iOS (par exemple, com.atsushi-uchida.NewsTwit).

Ajouter un fichier de configuration Firebase

  1. Cliquez sur Télécharger GoogleService-Info.plist pour obtenir le fichier de configuration Firebase iOS (GoogleService-Info.plist).
  2. Déplacez le fichier de configuration à la racine de votre projet Xcode. Lorsque vous y êtes invité, sélectionnez l'option pour ajouter le fichier de configuration à toutes les cibles.

Ajoutez le SDK Firebase à votre application

Nous vous recommandons d'utiliser CocoaPods (https://guides.cocoapods.org/using/getting-started.html#getting-started "CocoaPods") pour installer la bibliothèque Firebase. -Si le podfile n'existe pas, créez-le.

$ cd your-project-directory
$ pod init

-Ajoutez le pod que vous souhaitez utiliser dans l'application au Podfile. Par exemple, dans le cas de l'analyse:

$ pod 'Firebase/Analytics'

Cela ajoutera les bibliothèques nécessaires pour que Firebase soit opérationnel dans votre application iOS, ainsi que Google Analytics pour Firebase.

· Installez le pod, ouvrez le fichier .xcworkspace et passez en revue le projet dans Xcode.

$ pod install
$ open your-project.xcworkspace

· Remarque! !! !! Si vous avez déjà installé un pod avec des CocoaPods, mettez-le à jour dans l'installation.

$ pod update

À partir de la deuxième fois, si vous utilisez l'installation, vous obtiendrez souvent une erreur due à la dépendance.

Passez à la délivrance du certificat

Il y a sept éléments à créer et à conserver pour envoyer des notifications push.

  1. Création d'un fichier CSR ** * Si vous le créez pour la première fois, le même sera utilisé par la suite, vous n'avez donc pas besoin de le créer à nouveau **
  2. Créez un certificat de développement (.cer) ** * Si vous le créez pour la première fois, le même sera utilisé par la suite, vous n'avez donc pas besoin de le créer à nouveau **
  3. Créez AppID
  4. Enregistrement du terminal
  5. Création d'un profil d'approvisionnement
  6. Créez un certificat (.cer) pour les APN
  7. Création d'un certificat (.p12) pour les APN

1. Création d'un fichier CSR

  1. Ouvrez l'accès au trousseau
  2. Cliquez sur Accès au trousseau> Assistant de certificat> Demander un certificat à l'autorité de certification.
  3. Entrez l '"Adresse e-mail de l'utilisateur"
  4. (Laissez le "nom commun" tel quel et laissez vide "Adresse e-mail CA")
  5. Pour "Traitement de la demande", sélectionnez "Enregistrer sur le disque" et cochez "Définir les informations sur la paire de clés".
  6. Cliquez sur Continuer
  7. La destination de sauvegarde sera sélectionnée.Sélectionnez n'importe quel emplacement et cliquez sur "Enregistrer".
  8. Vérifiez l'écran "Informations sur la paire de clés" et cliquez sur "Continuer".
  9. L'écran "Résultat du réglage" apparaît. Cliquez sur "Terminer".

2. Création d'un certificat de développement (.cer)

  1. Connectez-vous au programme Apple Developer Program (https://developer.apple.com/account/ "Apple Developer Program")
  2. Cliquez sur Certificats, identificateurs et profils
  3. Cliquez sur "Certificats", puis sur "+" à côté de "Certificats"
  4. L'écran "Créer un nouveau certificat" s'affiche, définissez-le.
  5. Cochez "Développement d'applications iOS" et cliquez sur "Continuer" dans le coin supérieur droit.
  6. Cliquez sur "Choisir un fichier", sélectionnez "Créer un fichier CSR" créé en 1. et cliquez sur "Continuer".
  7. Un certificat de développeur sera créé, cliquez donc sur "Télécharger" pour l'exporter.
  8. La création du certificat de développement (.cer) est terminée

3. Créer un identifiant d'application

    1. Si le travail de "Création d'un certificat de développement (.cer)" a été ignoré, connectez-vous au programme pour développeurs Apple et cliquez sur "Certificats, identificateurs et profils" (* 2. Image référence)
  1. Cliquez sur le "+" à droite de "Identifiants"
  2. "Enregistrer un nouvel identifiant" s'affiche. Cochez "App IDs" et cliquez sur "Continuer" dans le coin supérieur droit.
  3. Entrez le contour de l'application dans "Description" Exemple) TestPushApp
  4. Pour "Bundle ID", sélectionnez "Explicit" et saisissez le "Bundle ID". 6 Notez que les notifications push ne seront pas disponibles si vous sélectionnez "Wildcard"!
  5. Notez le "Bundle ID" car il sera défini du côté de l'application!
  6. Faites défiler vers le bas et cochez «Notifications push» sous «Capacités»
  7. Notez que si vous oubliez cela, les notifications push ne seront pas disponibles!
  8. Cliquez sur Continuer
  9. Un écran de confirmation s'affiche. Assurez-vous que "Notifications Push" est coché et cliquez sur "Enregistrer".
  10. Ceci termine la création de l'ID d'application

4. Enregistrement du terminal

  1. Cliquez sur «Appareils», puis sur «+» à côté de «Appareils»
  2. Sélectionnez "Plate-forme" comme "iOS, tvOS, WatchOS"
  3. Entrez le nom de l'appareil et l'ID de l'appareil (UDID) du terminal
  4. "Nom de l'appareil" peut être défini librement
  5. "Device ID (UDID)" est facile à vérifier à l'aide de Xcode
  6. Connectez votre appareil à votre Mac et lancez Xcode
  7. Cliquez sur Fenêtre> Périphériques et simulateurs
  8. Vous pouvez vérifier l'UDID comme "identifiant"
  9. Cliquez sur Continuer lorsque vous avez terminé
  10. Vérifiez les informations du terminal sur l'écran suivant et cliquez sur "Enregistrer"
  11. Ceci termine l'enregistrement du terminal.

5. Création d'un profil d'approvisionnement

  1. Cliquez sur Profils, puis sur le "+" à côté de Profils
  2. Sélectionnez «Développement d'applications iOS» sous «Développement» et cliquez sur «Continuer».
  3. Liez l'ID d'application à utiliser, le certificat de développement et le terminal.
    1. Sélectionnez l'ID d'application créé dans "Créer un ID d'application" et cliquez sur "Continuer".
    1. Sélectionnez le certificat de développement (ou existant) créé dans "Création d'un certificat de développement (.cer)" et cliquez sur "Continuer".
    1. Sélectionnez le terminal enregistré (ou existant) dans "Enregistrer le terminal" et cliquez sur "Continuer".
  4. Enfin, saisissez le nom du fichier dans l'exemple "Nom du profil de provisionnement") Profils de provisionnement TestPushApp
  5. Confirmez l'association et cliquez sur "Générer"
  6. Un profil d'approvisionnement sera créé, cliquez donc sur "Télécharger" pour l'exporter.
  7. La création du profil de provisionnement est terminée

6. Créez un certificat (.cer) pour les APN

  1. Cliquez sur "Certificats", puis sur "+" à côté de "Certificats"
  2. Contrairement à la création d'un certificat de développement dans «Création d'un certificat de développement (.cer)», faites défiler vers le bas et cochez «Apple Push Notification service SSL (Sandbox)» dans «Service». Mettre en
  3. Cliquez sur Continuer
    1. Sélectionnez l'ID d'application créé dans "Créer un ID d'application" et cliquez sur "Continuer".
    1. Sélectionnez le fichier CSR créé (ou existant) dans "Créer un fichier CSR" et cliquez sur "Continuer".
  4. Un certificat (.cer) pour les APN sera créé, cliquez donc sur "Télécharger" pour l'exporter.
  5. La création du certificat (.cer) pour les APN est terminée.

7. Création d'un certificat (.p12) pour les APN

    1. Double-cliquez sur le «Certificat APNs (.cer)» créé dans «Création d'un certificat APNs (.cer)» pour ouvrir l'accès au trousseau.
  1. Cliquez sur la marque triangulaire à gauche du certificat des APN (.cer) pour l'ouvrir.
  2. La clé est définie dans le fichier de certificat (.cer) pour les APN
  3. Pour exporter le certificat pour les APN (.p12), à l'état ouvert, faites un clic droit sur le certificat au lieu de la clé et cliquez sur "Exporter ..."
  4. Spécifiez le nom de fichier "Nom" et la destination de sauvegarde "Emplacement" et cliquez sur "Enregistrer".
  5. Un mot de passe vous sera demandé, n'entrez rien et cliquez sur OK
  6. Après cela, le système peut demander un mot de passe. Veuillez correspondre.
  7. Le certificat pour les APN (.p12) sera exporté
  8. La création du certificat pour les APN (.p12) est terminée
  9. Vous avez maintenant créé tous les fichiers nécessaires

Enregistrer le certificat APN avec Cloud Messaging de Firebase

  1. Ensuite, accédez à l'écran des paramètres Firebase.
  2. Sélectionnez l'icône d'engrenage en haut à gauche de l'écran du projet cible dans la console Firebase et sélectionnez les paramètres du projet.
  3. Sélectionnez Cloud Messaging dans le menu Paramètres.
  4. Faites défiler l'écran et sélectionnez Télécharger le certificat APN pour le certificat APN de développement dans les paramètres de l'application IOS.
  5. Cliquez sur Télécharger le fichier, sélectionnez le certificat APN que vous avez créé dans 7. Création d'un certificat pour les APN (.p12), puis sélectionnez Télécharger.
  6. Si le téléchargement est terminé ici, les paramètres Firebase sont terminés.

Définir la signature Xcode

  1. Ensuite, définissez le Xcode. Ouvrez cet écran de Xcode et sélectionnez Signing & Capability.
  2. Tout d'abord, décochez la case Gérer automatiquement la signature et définissez le profil de provisionnement sur le profil de provisionnement créé dans 5. «Création d'un profil de provisionnement».
  3. Cliquez ensuite sur + Capacité à signer des Nortifications Push, puis faites un glisser-déposer.
  4. Faites également glisser et déposez le mode d'arrière-plan.
  5. Vérifiez les nortifications à distance en mode arrière-plan. Ceci termine les paramètres Xcode.

Traitement implémenté pour autoriser les notifications et enregistrer les appareils dans AppDelegate.swift

Enfin, écrivez le processus dans AppDelegate et terminez. Il y a 4 emplacements de montage.

  1. import
  2. didFinishLaunchingWithOptions
  3. Dans la classe AppDelegate
  4. Extension UNUserNotificationCenterDelegate
import UIKit
import Firebase
import FirebaseMessaging
import UserNotifications

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

   func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
       // Override point for customization after application launch.
       FirebaseApp.configure()
       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()
       
       return true
   }

   // MARK: UISceneSession Lifecycle

   func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
       // Called when a new scene session is being created.
       // Use this method to select a configuration to create the new scene with.
       return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
   }

   func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
       // Called when the user discards a scene session.
       // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
       // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
   }
   
   func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
       // Print message ID.
       if let messageID = userInfo["gcm.message_id"] {
           print("Message ID: \(messageID)")
       }

       // Print full message.
       print(userInfo)
   }

   func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
                    fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
       // Print message ID.
       if let messageID = userInfo["gcm.message_id"] {
           print("Message ID: \(messageID)")
       }

       // Print full message.
       print(userInfo)

       completionHandler(UIBackgroundFetchResult.newData)
   }


}

@available(iOS 10, *)
extension AppDelegate : UNUserNotificationCenterDelegate {
   func userNotificationCenter(_ center: UNUserNotificationCenter,
                               willPresent notification: UNNotification,
                               withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
       let userInfo = notification.request.content.userInfo

       if let messageID = userInfo["gcm.message_id"] {
           print("Message ID: \(messageID)")
       }

       print(userInfo)

       completionHandler([])
   }

   func userNotificationCenter(_ center: UNUserNotificationCenter,
                               didReceive response: UNNotificationResponse,
                               withCompletionHandler completionHandler: @escaping () -> Void) {
       let userInfo = response.notification.request.content.userInfo
       if let messageID = userInfo["gcm.message_id"] {
           print("Message ID: \(messageID)")
       }

       print(userInfo)

       completionHandler()
   }
}

Je pense que vous pouvez le faire en copiant, alors veuillez l'implémenter de cette façon. Le réglage du code est terminé ici. Connectez l'application à l'appareil réel, démarrez l'application et vous verrez une boîte de dialogue pour autoriser les notifications, alors laissez-la dans l'état autorisé. (La notification ne sera pas envoyée sans l'autorisation de la notification. + La notification à distance ne sera pas envoyée sauf s'il s'agit d'une machine réelle.)

Envoyer des notifications depuis Cloud Messaging

  1. Tout ce que vous avez à faire est d'envoyer une notification! Sélectionnez Cloud Messaging dans le menu de gauche de la Firebase Console.
  2. Cliquez sur Envoyer votre premier message et entrez ce que vous voulez être notifié. (Approprié et correct.) Cliquez sur Suivant.
  3. Sélectionnez votre application dans Sélectionner une application et cliquez sur Suivant.
  4. L'horaire peut être défini en détail, mais ça va maintenant. Cliquez sur Suivant.
  5. Cliquez sur Suivant sans rien définir pour l'événement de conversion.
  6. À la fin, vous pouvez effectuer des réglages détaillés tels que ON / OFF du son de notification et la quantité de lot IOS (cercle rouge en haut à droite de l'application). Je vous laisse les paramètres. S'il n'y a pas de problème, cliquez sur Confirmer.
  7. Enfin, cliquez sur Publier et la notification sera envoyée et la notification sera envoyée à la machine réelle.
  8. Ceci termine les paramètres et les notifications.

Si les notifications push ne sont pas livrées correctement

  1. L'ordre de création du document est incorrect
  2. Modification du document créé en cours de route
  3. Plusieurs certificats de développement ont été créés
  4. Plusieurs fichiers CSR ont été créés
  5. J'ai oublié de cocher "Notifications push" lors de la création de l'ID d'application
  6. Vérifiez si l'application est ouverte sur l'appareil réel (elle n'arrivera pas si l'application est ouverte)
  7. Vous ne pourrez peut-être pas autoriser correctement les notifications, supprimez et réinstallez l'application.
  8. Vérifiez Info.plist pour tous les paramètres étranges. (Certains articles disent qu'il doit être défini dans Info.plist, mais ce n'est pas nécessaire.)

Notifications push à l'aide du SDK Firebase Admin

J'ai essayé la notification push du serveur vers le smartphone à l'aide de Firebase Cloud Messaging (FCM). J'écrirai comment envoyer des notifications push depuis le serveur via Firebase.

Installer le SDK Firebase Admin

$ pip install firebase-admin

Pour authentifier votre compte de service et autoriser l'accès au service Firebase, vous devez générer un fichier de clé privée au format JSON.

Obtenez le fichier de clé pour la connexion Firebase à partir de la console Firebase

  1. Appuyez sur la marque d'engrenage en haut à gauche de la console Firebase (https://console.firebase.google.com/?hl=ja "Firebase Console") pour ouvrir l'écran des paramètres du projet.
  2. Depuis cet écran, cliquez sur l'onglet "Compte de service".
  3. Cliquez sur le bouton "Générer une nouvelle clé privée" pour télécharger le fichier de clé privée.
  4. Stockez en toute sécurité le fichier JSON contenant la clé.

Notification push vers un smartphone spécifique

Envoyez une notification push à un smartphone spécifique (YOUR_REGISTRATION_TOKEN). Le code est ci-dessous. path / to / serviceAccountKey.json spécifie le fichier de clé privée téléchargé.

import firebase_admin
from firebase_admin import credentials
from firebase_admin import messaging

cred = credentials.Certificate("path/to/serviceAccountKey.json")
firebase_admin.initialize_app(cred)

# This registration token comes from the client FCM SDKs.
registration_token = 'YOUR_REGISTRATION_TOKEN'

# See documentation on defining a message payload.
message = messaging.Message(
    notification=messaging.Notification(
        title='test server',
        body='test server message',
    ),
    token=registration_token,
)

# Send a message to the device corresponding to the provided
# registration token.
response = messaging.send(message)
# Response is a message ID string.
print('Successfully sent message:', response)

Notification push aux smartphones participant au sujet

Il s'agit d'une méthode pour envoyer des notifications à plusieurs smartphones participant à un sujet spécifique. Par exemple, lorsque vous transmettez des notifications aux smartphones participant à la rubrique «météo», modifiez la partie de composition du message comme suit. Plus précisément, changez simplement la partie du jeton en sujet.

message = messaging.Message(
    notification=messaging.Notification(
        title='test server',
        body='test server message',
    ),
    topic='weather',
)

La participation à des rubriques sur iOS peut être réalisée avec le code suivant dans AppDelegate.swift.

Messaging.messaging().subscribe(toTopic: "weather") { error in
    print("Subscribed to weather topic")
}

Version avancée Ajouter le numéro (affichage du badge) en haut à droite de l'icône

Jusqu'à présent, seuls le titre et le message étaient utilisés, mais j'aimerais ajouter le traitement du badge (le numéro en haut à droite de l'icône). Vous pouvez le faire avec un code comme celui-ci:

import firebase_admin
from firebase_admin import credentials
from firebase_admin import messaging

cred = credentials.Certificate("path/to/serviceAccountKey.json")
firebase_admin.initialize_app(cred)

notification = messaging.Notification(
    title='test server',
    body='test server message',
)
topic='weather'

apns = messaging.APNSConfig(
   payload = messaging.APNSPayload(
       aps = messaging.Aps(badge = 1) #C'est la partie requise pour la notification en arrière-plan
   )
)

message = messaging.Message(
    notification=notification,
    apns=apns,
    topic=topic,
)

response = messaging.send(message)
print('Successfully sent message:', response)

À la fin

Avec le recul, c'est devenu un nombre considérable de personnages. Est-ce si difficile? Merci d'avoir lu le long texte. Voici le lien auquel j'ai fait référence.

  1. Ajoutez Firebase à votre projet iOS (https://firebase.google.com/docs/ios/setup?hl=fr "Ajoutez Firebase à votre projet iOS")
  2. [Swift5] Comment implémenter la notification push à distance
  3. Comment créer un certificat requis pour la notification push 2020
  4. Notification push utilisant le SDK Firebase Admin

Recommended Posts

Implémentation des notifications push iOS dans Firebase
Envoyer des notifications push aux applications iOS avec Python
Envoyez des notifications push depuis les applications iOS via Firebase Cloud Messaging
Implémentation de Shiritori en Python
Envoyer des notifications push aux applications iOS avec Python2 (avec un exemple de code)
Jouez avec les notifications push avec imap4lib
Implémentation de Supreme Solver dans Python 3