Résumé des nouvelles mises à jour des fonctionnalités iOS
Nouvelles fonctionnalités d’iOS 14
Les nouvelles fonctionnalités d’iOS 14 incluent principalement APP Clip, le presse-papiers, la protection de la vie privée et d’autres nouveautés, mais il n’y a aucune nouvelle fonctionnalité liée aux notifications.
Nouvelles fonctionnalités d’iOS 13
Les nouveautés d’iOS 13 incluent principalement le mode sombre, Swift UI et d’autres nouvelles fonctionnalités, mais il n’y a pas de nouveauté concernant les notifications.
Nouvelles fonctionnalités d’iOS 12
Regroupement des notifications push
Dans iOS 12, les notifications du même type sont combinées dans un groupe de notifications. Les utilisateurs peuvent développer toutes les notifications du groupe en cliquant sur le groupe de notifications.

Deux méthodes de regroupement sont utilisées pour les notifications : le regroupement automatique et l’identifiant de thread. Les développeurs n’ont rien à faire pour le regroupement automatique, le système regroupe les notifications push selon le bundleId de l’App. Si vous souhaitez regrouper les notifications de façon plus précise, il faut utiliser les identifiants de thread.

Les utilisateurs peuvent choisir le mode de regroupement (automatique, par application, désactivé).
L’attribut Thread identifier existe depuis iOS 10, mais c’est seulement à partir d’iOS 12 qu’il permet réellement le regroupement.
// L’identifiant unique du thread ou de la conversation lié à cette demande de notification. Il sera utilisé pour regrouper visuellement les notifications.
@property (NS_NONATOMIC_IOSONLY, copy) NSString *threadIdentifier __TVOS_PROHIBITED;
Paramétrage du format de résumé
Après le regroupement automatique des notifications, un résumé apparaît en bas. Le format par défaut est : n notifications supplémentaires. Ce format est personnalisable. Première méthode : personnalisation du format via UNNotificationCategory
+ (instancetype)categoryWithIdentifier:(NSString *)identifier
actions:(NSArray<UNNotificationAction *> *)actions
intentIdentifiers:(NSArray<NSString *> *)intentIdentifiers
hiddenPreviewsBodyPlaceholder:(nullable NSString *)hiddenPreviewsBodyPlaceholder
categorySummaryFormat:(nullable NSString *)categorySummaryFormat
options:(UNNotificationCategoryOptions)options __IOS_AVAILABLE(12.0) __WATCHOS_PROHIBITED;
La seconde personnalisation se fait via UNNotificationContent
/// L’argument à insérer dans le résumé pour cette notification.
@property (NS_NONATOMIC_IOSONLY, readonly, copy) NSString *summaryArgument __IOS_AVAILABLE(12.0) __WATCHOS_PROHIBITED __TVOS_PROHIBITED;
/// Un nombre indiquant combien d’éléments sont représentés dans le résumé.
/// Par exemple, si une app de podcast envoie une notification pour 3 nouveaux épisodes d’une émission,
/// l’argument doit être le nom de l’émission et le nombre doit être 3.
/// La valeur par défaut est 1 et ne peut pas être 0.
@property (NS_NONATOMIC_IOSONLY, readonly, assign) NSUInteger summaryArgumentCount __IOS_AVAILABLE(12.0) __WATCHOS_PROHIBITED __TVOS_PROHIBITED;
Gestion des notifications
Apple a ajouté un bouton « Gérer » pour les messages, accessible en balayant vers la gauche.

Autorisation temporaire
L’autorisation temporaire se manifeste par la présence de deux boutons dans la notification push, permettant à l’utilisateur de choisir activement.

Notification d’alerte
Par exemple pour la sécurité familiale, la santé, la sécurité publique, etc. Ce type de message exige que l’utilisateur agisse. Le scénario le plus simple est l’installation d’une caméra à la maison : si quelqu’un est détecté alors que vous êtes au travail, la caméra vous envoie un message. Ce type de notification requiert un certificat spécial.

