Tutoriel sur les notifications Push: Mise en route

Remarque de mise à jour: Chuck Krutsinger a mis à jour ce tutoriel pour Xcode 11 et Swift 5. Jack Wu a écrit le tutoriel original et Keegan Rush a écrit une mise à jour antérieure.

Les développeurs iOS aiment imaginer que les gens utilisent constamment leur application géniale. Mais, bien sûr, les utilisateurs devront parfois fermer l’application et effectuer d’autres activités. Le linge ne se plie pas tout seul, tu sais ! Heureusement, les notifications push permettent aux développeurs d’atteindre les utilisateurs et d’effectuer de petites tâches, même lorsque les utilisateurs n’utilisent pas activement une application ! Dans ce tutoriel, vous apprendrez à :

  • Configurer votre application pour recevoir des notifications push.
  • Affichez-les à vos utilisateurs ou effectuez d’autres tâches.

Mise en route

Que sont les notifications push ? Ce sont des messages envoyés à votre application via le service de notification Push d’Apple (APNs) même si votre application n’est pas en cours d’exécution ou si le téléphone est en veille. À quoi pouvez-vous utiliser les notifications push?

  • Affichez un court message texte, appelé alerte, qui attire l’attention sur quelque chose de nouveau dans votre application.
  • Émet un son de notification.
  • Définissez un numéro de badge sur l’icône de l’application pour informer l’utilisateur qu’il y a de nouveaux éléments.
  • Fournir des actions que l’utilisateur peut prendre sans ouvrir l’application.
  • Affiche une pièce jointe multimédia.
  • Soyez silencieux, ce qui permet à l’application d’effectuer une tâche en arrière-plan.
  • Grouper les notifications en threads.
  • Modifiez ou supprimez les notifications livrées.
  • Exécutez le code pour modifier votre notification avant de l’afficher.
  • Affichez une interface utilisateur personnalisée et interactive pour votre notification.
  • Et probablement plus.

Ce tutoriel couvre bon nombre de ces utilisations pour vous aider à créer des notifications push dans vos applications. Pour terminer ce tutoriel, vous aurez besoin des éléments suivants :

  • Xcode 11.4 ou version ultérieure. Les versions antérieures de Xcode ne prennent pas en charge les notifications push à l’aide du simulateur.
  • Un abonnement au programme de développement Apple pour pouvoir compiler l’application avec le droit aux notifications Push.
Remarque: Plus tard dans le tutoriel, vous apprendrez comment envoyer des notifications push à un appareil réel en envoyant vers un appareil réel.

Pour envoyer et recevoir des notifications push, vous devez effectuer trois tâches principales :

  1. Configurez votre application et enregistrez-la auprès des APN.
  2. Envoyez une notification push d’un serveur à des périphériques spécifiques via APNs. Vous allez simuler cela avec Xcode.
  3. Utilisez les rappels dans l’application pour recevoir et gérer les notifications push.

L’envoi de notifications push est une responsabilité du composant serveur de votre application. De nombreuses applications utilisent des tiers pour envoyer des notifications push. D’autres utilisent des solutions personnalisées ou des bibliothèques populaires (comme Houston). Vous ne toucherez qu’à l’envoi de messages push dans ce tutoriel, alors assurez-vous de vérifier Où aller à partir d’ici? section pour tirer parti de vos connaissances des notifications push.

Pour commencer, téléchargez le projet de démarrage WenderCast en utilisant le bouton Télécharger les matériaux en haut ou en bas de ce tutoriel. WenderCast est la source incontournable pour tout le monde raywenderlich.com podcasts et dernières nouvelles.

Dans le dossier de démarrage, ouvrez WenderCast.xcodeproj. Sélectionnez WenderCast dans le navigateur de projet, puis sélectionnez la cible WenderCast. Dans l’onglet Général & Capacités, sélectionnez votre équipe de développement. Construire et exécuter dans un simulateur.

Construire et exécuter le projet de démarrage

WenderCast affiche une liste de raywenderlich.com podcasts et permet aux utilisateurs de les lire. Mais il ne permet pas aux utilisateurs de savoir quand un nouveau podcast est disponible et que l’onglet Actualités est vide! Vous allez bientôt résoudre ces problèmes avec la puissance des notifications push.

Envoi et réception de Notifications Push

Configuration de l’application

