Avec iOS 10, tvOS 10 et watchOS 3, Apple introduit un nouveau cadre appelé le UserNotifications cadre. Ce nouvel ensemble d'API offre une manière unifiée, orientée objet, de travailler avec les notifications locales et distantes sur ces plates-formes. Ceci est particulièrement utile car, comparé aux API existantes, les notifications locales et distantes sont maintenant traitées de manière très similaire, et l'accès au contenu des notifications ne se fait plus uniquement à l'aide de dictionnaires..
Dans ce tutoriel, je vais passer en revue les bases de ce nouveau cadre et montrer comment vous pouvez facilement en tirer parti pour prendre en charge les notifications pour vos applications..
Ce tutoriel nécessite que vous exécutiez Xcode 8 avec les derniers kits de développement iOS, tvOS et watchOS..
La première étape pour toute application prenant en charge les notifications consiste à demander l’autorisation de l’utilisateur. Comme avec les versions précédentes d'iOS, lors de l'utilisation du cadre UserNotifications, il est courant de le faire dès que l'application a fini de se lancer..
Avant d'utiliser l'une des API UserNotifications, vous devez ajouter l'instruction d'importation suivante à tous les fichiers de code Swift qui accèdent au framework:
importer UserNotifications
Ensuite, pour enregistrer votre application pour les notifications, vous devrez ajouter le code suivant à votre AppDéléguer
de application (_: didFinishLaunchingWithOptions :)
méthode:
let center = UNUserNotificationCenter.current () let options: UNAuthorizationOptions = [.alert, .badge, .sound] center.requestAuthorization (options: options) (accordé, erreur) dans si accordé application.registerForRemoteNotifications ()
Initialement, avec ce code, nous obtenons une référence au courant UNUserNotificationCenter
objet. Ensuite, nous configurons notre UNAuthorizationOptions
avec les capacités de notification que nous voulons que notre application ait. Veuillez noter que vous pouvez avoir n'importe quelle combinaison d'options ici, par exemple, juste alerte
ou les deux badge
et du son
.
À l'aide de ces deux objets, nous demandons ensuite l'autorisation à notre application d'afficher des notifications en appelant le requestAuthorization (options: completionHandler :)
méthode sur notre UNUserNotificationCenter
exemple. Le bloc de code du gestionnaire d'achèvement comporte deux paramètres:
Bool
valeur indiquant si l'autorisation a été accordée ou non par l'utilisateur.Erreur
objet qui contiendra des informations si, pour une raison quelconque, le système n'était pas en mesure de demander une autorisation de notification pour votre application.Vous verrez que dans le code ci-dessus, si l'autorisation est accordée par l'utilisateur, nous nous enregistrons pour les notifications à distance. Si vous souhaitez implémenter les notifications push, cette ligne de code est requise. Vous devrez également faire un peu de configuration supplémentaire pour votre projet, comme détaillé dans ce tutoriel:
Veuillez noter que l’enregistrement pour les notifications à distance appellera le même UIApplication
méthodes de rappel comme dans les versions précédentes d'iOS. En cas de succès, application (_: didRegisterForRemoteNotificationsWithDeviceToken :)
sera appelé, et application (_: didFailToRegisterForRemoteNotificationsWithError :)
sera appelé en cas d'échec.
Pour cette section du didacticiel, nous nous concentrerons entièrement sur la planification des notifications locales à l'aide du cadre UserNotifications. L'envoi de notifications push à distance n'a pas changé en raison de l'introduction de ce nouveau cadre..
Une notification locale, avant d’être programmée, est représentée par une instance de UNNotificationRequest
classe. Les objets de ce type sont constitués des composants suivants:
Chaîne
ce qui vous permet de distinguer les notifications individuelles les unes des autres.UNNotificationContent
objet contenant toutes les informations nécessaires à l'affichage de votre notification, notamment le titre, le sous-titre et le numéro de badge de l'application.UNNotificationTrigger
objet utilisé par le système pour déterminer quand votre notification doit être "envoyée" à votre application. Pour commencer, nous allons examiner les différents types de déclencheurs que vous pouvez configurer pour les notifications locales. le UNNotificationTrigger
class est une classe abstraite, ce qui signifie que vous ne devez jamais en créer d'instance directement. Au lieu de cela, vous utiliserez les sous-classes disponibles. Actuellement, le cadre UserNotifications vous en fournit trois:
UNTimeIntervalNotificationTrigger
, qui permet à une notification d'être envoyée une quantité de temps définie après la planification.UNCalendarNotificationTrigger
, qui permet d'envoyer une notification à une date et une heure spécifiques, quelle que soit l'heure à laquelle elle a été programmée.UNLocationNotificationTrigger
, qui permet d'envoyer une notification lorsque l'utilisateur entre ou quitte une région géographique désignée.Le code suivant vous montre comment créer un déclencheur de chaque type:
let timeTrigger = UNTimeIntervalNotificationTrigger (timeInterval: 60.0 * 60.0, répète: false) var date = DateComponents () date.hour = 22 let calendarTrigger = UNCalendarNotificationTrigger (dateComposants (), date, heure de lecture: répète: true) 120.0) let region = CLCircularRegion (centre: centre, rayon: 500.0, identificateur: "Emplacement") region.notifyOnEntry = true; region.notifyOnExit = false; let locationTrigger = UNLocationNotificationTrigger (région: région, répète: false)
Avec le code ci-dessus, les conditions de déclenchement suivantes ont été créées:
timeTrigger
se déclenche une heure après la notification est prévue. le intervalle de temps
paramètre passé dans le UNTimeIntervalNotificationTrigger
l'initialiseur est mesuré en secondes.calendarTrigger
va tirer à plusieurs reprises tous les jours à 22h00. La date et l’heure exactes du déclenchement de la gâchette peuvent facilement être modifiées en modifiant d’autres propriétés du DateComponents
objet que vous passez dans le UNCalendarNotificationTrigger
initialiseur.emplacementTrigger
se déclenche lorsque l'utilisateur arrive à moins de 500 mètres de la coordonnée désignée, dans ce cas 40 ° N 120 ° E. Comme vous pouvez le constater d'après le code, ce type de déclencheur peut être utilisé pour toute taille de coordonnée et / ou de région et peut également déclencher une notification lors de l'entrée et de la sortie de la région..Ensuite, nous devons créer le contenu de la notification. Ceci est fait en créant une instance du UNMutableNotificationContent
classe. Cette classe doit être utilisée comme le standard UNNotificationContent
la classe a un accès en lecture seule pour les différentes propriétés du contenu de la notification.
Le code suivant montre comment le contenu d'une notification de base peut être créé:
let content = UNMutableNotificationContent () content.title = "Titre de la notification" content.subtitle = "Sous-titre de la notification" content.body = "Certaines informations du corps de la notification doivent être affichées." content.badge = 1 content.sound = UNNotificationSound.default ()
Si vous voulez une liste complète des propriétés disponibles, jetez un coup d’œil à la UNMutableNotificationContent
référence de classe.
Enfin, il ne reste plus qu’à créer le UNNotificationRequest
objet et le programmer. Cela peut être fait avec le code suivant:
let request = UNNotificationRequest (identifiant: "LocalNotification", contenu: contenu, déclencheur: timeTrigger) UNUserNotificationCenter.current (). add (request) erreur dans if let error = erreur // Faire quelque chose avec une erreur else // Request a été ajouté avec succès
Initialement avec ce code, nous créons l'objet de requête en transmettant un identifiant, un objet de contenu et un déclencheur à l'initialiseur. Nous appelons ensuite le add (_: completionHandler :)
méthode sur le courant UNUserNotificationCenter
object et utiliser le gestionnaire d'achèvement pour exécuter la logique selon que la notification a été programmée correctement ou non.
Lorsque vous utilisez la structure UserNotifications, le traitement des notifications entrantes est géré par un objet que vous désignez conforme à la UNUserNotificationCenterDelegate
protocole. Cet objet peut être ce que vous voulez et ne doit pas obligatoirement être le délégué de l'application comme dans les versions précédentes d'iOS..
Cependant, il est important de noter que vous devez définir votre délégué avant le lancement complet de votre application. Pour une application iOS, cela signifie que vous devez affecter votre délégué à l'intérieur du application (_: willFinishLaunchingWithOptions :)
ou application (_: didFinishLaunchingWithOptions :)
méthode de votre délégué d'application. La définition du délégué pour les notifications utilisateur se fait très facilement avec le code suivant:
UNUserNotificationCenter.current (). Delegate = delegateObject
Désormais, avec votre ensemble de délégués, lorsqu'une notification est reçue par l'application, vous ne devez vous soucier que de deux méthodes. Les deux méthodes sont passées un UNNotification
objet, qui représente la notification en cours de réception. Cet objet contient un rendez-vous amoureux
propriété, qui vous indique exactement quand la notification a été remise, et un demande
propriété, qui est une instance de la UNNotificationRequest
classe mentionnée plus tôt. À partir de cet objet de requête, vous pouvez accéder au contenu de la notification ainsi qu'au déclencheur (si nécessaire) de la notification. Cet objet déclencheur sera une instance de l'un des UNNotificationTrigger
sous-classes mentionnées précédemment ou, dans le cas des notifications push, une instance de UNPushNotificationTrigger
classe.
La première méthode définie par le UNUserNotificationCenterDelegate
le protocole est le userNotificationCenter (_: willPresent: withCompletionHandler :)
méthode. Ceci n'est appelé que lorsque votre application est en cours d'exécution au premier plan et reçoit une notification. À partir de là, vous pouvez accéder au contenu de la notification et afficher votre propre interface personnalisée dans votre application si nécessaire. Vous pouvez également demander au système de présenter la notification avec une variété d'options, comme cela serait normalement le cas si votre application n'était pas en cours d'exécution. Les options disponibles sont:
Le code suivant montre un exemple de mise en oeuvre de la userNotificationCenter (_: willPresent: withCompletionHandler :)
méthode:
func userNotificationCenter (_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) let content = notification.request.content // Traitement du contenu de la notification, notification. / Affiche la notification comme alerte normale et joue le son
L’autre méthode définie par le UNUserNotificationCenterDelegate
le protocole est le userNotificationCenter (_: didReceive: withCompletionHandler :)
méthode. Cette méthode est appelée lorsque l'utilisateur interagit avec une notification pour votre application de quelque manière que ce soit, y compris en la rejetant ou en ouvrant votre application..
Au lieu d'une UNNotification
objet, cette méthode a un UNNotificationResponse
objet passé en paramètre. Cet objet contient le UNNotification
objet représentant la notification livrée. Il comprend également un actionIdentifier
propriété pour déterminer comment l'utilisateur a interagi avec la notification. Dans le cas où la notification est rejetée ou que votre application est ouverte, le cadre UserNotifications fournit des identificateurs d'action constants que vous pouvez comparer avec.
Le code suivant montre un exemple de mise en oeuvre de la userNotificationCenter (_: didReceive: withCompletionHandler :)
méthode:
func userNotificationCenter (_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler achèvementHandler: @escaping () -> Void) (laissez actionIdentifier = response.actionIdentifier switch actionIdentifier case UNNotificationDismiss ) cas UNNotificationDefaultActionIdentifier: // L'application a été ouverte à partir de la notification // Effectuer quelque chose d'achèvementHandler () par défaut: completionHandler ()
Veuillez noter que pour les deux méthodes de délégation, il est essentiel d'appeler le gestionnaire d'achèvement dès que le traitement de la notification est terminé. Une fois que vous avez terminé, le système sait que vous en avez terminé avec la notification et peut exécuter tous les processus nécessaires, tels que l'insertion de la notification dans le Centre de notifications de l'utilisateur..
Parfois, un utilisateur de votre application peut recevoir plusieurs notifications lorsque votre application n'est pas en cours d'exécution. Ils peuvent également ouvrir votre application directement à partir de l'écran d'accueil et non via une notification. Dans aucun de ces cas, aucun des deux UNUserNotificationCenterDelegate
les méthodes de protocole seront appelées. Lorsque vous travaillez avec des notifications locales, vous pouvez également parfois vouloir supprimer une notification programmée avant qu'elle ne soit affichée à l'utilisateur..
De ce fait, la structure UserNotifications fournit les méthodes suivantes sur la version actuelle. UNUserNotificationCenter
instance à utiliser avec les notifications locales en attente et les notifications livrées qui n’ont pas encore été traitées:
getPendingNotificationRequests (completionHandler :)
vous fournit un tableau de UNNotificationRequest
objets dans le gestionnaire d'achèvement. Ce tableau contiendra toutes les notifications locales que vous avez planifiées et qui n'ont pas encore été déclenchées..removePendingNotificationRequests (withIdentifiers :)
supprime toutes les notifications locales planifiées avec les identifiants contenus dans Chaîne
tableau que vous passez en paramètre.removeAllPendingNotificationRequests
supprime toutes les notifications locales planifiées pour votre application.getDeliveredNotifications (completionHandler :)
vous fournit un tableau de UNNotification
objets dans le gestionnaire d'achèvement. Ce tableau contiendra toutes les notifications délivrées pour votre application qui sont toujours visibles dans le centre de notifications de l'utilisateur..removeDeliveredNotifications (withIdentifiers :)
supprime toutes les notifications livrées avec les identifiants contenus dans Chaîne
tableau que vous transmettez à partir du centre de notifications de l'utilisateur.removeAllDeliveredNotifications
supprime toutes les notifications livrées pour votre application.La structure UserNotifications permet également à votre application de tirer facilement parti des catégories et des actions de notification personnalisées introduites dans iOS 8..
Tout d'abord, vous devez définir les actions personnalisées et les catégories que votre application prend en charge à l'aide du UNNotificationAction
et UNNotificationCategory
classes respectivement. Pour les actions pour lesquelles vous souhaitez que l'utilisateur puisse saisir du texte, vous pouvez utiliser le UNTextInputNotificationAction
classe, qui est une sous-classe de UNNotificationAction
. Une fois vos actions et catégories définies, il vous suffit alors d’appeler le setNotificationCategories (_ :)
méthode sur le courant UNUserNotificationCenter
exemple. Le code suivant montre comment vous pouvez facilement enregistrer une réponse et supprimer des actions pour une notification de catégorie de message dans votre propre application:
let replyAction = UNTextInputNotificationAction (identifiant: "com.usernotificationstutorial.reply", titre: "Réponse", options: [], textInputButtonTitle: "Envoyer", textInputPlaceholder: "Tapez votre message") let deleteAction = UNNotificationAction (identifiant: "com." usernotificationstutorial.delete ", titre:" Supprimer ", options: [.authenticationRequired, .destructive]) let category = UNNotificationCategory (identifiant:" com.usernotificationstutorial.message ", actions: [replyAction, deleteAction], intentIdentifiers: [], options : []) center.setNotificationCategories ([catégorie])
Ensuite, lorsqu'un utilisateur utilise l'une de vos actions de notification personnalisées, le même userNotificationCenter (_: didReceive: withCompletionHandler :)
La méthode que nous avons abordée précédemment est appelée. Dans ce cas, l'identifiant d'action du UNNotificationResponse
L'objet transmis sera le même que celui que vous avez défini pour votre action personnalisée. Il est également important de noter que, si l'utilisateur interagit avec une action de notification d'entrée de texte, l'objet de réponse transmis à cette méthode sera de type UNTextInputNotificationResponse
.
Le code suivant montre un exemple d'implémentation de cette méthode, incluant la logique pour les actions créées précédemment:
func userNotificationCenter (_ center: UNUserNotificationCenter, réponse didReceive: UNNotificationResponse, withCompletionHandler achèvementHandler: @escaping () -> Nul: a été congédié par l'utilisateur // Cas quelque chose completionHandler () UNNotificationDefaultActionIdentifier: // L'application a été ouverte à partir de la notification // Motif d'achèvement de tâche ")" com.usernotificationstutorial.reply ": si laissez textResponse = response as? UNTextInputNotificationResponse let reply = textResponse.userText // Envoi du message de réponse d'achèvementHandler () cas "com.usernotificationstutorial.delete": // Suppression du message d'achèvementHandler () par défaut: achèvementHandler ()
En outre, si vous souhaitez tirer parti des actions personnalisées pour vos notifications locales, vous pouvez simplement définir la catégorieIdentifiant
propriété sur votre UNMutableNotificationContent
objet lors de la création de la notification.
Le nouveau framework UserNotifications fournit des API orientées objet entièrement fonctionnelles et faciles à utiliser pour travailler avec les notifications locales et distantes sur iOS, watchOS et tvOS. Il est très facile de planifier les notifications locales pour une variété de scénarios et de simplifier grandement le flux de traitement des notifications entrantes et des actions personnalisées..
Comme toujours, veillez à laisser vos commentaires dans les commentaires ci-dessous. Et consultez certains de nos autres articles et tutoriels sur les nouvelles fonctionnalités d'iOS 10 et watchOS 3.!