Notifications dans Xamarin.iOS
Important
Les informations contenues dans cette section se rapportent à iOS 9 et antérieures. Pour iOS 10 et versions ultérieures, consultez le guide de l’infrastructure de notification utilisateur.
iOS a trois façons d’indiquer à l’utilisateur qu’une notification a été reçue :
- Son ou vibration : iOS peut lire un son pour avertir les utilisateurs. Si le son est désactivé, l’appareil peut être configuré pour vibrer.
- Alertes : il est possible d’afficher une boîte de dialogue à l’écran avec des informations sur la notification.
- Badges : lorsqu’une notification est publiée, un nombre peut être affiché (badged) sur l’icône de l’application.
iOS fournit également un Centre de notification qui affiche toutes les notifications, locales et distantes, à l’utilisateur. Les utilisateurs peuvent y accéder en balayant vers le bas en haut de l’écran :
Création de notifications locales dans iOS
iOS facilite la création et la gestion des notifications locales. Tout d’abord, iOS 8 nécessite que les applications demandent l’autorisation de l’utilisateur d’afficher les notifications. Ajoutez le code suivant à votre application avant de tenter d’envoyer une notification locale, généralement dans la méthode FinishedLaunching d’AppDelegate :
var notificationSettings = UIUserNotificationSettings.GetSettingsForTypes(
UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound, null
);
application.RegisterUserNotificationSettings(notificationSettings);
Pour planifier une notification locale, créez un UILocalNotification
objet, définissez-le FireDate
et planifiez-le via la ScheduleLocalNotification
méthode sur l’objet UIApplication.SharedApplication
. L’extrait de code suivant montre comment planifier une notification qui déclenchera une minute à l’avenir et affiche une alerte avec un message :
UILocalNotification notification = new UILocalNotification();
notification.FireDate = NSDate.FromTimeIntervalSinceNow(15);
//notification.AlertTitle = "Alert Title"; // required for Apple Watch notifications
notification.AlertAction = "View Alert";
notification.AlertBody = "Your 15 second alert has fired!";
UIApplication.SharedApplication.ScheduleLocalNotification(notification);
La capture d’écran suivante montre à quoi ressemble cette alerte :
Notez que si l’utilisateur a choisi de ne pas autoriser les notifications, rien ne s’affiche.
Si vous souhaitez appliquer un badge à l’icône d’application avec un nombre, vous pouvez le définir comme indiqué dans le code de ligne suivant :
notification.ApplicationIconBadgeNumber = 1;
Pour lire un son avec l’icône, définissez la propriété SoundName sur la notification, comme indiqué dans l’extrait de code suivant :
notification.SoundName = UILocalNotification.DefaultSoundName;
Si le son de notification est supérieur à 30 secondes, iOS va lire le son par défaut à la place.
Important
Il existe un bogue dans le simulateur iOS qui déclenche deux fois la notification de délégué. Ce problème ne doit pas se produire lors de l’exécution de l’application sur un appareil.
Gestion des notifications
Les applications iOS gèrent les notifications distantes et locales de la même façon. Lorsqu’une application est en cours d’exécution, la ReceivedLocalNotification
méthode ou la ReceivedRemoteNotification
méthode sur la AppDelegate
classe est appelée et les informations de notification sont transmises en tant que paramètre.
Une application peut gérer une notification de différentes façons. Par exemple, l’application peut simplement afficher une alerte pour rappeler aux utilisateurs un événement. Ou la notification peut être utilisée pour afficher une alerte à l’utilisateur qu’un processus a terminé, comme la synchronisation de fichiers sur un serveur.
Le code suivant montre comment gérer une notification locale et afficher une alerte et réinitialiser le numéro de badge sur zéro :
public override void ReceivedLocalNotification(UIApplication application, UILocalNotification notification)
{
// show an alert
UIAlertController okayAlertController = UIAlertController.Create(notification.AlertAction, notification.AlertBody, UIAlertControllerStyle.Alert);
okayAlertController.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null));
Window.RootViewController.PresentViewController(okayAlertController, true, null);
// reset our badge
UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0;
}
Si l’application n’est pas en cours d’exécution, iOS lirea le son et/ou mettra à jour le badge d’icône le cas échéant. Lorsque l’utilisateur démarre l’application associée à l’alerte, l’application lance et la FinishedLaunching
méthode sur le délégué de l’application est appelée et les informations de notification sont transmises via le launchOptions
paramètre. Si le dictionnaire d’options contient la clé UIApplication.LaunchOptionsLocalNotificationKey
, il AppDelegate
sait que l’application a été lancée à partir d’une notification locale. L’extrait de code suivant illustre ce processus :
// check for a local notification
if (launchOptions.ContainsKey(UIApplication.LaunchOptionsLocalNotificationKey))
{
var localNotification = launchOptions[UIApplication.LaunchOptionsLocalNotificationKey] as UILocalNotification;
if (localNotification != null)
{
UIAlertController okayAlertController = UIAlertController.Create(localNotification.AlertAction, localNotification.AlertBody, UIAlertControllerStyle.Alert);
okayAlertController.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null));
Window.RootViewController.PresentViewController(okayAlertController, true, null);
// reset our badge
UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0;
}
}
Pour une notification à distance, launchOptions
une notification à distance est LaunchOptionsRemoteNotificationKey
associée NSDictionary
contenant la charge utile de notification à distance. Vous pouvez extraire la charge utile de notification via les clés et sound
les alert
badge
clés. L’extrait de code suivant montre comment obtenir des notifications à distance :
NSDictionary remoteNotification = options[UIApplication.LaunchOptionsRemoteNotificationKey];
if(remoteNotification != null)
{
string alert = remoteNotification["alert"];
}
Résumé
Cette section a montré comment créer et publier une notification dans Xamarin.iOS. Il montre comment une application peut réagir aux notifications en substituant la ReceivedLocalNotification
méthode ou la ReceivedRemoteNotification
méthode dans le AppDelegate
.