La sécurité est très importante pour les notifications push. Vous ne voulez pas que quelqu’un d’autre envoie des notifications push à vos utilisateurs via votre application. Vous devrez effectuer plusieurs tâches pour configurer votre application afin qu’elle reçoive des notifications push en toute sécurité.

Activation du Service de notification Push

Tout d’abord, vous devez changer l’identifiant du bundle. Dans Xcode, mettez en surbrillance WenderCast dans le navigateur de projet, puis sélectionnez la cible WenderCast. Sélectionnez Général, puis changez l’identifiant du bundle en quelque chose d’unique pour que le serveur de notifications push d’Apple puisse diriger les push vers cette application.

Modifier l'identifiant du bundle

Ensuite, vous devez créer un ID d’application dans votre compte développeur et activer le droit de notification push. Xcode a un moyen simple de le faire: Avec la cible WenderCast toujours sélectionnée, cliquez sur l’onglet Capacités de signature &, puis cliquez sur le bouton + Capacité. Tapez « push » dans le champ de filtre et appuyez sur Entrée.

Ajouter la capacité de notifications push

Après avoir ajouté le droit de notifications push, votre projet devrait ressembler à ceci:

Projet avec droit aux notifications push

Remarque: En cas de problème, visitez le Centre de développement Apple. Vous devrez peut-être accepter une nouvelle licence de développeur, qu’Apple aime mettre à jour, et réessayer.

Dans les coulisses, cela crée l’ID de l’application, puis y ajoute le droit aux notifications push. Vous pouvez vous connecter au Centre de développement Apple pour vérifier ceci :

Configuration de l'ID d'application affichant le droit aux notifications push

C’est tout ce que vous devez configurer pour le moment. Vous êtes prêt à commencer à améliorer l’application.

Demander l’autorisation des notifications utilisateur

Il y a deux étapes à suivre pour vous inscrire aux notifications push. Tout d’abord, vous devez obtenir l’autorisation de l’utilisateur pour afficher les notifications. Ensuite, vous pouvez enregistrer l’appareil pour recevoir des notifications à distance (push). Si tout se passe bien, le système vous fournira alors un jeton d’appareil, que vous pouvez considérer comme une « adresse” à cet appareil.

Dans WenderCast, vous vous inscrivez aux notifications push immédiatement après le lancement de l’application. Demandez d’abord les autorisations de l’utilisateur.

Ouvrez AppDelegate.swift et ajoutez ce qui suit en haut du fichier:

import UserNotifications

Ensuite, ajoutez la méthode suivante à la fin de AppDelegate:

func registerForPushNotifications() { //1 UNUserNotificationCenter.current() //2 .requestAuthorization(options: ) { granted, _ in //3 print("Permission granted: \(granted)") }}

Ce que fait ce code:

  1. UNUserNotificationCenter gère toutes les activités liées aux notifications dans l’application, y compris les notifications push.
  2. Vous appelez requestAuthorization(options:completionHandler:) pour (vous l’avez deviné) demander l’autorisation d’afficher les notifications. Le options passé indique les types de notifications que vous souhaitez que votre application utilise — ici, vous demandez une alerte, un son et un badge.
  3. Le gestionnaire de complétion reçoit un Bool qui indique si l’autorisation a réussi. Dans ce cas, vous imprimez simplement le résultat.
Remarque : Les options que vous passez à requestAuthorization(options:completionHandler:) peuvent inclure n’importe quelle combinaison de UNAuthorizationOptions:

  • .badge : Affiche un numéro dans le coin de l’icône de l’application.
  • .son : Émet un son.
  • .alerte : Affiche une notification texte.
  • .CarPlay : Afficher les notifications dans CarPlay.
  • .provisoire : Envoi de notifications sans interruption. L’utilisateur n’obtiendra pas de demande d’autorisation si vous utilisez uniquement cette option, mais vos notifications ne s’afficheront que silencieusement dans le Centre de notifications.
  • .providesAppNotificationSettings : Indiquez que l’application dispose de sa propre interface utilisateur pour les paramètres de notification.
  • .criticalAlert: Ignorer le commutateur de sourdine et ne pas déranger. Vous aurez besoin d’un droit spécial d’Apple pour utiliser cette option, car elle n’est destinée qu’à des cas d’utilisation très spéciaux.

Ajoutez ce qui suit vers la fin de application(_:didFinishLaunchingWithOptions:), juste avant le return:

registerForPushNotifications()

Appeler registerForPushNotifications() ici garantit que l’application tentera de s’inscrire aux notifications push à tout moment de son lancement.

Construire et exécuter. Lorsque l’application se lance, vous devriez recevoir une invite vous demandant la permission de vous envoyer des notifications.

Invite pour les notifications

Appuyez sur Autoriser, et pouf! L’application peut maintenant afficher des notifications. Très bien! Mais que se passe-t-il si l’utilisateur refuse les autorisations? Ajoutez cette méthode dans AppDelegate:

func getNotificationSettings() { UNUserNotificationCenter.current().getNotificationSettings { settings in print("Notification settings: \(settings)") }}

Tout d’abord, vous avez spécifié les paramètres souhaités. Cette méthode renvoie les paramètres que l’utilisateur a accordés. Pour l’instant, vous les imprimez, mais vous reviendrez ici sous peu pour en faire plus.

Dans registerForPushNotifications(), remplacez l’appel à requestAuthorization(options:completionHandler:) par ce qui suit :

UNUserNotificationCenter.current() .requestAuthorization( options: ) { granted, _ in print("Permission granted: \(granted)") guard granted else { return } self?.getNotificationSettings() }

Vous avez ajouté un appel à getNotificationSettings() dans le gestionnaire de complétion. Ceci est important car l’utilisateur peut, à tout moment, accéder à l’application Paramètres et modifier ses autorisations de notification. Le guard évite de faire cet appel dans les cas où l’autorisation n’a pas été accordée.

S’inscrire Avec APNs

Maintenant que vous avez les autorisations, vous allez vous inscrire pour les notifications à distance!

Dans getNotificationSettings(), ajoutez ce qui suit sous le print à l’intérieur de la fermeture:

guard settings.authorizationStatus == .authorized else { return }DispatchQueue.main.async { UIApplication.shared.registerForRemoteNotifications()}

Ici, vous vérifiez que le authorizationStatus est .authorized : L’utilisateur a accordé des autorisations de notification. Si c’est le cas, vous appelez UIApplication.shared.registerForRemoteNotifications() pour lancer l’enregistrement auprès du service de notification Push Apple. Vous devez l’appeler sur le thread principal, sinon vous recevrez un avertissement d’exécution.

Ajoutez ce qui suit à la fin de AppDelegate:

func application( _ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { let tokenParts = deviceToken.map { data in String(format: "%02.2hhx", data) } let token = tokenParts.joined() print("Device Token: \(token)")}

Cette méthode est appelée par iOS chaque fois qu’un appel à registerForRemoteNotifications() réussit. Le code peut sembler cryptique, mais il prend simplement un deviceToken reçu et le convertit en une chaîne. Le jeton d’appareil est le fruit de ce processus. Il est fourni par APNs et identifie de manière unique cette application sur cet appareil particulier.

Lors de l’envoi d’une notification push, le serveur utilise des jetons comme « adresses” pour les envoyer aux appareils appropriés. Dans votre application, vous enverrez maintenant ce jeton à votre serveur pour l’enregistrer et l’utiliser ultérieurement pour l’envoi de notifications.

Ajoutez maintenant ce qui suit:

func application( _ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { print("Failed to register: \(error)")}

Cette méthode est appelée par iOS si registerForRemoteNotifications() échoue. Vous imprimez juste l’erreur pour l’instant.

C’est tout! Construire et courir. Parce que vous êtes sur un simulateur, vous verrez une erreur Failed to register. Vous pouvez l’ignorer pour l’instant. Plus tard, lorsque vous exécutez sur un appareil réel, vous devriez recevoir un jeton dans la sortie de la console. Voici un exemple :

Exemple de jeton de périphérique

Remarque : L’enregistrement peut échouer pour plusieurs raisons. Le plus souvent, c’est parce que l’ID de l’application n’a pas été correctement configuré. Le message d’erreur fournit généralement un bon indice de ce qui ne va pas.

Envoi d’une notification Push simulée

Utilisez un éditeur de texte pour créer un fichier appelé en premier.apn, que vous passerez à l’utilitaire simctl de Xcode. Collez le texte JSON suivant et enregistrez le fichier.

{ "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com" }}

La structure de ce JSON sera expliquée dans la section suivante. Patience, sauterelle.

Créez et exécutez à nouveau l’application sur le simulateur, puis mettez l’application en arrière-plan ou verrouillez l’appareil. L’application n’est pas encore en mesure de traiter les notifications push au premier plan.

Pour utiliser simctl, vous devez connaître l’identifiant de périphérique du simulateur dans lequel vous exécutez l’application. S’il n’y a qu’un seul périphérique en cours d’exécution dans le simulateur, vous pouvez utiliser booted au lieu d’un identifiant. Pour obtenir l’identifiant, dans Xcode, sélectionnez Windows ▸ Appareils et Simulateurs, puis sélectionnez l’onglet Simulateurs en haut et sélectionnez le simulateur que vous utilisez dans la liste de gauche. Utilisez votre souris pour copier l’identifiant. Vous devrez peut-être élargir la boîte de dialogue pour la voir complètement.

Trouver l'identifiant du périphérique dans Xcode

Ouvrez l’application du terminal et passez au répertoire dans lequel vous avez enregistré en premier.APN. Tapez ensuite la commande suivante en utilisant l’identifiant de périphérique démarré ou l’identifiant de périphérique de Xcode à la place de device_identifier : xcrun simctl push device_identifier bundle_identifier first.apn. Remplacez device_identifier par l’identifiant de périphérique que vous avez copié à partir de Xcode et remplacez bundle_identifier par l’identifiant du bundle de l’application — celui que vous avez utilisé lors de la première configuration du projet. Voici un exemple :

Utilisation de xcrun simctl pour envoyer une notification push depuis le terminal

Exécutez la commande et vous verrez la notification push apparaître sur le simulateur!

La notification push apparaît sur le simulateur

Appuyez sur la notification pour lancer l’application.

Application lancée à partir de la notification push

N’est-ce pas cool? :]

En regardant une Notification Push de base

Avant de passer à la gestion des notifications push, jetez un œil au corps de la notification que vous avez envoyée:

{ "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com" }}

