iOS 10 Extensions du service de notification

introduction

Lors de la réception d'une notification dans une application iOS, vous souhaiterez peut-être télécharger le contenu en réponse ou modifier le contenu avant qu'il ne soit affiché à l'utilisateur. Dans iOS 10, Apple permet désormais aux applications de le faire via une nouvelle Extension du service de notification

Cela pourrait être utile, par exemple, si vous disposiez d'une application de messagerie dans laquelle votre serveur principal identifiait uniquement les utilisateurs par une sorte de code plutôt que par leur nom. Pour un utilisateur de votre application, les noms et autres détails de leurs contacts peuvent être stockés localement sur l'appareil. Lors de l'envoi d'une notification à un utilisateur lorsqu'il reçoit un message, la charge utile d'origine peut inclure l'identifiant de l'expéditeur, que votre extension de service pourrait remplacer par le nom du contact..

Pour utiliser ce nouveau type d'extension, vous devez développer votre application avec Xcode 8 ou une version ultérieure et le SDK iOS 10..

Veuillez noter les points suivants avant de continuer avec ce conseil rapide:

  • Cet article va ne pas suivre le processus de configuration de votre application pour l'envoi / la réception de notifications locales ou push. 
  • L'exemple de code présenté utilisera des API introduites dans le cadre UserNotifications, également nouveau dans iOS 10.. 
  • Si vous souhaitez apprendre à créer des interfaces personnalisées pour vos notifications, vous devez les envoyer via notification. contenu des extensions.

Si vous souhaitez en savoir plus sur l'un de ces sujets, vous pouvez lire ces autres didacticiels:

1. Configuration de l'extension

Le processus d'ajout d'une extension de service de notification à une application iOS est identique à celui des autres extensions. Dans la barre de menu Xcode, accédez à Fichier> Nouveau> Cible… et sélectionnez le Extension du service de notification modèle dans le menu qui apparaît:

Dans le menu suivant, vous pouvez renseigner des informations spécifiques à l'application..

Une fois votre extension créée, vous verrez deux fichiers (ou trois si vous utilisez Objective-C) dans le dossier d’extensions du Xcode. Navigateur de projet:

  • NotificationService.swift, qui contiendra tout le code et la logique de votre extension.
  • Info.plist, qui contient les détails de configuration pour votre extension.

le Info.plist Le fichier contient toutes les informations requises pour votre extension. Le seul fichier à modifier est le fichier NotificationService.swift fichier.

2. Cycle de vie de l'extension

Une fois que vous avez configuré votre application avec une extension de service de notification, le processus suivant aura lieu pour chaque notification:

  1. L'application reçoit une notification.
  2. Le système crée une instance de votre classe d'extension et la lance en arrière-plan..
  3. Votre extension effectue des modifications de contenu et / ou télécharge du contenu..
  4. Si votre poste met trop de temps à faire son travail, il sera averti et immédiatement résilié..
  5. La notification est affichée à l'utilisateur.

Comme vous pouvez le constater, lorsque vous utilisez une extension de service de notification, vous ne disposez que d’un temps limité pour effectuer le travail nécessaire. Si votre poste prend trop de temps, il sera arrêté par le système et la notification sera envoyée comme si vous n'aviez aucun poste.. 

3. Code d'extension

Votre extension de service de notification existe en tant qu’objet unique, qui est une sous-classe du UNNotificationServiceExtension classe. Cette classe définit les méthodes suivantes:

  • didReceive (_: withContentHandler :) qui fournit votre extension avec l'original UNNotificationRequest objet. Dans cette méthode, vous créez un nouveau UNNotificationContent objet et transmettez-le en tant que paramètre au gestionnaire d'achèvement lorsque vous avez terminé. Ce contenu de notification peut être créé à partir de rien ou à partir d'une copie modifiable du contenu original. Le code suivant montre un exemple d'implémentation de cette méthode:
override func didReceive (_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) si let copy = request.content.mutableCopy () as? UNMutableNotificationContent // Modifier les propriétés de copy contentHandler (copy)
  • serviceExtensionTimeWillExpire qui est exécuté lorsque votre extension est sur le point d'être terminée par le système. Cette méthode ne contient aucun paramètre, donc si vous voulez que votre extension fournisse une en cours version de votre contenu modifié, vous devrez conserver une référence au gestionnaire d’achèvement depuis le didReceive (_: withContentHandler :) méthode. Le code suivant montre comment cela pourrait être réalisé dans votre sous-classe d'extension:
// Définit cette propriété à partir de la méthode didReceive (_: withContentHandler :) méthode var content contentHandler: ((UNNotificationContent) -> Void)? // Modifiez cette propriété lorsque vous manipulez le contenu var bestAttemptContent: UNMutableNotificationContent? redéfinit func serviceExtensionTimeWillExpire () si laissez contentHandler = contentHandler, laissez bestAttemptContent = bestAttemptContent contentHandler (bestAttemptContent)

4. Limites d'extension

La dernière chose importante à prendre en compte lors de l'utilisation d'une extension de service de notification concerne les conditions dans lesquelles l'extension fonctionnera.. 

Tout d'abord, votre extension ne sera lancée que pour les notifications configurées pour afficher des alertes à l'écran à l'utilisateur. Cela signifie que les notifications silencieuses (comme celles utilisées pour mettre à jour les badges d'application) ne déclencheront pas votre extension.. 

Deuxièmement, la notification entrante aps dictionnaire dans sa charge utile doit inclure le contenu mutable clé avec une valeur de 1

La configuration correcte de vos notifications dépendra en définitive de la propre configuration de votre application. Pour répondre à la deuxième condition, en particulier, il peut être nécessaire de modifier votre implémentation de notification push côté serveur. Si vous n'utilisez pas de serveur personnalisé et utilisez à la place un service tiers pour votre implémentation de notification push, je vous conseillerais alors de rechercher et de lire leur documentation de support si vous ne parvenez pas à ce que votre extension fonctionne..

Conclusion

À travers le nouveau UNNotificationServiceExtension classe dans iOS 10, il est très simple de mettre en œuvre une extension de service de notification pour vos propres applications. Quel que soit votre cas d'utilisation, ces API vous permettent de modifier facilement le contenu d'une notification avant de la montrer à l'utilisateur..

Comme toujours, assurez-vous de laisser vos commentaires dans la section commentaires ci-dessous. Et consultez certains de nos autres articles sur iOS 10 et le développement d'applications Swift.!