Nouvelles fonctionnalités d’iOS 10
Instructions
iOS 10 ajoute de nombreuses nouveautés autour des notifications. Consultez le blog officiel d’EngageLab pour plus de détails.
Extension de service iOS 10
Instructions
L’Extension de Service a été ajoutée dans iOS 10.
L’illustration officielle est présentée ci-dessous.
Cela signifie qu’avant que les APNs n’atteignent votre appareil, ils sont traités par une couche de services d’Extension, permettant aux utilisateurs de configurer leurs propres paramètres et d’ajouter de la variété aux APNs.
Méthode d’utilisation
L’Extension de Service est simple à utiliser. Il faut d’abord créer un service Extension, comme illustré ci-dessous.

Quelques points à noter :
- Le Bundle Identifier de l’Extension de Service ne doit pas être identique à celui du Main Target (votre App principale). Sinon, une erreur de BundleID dupliqué sera générée.
- Le Bundle Identifier de l’Extension de Service doit se situer dans l’espace de nom du Main Target. Par exemple, si le BundleID du Main Target est io.mtpush.xxx, alors le BundleID de l’Extension de Service doit être du type io.mtpush.xxx.yyy. Sinon, une erreur peut survenir.
Une fois votre Extension de Service créée et utilisée avec succès, vous remarquerez dans votre projet une classe contenant deux méthodes.
- didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent *contentToDeliver))contentHandler
- serviceExtensionTimeWillExpire
Voici l’explication officielle de la première méthode : Appelez contentHandler avec le contenu de notification modifié à livrer. Si le gestionnaire n’est pas appelé avant l’expiration du service, la notification non modifiée sera livrée. En résumé, cette méthode est appelée à l’arrivée des APNs, vous pouvez alors traiter le contenu push, puis utiliser contentHandler pour le traitement. Mais si le délai est trop long, les APNs seront affichés tels quels. Autrement dit, vous pouvez personnaliser vos notifications dans cette méthode. La seconde méthode sert de solution de secours à la première. Elle est appelée juste avant l’expiration, ce qui permet de traiter rapidement le message APNs.
Intégration iOS 9
Changements iOS 9 affectant les sections SDK :
- Ajout du format d’encodage bitCode. Si le SDK ne supporte pas bitCode, vous ne pouvez pas activer l’option bitCode lors de l’intégration.
- Symptôme : Après intégration du SDK, la compilation échoue et le journal d’erreur contient des informations d’erreur bitCode.
- La connexion par défaut est https. Si la requête est en http, il faut configurer manuellement le plist pour supporter le service http. Actuellement, toutes nos requêtes serveur utilisent le service http.
- Symptôme : Après intégration du SDK, toutes les requêtes http liées à MTPush affichent une erreur de connexion ou un délai d’attente. Cela peut être la cause.
Solution bitCode
- MTPush iOS SDK v1.8.7 et versions ultérieures supportent bitCode, une nouveauté d’iOS 9.
Solution Https
Cette étape n’est pas requise pour MTPush 2.0.0 ou supérieur.
- Il faut ajouter activement le type Dictionnaire NSAppTransportSecurity dans le Info.plist du projet.
- Ajouter NSAllowsArbitraryLoads de type Boolean sous NSAppTransportSecurity, et le régler sur YES.
iOS 9 UIUserNotificationActionBehaviorTextInput
Version supportée
Disponible à partir de la version v1.8.0.
- Le plus grand changement d’iOS 9 concernant le push est la modification du type de catégorie de push. Basé sur les catégories existantes, un type d’action texte a été ajouté. Ce paramètre sert à enregistrer les éléments saisis via le texte de raccourci de la notification.
- Cette catégorie se compose d’une série de UIUserNotificationCategory. Chaque objet UIUserNotificationCategory permet d’ajouter un ensemble de paramètres de type UIMutableUserNotificationAction pour enrichir la barre de notification. Désormais, iOS 9 ajoute au type UIMutableUserNotificationAction le type d’entrée texte (UIUserNotificationActionBehaviorTextInput), à définir via behavior (propriété disponible uniquement sous iOS 9).
- iOS 9 utilise deux nouvelles méthodes de rappel pour gérer l’événement de clic sur un bouton :
- (void)application:(UIApplication *)application handleActionWithIdentifier:(nullable NSString *)identifier forLocalNotification:(UILocalNotification *)notification withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void(^)())completionHandler NS_AVAILABLE_IOS(9_0)
- (void)application:(UIApplication *)application handleActionWithIdentifier:(nullable NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void(^)())completionHandler NS_AVAILABLE_IOS(9_0)
Remarque :
- Lorsque l’Action est UIUserNotificationActionBehaviorTextInput, il faut utiliser responseInfo UIUserNotificationActionResponseTypedTextKey pour obtenir le texte saisi, et UIUserNotificationTextInputActionButtonTitleKey pour obtenir le type de bouton cliqué.
- Lorsque l’Action est UIUserNotificationActionBehaviorDefault, responseInfo est nil, il faut utiliser identifier pour distinguer le bouton cliqué et traiter l’action.
Paramétrage côté client
Configurer les notifications avec réponse rapide
# ifdef __IPHONE_9_0
UIMutableUserNotificationAction *replyAction = [[UIMutableUserNotificationAction alloc]init];
replyAction.title = @"Répondre";
replyAction.identifier = @"comment-reply";
replyAction.activationMode = UIUserNotificationActivationModeBackground;
replyAction.behavior = UIUserNotificationActionBehaviorTextInput;
UIMutableUserNotificationCategory *category = [[UIMutableUserNotificationCategory alloc]init];
category.identifier = @"reply";
[category setActions:@[replyAction] forContext:UIUserNotificationActionContextDefault];
# endif
Utiliser les fonctions de rappel
- (void)application:(UIApplication *)application handleActionWithIdentifier:(nullable NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void(^)())completionHandler NS_AVAILABLE_IOS(9_0) {
if ([identifier isEqualToString:@"comment-reply"]) {
NSString *response = responseInfo[UIUserNotificationActionResponseTypedTextKey];
// Traiter le texte saisi
}
completionHandler();
}
Paramétrage côté serveur
Format du contenu serveur : le champ category est ajouté à aps, lorsque ce champ correspond à l’identifiant UIMutableUserNotificationCategory côté client, l’action et le bouton s’affichent.
exemple de payload :
{"aps":{"alert":"example", "sound":"default", "badge": 1, "category":"reply"}}
iOS 8 UILocalNotification
Trois paramètres ont été ajoutés à UILocalNotification dans iOS 8 : region, regionTriggersOnce et category.
- region : contrôle le déclenchement de la notification à l’entrée ou à la sortie d’une zone géographique. Pour utiliser cette fonction, l’utilisateur doit avoir l’autorisation « lors de l’utilisation » pour CoreLocation.
- regionTriggersOnce (BOOL) : Si OUI, la notification ne se déclenche qu’une seule fois, sinon elle se déclenche à chaque entrée ou sortie.
- category : Si localNotification est enregistré via + [UIUserNotificationSettings SettingsForUserNotificationTypes: userNotificationActionSettings:], la catégorie permet d’obtenir la catégorie d’enregistrement de la notification.
Paramétrage côté client
Utilisation de UILocalNotification
// configurer localNotification
CLLocationCoordinate2D coordinate2D;
coordinate2D.latitude = 100.0;
coordinate2D.longitude = 100.0;
CLRegion *currentRegion =
[[CLCircularRegion alloc] initWithCenter:coordinate2D
radius:CLLocationDistanceMax
identifier:@"test"];
[APService setLocalNotification:[NSDate dateWithTimeIntervalSinceNow:120]
alertBody:@"test ios8 notification"
badge:0
alertAction:@"Annuler"
identifierKey:@"1"
userInfo:nil
soundName:nil
region:currentRegion
regionTriggersOnce:YES
category:@"test"];
iOS 8 UIUserNotificationSettings
Version supportée
Disponible à partir de la version v1.8.0.
- Le plus grand changement d’iOS 8 concernant le push a été la modification de l’interface d’enregistrement du push. Un paramètre de catégorie a été ajouté au type de push d’origine, permettant d’enregistrer un groupe d’événements de boutons associés aux notifications.
- Cette catégorie se compose d’une série de UIUserNotificationCategory. Chaque objet UIUserNotificationCategory permet à votre app de répondre à des notifications locales ou distantes. Le titre de chaque objet est présenté à l’utilisateur comme titre de chaque bouton de notification. Lorsque l’utilisateur clique sur un bouton, le système appelle les callbacks in-app application:handleActionWithIdentifier:forRemoteNotification:completionHandler: ou application:handleActionWithIdentifier:forLocalNotification:completionHandler:.
Paramétrage côté client
Utiliser UIUserNotificationCategory
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
NSMutableSet *categories = [NSMutableSet set];
UIMutableUserNotificationCategory *category = [[UIMutableUserNotificationCategory alloc] init];
category.identifier = @"identifier";
UIMutableUserNotificationAction *action = [[UIMutableUserNotificationAction alloc] init];
action.identifier = @"test2";
action.title = @"test";
action.activationMode = UIUserNotificationActivationModeBackground;
action.authenticationRequired = YES;
// OUI s’affiche en rouge et NON en bleu
action.destructive = NO;
NSArray *actions = @[action];
[category setActions:actions forContext:UIUserNotificationActionContextMinimal];
[categories addObject:category];
}
Utiliser UIUserNotificationType
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
[APService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:categories];
} else {
[APService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:nil];
}
Utiliser les fonctions de rappel
// Appelée lorsque votre app a été activée suite à la sélection d’une action sur une notification distante.
// Un identifiant d’action nil indique l’action par défaut.
// Vous devez appeler le gestionnaire de complétion dès que vous avez fini de traiter l’action.
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo
completionHandler:(void (^)())completionHandler {}
Paramétrage côté serveur
Format du contenu serveur : le champ category est ajouté à aps, lorsque ce champ correspond à l’identifiant UIMutableUserNotificationCategory côté client, l’action et le bouton s’affichent.
exemple de payload :
{"aps":{"alert":"example", "sound":"default", "badge": 1, "category":"identifier"}}
iOS 7 Notification push en arrière-plan
Le plus grand changement du push dans iOS 7 est la possibilité d’exécuter un morceau de code en arrière-plan après réception d’une notification, ce qui permet de récupérer des mises à jour serveur. Scénarios d’application : chat (multimédia), mise à jour d’e-mail, synchronisation de contenus par abonnement via notification, amélioration de l’expérience utilisateur.
Les notifications push distantes par rapport aux versions précédentes sont illustrées dans les deux images officielles Apple ci-dessous.