La charge utile est un dictionnaire JSON qui contient au moins un élément, aps, qui est également un dictionnaire. Dans cet exemple, aps contient les champs alertsound et link_url. Lorsque l’appareil reçoit cette notification push, il affiche une vue d’alerte avec le texte « Dernières nouvelles! »et joue l’effet sonore standard.

link_url est en fait un champ personnalisé. Vous pouvez ajouter des champs personnalisés à la charge utile comme celui-ci, et ils seront livrés à votre application. Parce que vous ne le manipulez pas encore dans l’application, cette paire clé / valeur ne fait actuellement rien.Correction

: Un lecteur astucieux a souligné que la documentation d’Apple indique que le contenu personnalisé tel que link_url devrait être à un niveau égal à l’entrée du dictionnaire aps plutôt qu’à l’intérieur de celui-ci. Cela fonctionne toujours si vous le placez à l’intérieur, mais nous suggérons toujours de respecter la documentation d’Apple et nous corrigerons cela dans notre prochaine mise à jour de ce tutoriel.

Il existe huit clés intégrées que vous pouvez ajouter au dictionnaire aps (voir la référence officielle de la clé de charge utile pour plus d’informations) :

  • alert: Cela peut être une chaîne, comme dans l’exemple précédent, ou un dictionnaire. En tant que dictionnaire, il peut localiser le texte ou modifier d’autres aspects de la notification.badge
  • : Il s’agit d’un numéro qui s’affichera dans le coin de l’icône de l’application. Vous pouvez supprimer le badge en le réglant sur 0.
  • son: Nom du fichier d’un son de notification personnalisé situé dans l’application. Ceux-ci doivent être plus courts que 30 secondes.
  • id de thread : Utilisez cette clé pour regrouper les notifications.
  • catégorie : Définit la catégorie de la notification, qui est utilisée pour afficher les actions personnalisées sur la notification. Vous explorerez cela sous peu.
  • contenu- disponible: En définissant cette touche sur 1, la notification push devient silencieuse. Vous en apprendrez plus à ce sujet dans la section Notifications Push silencieuses ci-dessous.
  • mutable-content: En définissant cette touche sur 1, votre application peut modifier la notification avant de l’afficher.
  • target-content-id : Il s’agit de l’identifiant de la fenêtre avancée.

En dehors de ceux-ci, vous pouvez ajouter autant de données personnalisées que vous le souhaitez, tant que la charge utile ne dépasse pas 4 096 octets.

