Partager via


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 :

Centre de notification

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);

Confirmation de la possibilité d’envoyer une notification locale

Pour planifier une notification locale, créez un UILocalNotification objet, définissez-le FireDateet 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 :

Exemple d’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 alertbadgeclé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.