Si seul content-available: 1 est transmis sans badge, son, ni contenu de message, des opérations comme la mise à jour de contenu peuvent être effectuées sans déranger l’utilisateur : on parle alors de « notifications push silencieuses ».

Paramétrage côté client
Activer les notifications push distantes
Vous devez modifier les Capabilities de votre app dans Xcode pour activer les notifications distantes. Voir l’image ci-dessous :

Modifier le gestionnaire de notifications
Une fois enregistré dans Background Modes -> Remote notifications, le gestionnaire de notifications devient la fonction suivante, où le code de push en arrière-plan est également appelé.
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler;
Paramétrage côté serveur
Les messages push doivent inclure content-available: 1 comme paramètre obligatoire pour l’exécution en arrière-plan. Sans ce champ, le comportement est identique à celui des notifications push classiques avant iOS 7.
Push via le portail web
Dans les paramètres optionnels, sélectionnez les paramètres associés.

Utiliser l’API push
Il suffit d’ajouter le champ content-available":true dans l’API Push iOS (prise en charge ultérieure).
Limitations et points d’attention
- Les « notifications push silencieuses » sont soumises à des limitations de fréquence imposées par Apple. Ainsi, toutes les notifications silencieuses ne déclenchent pas toujours la fonction côté client comme prévu.
- La fenêtre d’exécution fournie à l’application en « arrière-plan » est limitée. Pour télécharger de gros fichiers, consultez la documentation Apple sur NSURLSession.
- La notification push en arrière-plan requiert que le client soit en arrière-plan ou en mode suspendu. Si l’utilisateur ferme l’application via l’App Switcher, elle ne pourra pas se réveiller pour traiter le code en arrière-plan.
Pour plus de détails, consultez la documentation officielle de développement iOS d’Apple.