Une fois que vous avez assez de plaisir à essayer ces options et à envoyer des notifications push à votre simulateur, passez à la section suivante!

Gestion des notifications Push

Dans cette section, vous apprendrez à effectuer des actions lorsque votre application reçoit des notifications et lorsque les utilisateurs les touchent.

Comprendre Ce qui se passe Lorsque Vous recevez une Notification Push

Lorsque votre application reçoit une notification push, iOS appelle une méthode dans UIApplicationDelegate.

Vous devrez gérer une notification différemment en fonction de l’état dans lequel se trouve votre application lorsque la notification est reçue:

  • Si votre application n’était pas en cours d’exécution et que l’utilisateur la lance en appuyant sur la notification push, iOS transmet la notification à votre application dans le launchOptions de application(_:didFinishLaunchingWithOptions:).
  • Si votre application s’exécutait au premier plan ou en arrière-plan, le système en informe votre application en appelant application(_:didReceiveRemoteNotification:fetchCompletionHandler:). Lorsque l’utilisateur ouvre l’application en appuyant sur la notification push, iOS peut appeler à nouveau cette méthode afin que vous puissiez mettre à jour l’interface utilisateur et afficher les informations pertinentes.

Dans le premier cas, WenderCast créera l’élément d’actualité et s’ouvrira directement à l’onglet Actualités. Dans AppDelegate.swift, ajoutez le code suivant à la fin de application(_:didFinishLaunchingWithOptions:), juste avant l’instruction de retour :

// Check if launched from notificationlet notificationOption = launchOptions?// 1if let notification = notificationOption as? , let aps = notification as? { // 2 NewsItem.makeNewsItem(aps) // 3 (window?.rootViewController as? UITabBarController)?.selectedIndex = 1}

Voici ce que vous faites :

  1. Vérifiez si la valeur de UIApplication.LaunchOptionsKey.remoteNotification existe dans launchOptions. Si c’est le cas, votre application a été lancée à partir d’une notification. Cela contiendra la charge utile de notification push que vous avez envoyée.
  2. Puisque le dictionnaire aps existe, créez un NewsItem avec celui-ci.
  3. Remplacez l’onglet sélectionné du contrôleur d’onglets par la section Actualités.

Pour tester cela, vous devez modifier le schéma de WenderCast. Tout d’abord, créez et exécutez pour installer le dernier code sur le simulateur. Ensuite, cliquez sur le schéma WenderCast et sélectionnez Modifier le schéma…:

Modifiez le schéma

Sélectionnez Exécuter dans la barre latérale, puis dans l’onglet Informations sélectionnez Attendre le lancement de l’exécutable:

Choisissez Attendre le lancement de l'exécutable

Cette option fera attendre le débogueur que l’application soit lancée pour la première fois après installation pour y attacher.

Construire et exécuter. Une fois l’installation terminée, envoyez plus de nouvelles en utilisant xcrun simctl comme précédemment. Appuyez sur la notification et l’application s’ouvrira aux nouvelles:

Application ouverte à l'onglet actualités

Pour gérer la situation dans laquelle votre application est en cours d’exécution lorsqu’une notification push est reçue, ajoutez ce qui suit à AppDelegate:

func application( _ application: UIApplication, didReceiveRemoteNotification userInfo: , fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { guard let aps = userInfo as? else { completionHandler(.failed) return } NewsItem.makeNewsItem(aps)}

Ceci tente d’extraire les points d’accès de la userInfo objet et, en cas de succès, crée un nouveau NewsItem à partir de celui-ci.

Étant donné qu’iOS appelle cette méthode lorsque l’application est en cours d’exécution, vous devez modifier le schéma pour lancer automatiquement l’application pour la tester. Dans l’éditeur de schéma, sous Lancer, sélectionnez Automatiquement.

Construire et exécuter. Gardez l’application en cours d’exécution au premier plan et dans l’onglet Actualités. Envoyez une autre notification push de nouvelles et regardez-la telle qu’elle apparaît dans le flux:

Deuxième notification push affichée dans l'onglet actualités

C’est tout! Votre application peut maintenant recevoir comme par magie les dernières nouvelles au fur et à mesure. :]

Remarque: Les notifications push ne sont pas garanties d’arriver. C’est OK pour WenderCast, car avoir la liste complète des nouvelles n’est pas trop important pour cette application. En général, cependant, vous ne devez pas utiliser les notifications push comme seul moyen de diffuser du contenu. Au lieu de cela, les notifications push doivent signaler qu’un nouveau contenu est disponible et permettre à l’application de télécharger le contenu à partir de la source (par exemple, à partir d’une API REST).

Travailler avec des notifications actionnables

Les notifications actionnables vous permettent d’ajouter des boutons personnalisés à la notification elle-même. Vous l’avez peut-être remarqué sur les notifications par e-mail ou les Tweets qui vous permettent de « répondre” ou de « favori” sur place.

Votre application peut définir des notifications exploitables lorsque vous vous inscrivez aux notifications à l’aide de catégories. Chaque catégorie de notification peut avoir quelques actions personnalisées prédéfinies.

Une fois enregistré, votre serveur peut définir la catégorie d’une notification push. Les actions correspondantes seront disponibles pour l’utilisateur lorsqu’elles seront reçues.

Pour WenderCast, vous allez définir une catégorie d’actualités avec une action personnalisée nommée Vue. Cette action permettra aux utilisateurs de voir l’article de nouvelles dans l’application s’ils le souhaitent.

Dans registerForPushNotifications(), insérez ce qui suit juste en dessous de la garde et au-dessus de l’appel à getNotificationSettings():

// 1let viewAction = UNNotificationAction( identifier: Identifiers.viewAction, title: "View", options: )// 2let newsCategory = UNNotificationCategory( identifier: Identifiers.newsCategory, actions: , intentIdentifiers: , options: )// 3UNUserNotificationCenter.current().setNotificationCategories()

En passant par ceci, étape par étape:

  1. Créez une nouvelle action de notification, avec la vue titre sur le bouton, qui ouvre l’application au premier plan lorsqu’elle est déclenchée. L’action a un identifiant distinct, qu’iOS utilise pour différencier les autres actions sur la même notification.
  2. Définissez la catégorie news, qui contiendra l’action view. Cela a également un identifiant distinct que votre charge utile devra contenir pour spécifier que la notification push appartient à cette catégorie.
  3. Enregistrez la nouvelle notification exploitable en appelant setNotificationCategories.

Créez et exécutez l’application pour enregistrer les nouveaux paramètres de notification.

Arrière-plan de l’application, puis envoyez la charge utile suivante via l’utilitaire xcrun simctl:

{ "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com", "category": "NEWS_CATEGORY" }}

Lorsque la notification apparaît, tirez dessus pour révéler l’action de vue:

Notification push avec l'action de vue révélée

Sympa ! Toucher la vue lancera WenderCast, mais cela ne fait rien d’excitant pour l’instant. Pour qu’il affiche l’élément d’actualité, vous devez gérer davantage les événements dans le délégué.

Gestion des actions de notification

Chaque fois qu’une action de notification est déclenchée, UNUserNotificationCenter informe son délégué. Retour dans AppDelegate.swift, ajoutez l’extension de classe suivante au bas du fichier:

// MARK: - UNUserNotificationCenterDelegateextension AppDelegate: UNUserNotificationCenterDelegate { func userNotificationCenter( _ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void ) { // 1 let userInfo = response.notification.request.content.userInfo // 2 if let aps = userInfo as? , let newsItem = NewsItem.makeNewsItem(aps) { (window?.rootViewController as? UITabBarController)?.selectedIndex = 1 // 3 if response.actionIdentifier == Identifiers.viewAction, let url = URL(string: newsItem.link) { let safari = SFSafariViewController(url: url) window?.rootViewController? .present(safari, animated: true, completion: nil) } } // 4 completionHandler() }}

C’est le rappel que vous obtenez lorsque l’application s’ouvre en raison d’une action personnalisée. Il peut sembler qu’il se passe beaucoup de choses, mais il n’y a pas grand chose de nouveau ici:

  1. Obtenez le dictionnaire userInfo.
  2. Créez un NewsItem à partir du dictionnaire aps et accédez à l’onglet Actualités.
  3. Vérifiez le actionIdentifier. S’il s’agit de l’action « Affichage” et que le lien est une URL valide, il affiche le lien dans un SFSafariViewController.
  4. Appelez le gestionnaire de complétion que le système vous transmet.

Il y a un dernier bit: Vous devez définir le délégué sur UNUserNotificationCenter. Ajoutez cette ligne en haut de application(_:didFinishLaunchingWithOptions:):

UNUserNotificationCenter.current().delegate = self

Créez et exécutez. Fermez à nouveau l’application, puis envoyez une autre notification de nouvelles avec la charge utile suivante:

{ "aps": { "alert": "New Posts!", "sound": "default", "link_url": "https://raywenderlich.com", "category": "NEWS_CATEGORY" }}

Tirez la notification vers le bas et appuyez sur l’action d’affichage, et vous verrez WenderCast présenter un contrôleur de vue Safari juste après son lancement:

URL du lien de notification ouverte dans une vue Safari

Félicitations, vous avez mis en œuvre un notification! Envoyez-en un peu plus et essayez d’ouvrir la notification de différentes manières pour voir comment elle se comporte.

Envoi vers un appareil réel

Si vous ne souhaitez pas envoyer de notifications push vers un appareil réel ou si vous n’avez pas encore besoin de notifications push silencieuses, vous pouvez ignorer cette section et aller Où aller À partir d’ici?

Cependant, si vous voulez avoir une idée de la façon d’envoyer des notifications push à un appareil réel et essayer de pousser silencieusement, vous devez effectuer une configuration supplémentaire. Téléchargez l’utilitaire PushNotifications. Vous utiliserez cette application utilitaire pour envoyer des notifications à un appareil réel. Pour l’installer, suivez les instructions sous Comment installer. Portez une attention particulière à la façon d’ouvrir l’application car vous devrez modifier certains paramètres pour exécuter cet utilitaire.

Rendez-vous dans le Centre des membres développeurs Apple et connectez-vous.

L’envoi de notifications push nécessite une clé d’authentification. Dans le centre des membres, sélectionnez Profils Certificats, Identifiants &, puis recherchez les clés dans le volet de gauche. À droite du titre des touches se trouve un bouton +. Cliquez dessus pour créer une nouvelle clé.

Donnez un nom à la clé, comme la touche de notification Push. Sous Services clés, sélectionnez Service de notifications Push Apple (APNs).

Exemple de clé de notification push

Cliquez sur Continuer, puis Enregistrez-vous sur l’écran suivant pour créer votre nouvelle clé. Appuyez sur Télécharger. Le fichier téléchargé aura un nom similaire à AuthKey_4SVKWF966R.p8. Gardez une trace de ce fichier — vous en aurez besoin pour envoyer vos notifications! La partie 4SVKWF966R du nom de fichier est l’ID de clé. Vous en aurez aussi besoin.

La dernière pièce dont vous avez besoin est votre identifiant d’équipe. Accédez à la page Détails de l’adhésion du centre des membres pour le trouver.

Vous l’avez fait! Avec votre nouvelle clé, vous êtes maintenant prêt à envoyer votre première notification push! Tu as besoin d’une chose de plus.

Exécutez l’application sur votre appareil réel et copiez le jeton de l’appareil depuis la console du débogueur et préparez-le.

Lancez PushNotifications et procédez comme suit :

  1. Sous Authentification, sélectionnez Jeton.
  2. Cliquez sur le bouton Sélectionner P8 et sélectionnez le .fichier p8 de la section précédente.
  3. Entrez votre identifiant de clé et votre identifiant d’équipe dans les champs appropriés.
  4. Sous Body, entrez l’ID du Bundle de votre application et le jeton de votre appareil.
  5. Modifiez le corps de la requête pour qu’il ressemble à ceci :
{ "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com" }}

Cliquez sur le bouton Envoyer dans PushNotifications.

Testeur de notifications push

Vous devriez recevoir votre notification push:

Votre Première Notification Push

Dépannage des problèmes courants

Voici quelques problèmes que vous pourriez rencontrer:

  • Certaines notifications arrivent, mais pas toutes: Si vous envoyez de nombreuses notifications push simultanément, mais vous n’en recevez que quelques-unes, n’ayez crainte! C’est par conception. APNs maintient une file d’attente QoS (Qualité de service) pour chaque périphérique. La taille de cette file d’attente est de 1, donc si vous envoyez plusieurs notifications, la dernière notification est remplacée.
  • Problème de connexion au service de notification Push: Une possibilité pourrait être qu’un pare-feu bloque les ports utilisés par les APN. Assurez-vous de débloquer ces ports.

L’utilisation de notifications Push silencieuses

Les notifications push silencieuses peuvent réveiller votre application en silence pour effectuer certaines tâches en arrière-plan. WenderCast peut utiliser cette fonctionnalité pour actualiser tranquillement la liste des podcasts.

Avec un composant serveur approprié, cela peut être très efficace. Votre application n’aura pas besoin de rechercher constamment des données. Vous pouvez lui envoyer une notification push silencieuse chaque fois que de nouvelles données sont disponibles.

Pour commencer, sélectionnez à nouveau la cible WenderCast. Cliquez maintenant sur l’onglet Capacités de signature & et ajoutez la capacité des modes d’arrière-plan. Cochez ensuite l’option Notifications à distance:

Vérifiez l'option notifications à distance pour le droit aux modes d'arrière-plan

Maintenant, votre application se réveillera en arrière-plan lorsqu’elle recevra l’une de ces notifications push.

Dans AppDelegate.rapide, trouvez application(_:didReceiveRemoteNotification:fetchCompletionHandler:). Remplacez l’appel à NewsItem.makeNewsItem() par ce qui suit :

// 1if aps as? Int == 1 { let podcastStore = PodcastStore.sharedStore // 2 podcastStore.refreshItems { didLoadNewItems in // 3 completionHandler(didLoadNewItems ? .newData : .noData) }} else { // 4 NewsItem.makeNewsItem(aps) completionHandler(.newData)}

En passant par le code :

  1. Vous vérifiez si content-available est défini sur 1. Si c’est le cas, il s’agit d’une notification silencieuse.
  2. Vous actualisez la liste des podcasts, qui est un appel réseau asynchrone.
  3. Lorsque l’actualisation est terminée, appelez le gestionnaire de complétion pour indiquer au système si l’application a chargé de nouvelles données.
  4. Si ce n’est pas une notification silencieuse, alors c’est un article d’actualité, alors faites un article d’actualité.

Assurez-vous d’appeler le gestionnaire de complétion avec le résultat honnête. Le système mesure la consommation de la batterie et le temps que votre application utilise en arrière-plan et peut accélérer votre application si nécessaire.

C’est tout ce qu’il y a à faire. Pour le tester, le construire et l’exécuter, mettez l’application au premier plan et poussez la charge utile suivante via l’utilitaire PushNotifications:

{ "aps": { "content-available": 1 }}

Si tout se passe bien, rien ne devrait se passer, sauf si un nouveau podcast vient d’être ajouté à la base de données distante. Pour confirmer que le code s’est exécuté comme prévu, définissez un point d’arrêt dans application(_:didReceiveRemoteNotification:fetchCompletionHandler:) et parcourez-le une fois la notification envoyée.

Où aller À Partir d’Ici?

Félicitations! Vous avez terminé ce tutoriel et fait de WenderCast une application complète avec des notifications push!

Vous pouvez télécharger le projet terminé en utilisant le bouton Télécharger les matériaux en haut ou en bas de ce tutoriel.

Vous voulez approfondir tout ce que vous pouvez faire avec les notifications push, telles que la création d’interfaces utilisateur personnalisées et l’envoi d’alertes critiques ? Notre livre de notifications Push par Tutoriels vous apprendra les fonctionnalités avancées des notifications push.

Une autre ressource est le tutoriel sur les notifications Push pour iOS: Tutoriel sur les notifications Push enrichies.

Même si les notifications push sont une partie importante des applications modernes, il est également très courant que les utilisateurs refusent les autorisations de votre application si vous en faites trop. Mais avec un design réfléchi, les notifications push peuvent inciter vos utilisateurs à revenir encore et encore sur votre application!

Cloche de notification de chat mignon

Ce chat a reçu une notification push indiquant que son dîner était prêt!

J’espère que vous avez apprécié ce tutoriel sur les notifications push. Si vous avez des questions, n’hésitez pas à les laisser dans le forum de discussion ci-dessous.

raywenderlich.com Hebdomadaire

Le raywenderlich.com la newsletter est le moyen le plus simple de rester à jour sur tout ce que vous devez savoir en tant que développeur mobile.

Obtenez un résumé hebdomadaire de nos tutoriels et cours, et recevez un cours par e-mail gratuit en bonus!

Note moyenne

4.9/5

Ajouter une note pour ce contenu

Connectez-vous pour ajouter une note

17 notes

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *