Partager via


Notifications groupées dans Xamarin.iOS

Par défaut, iOS 12 place toutes les notifications d’une application dans un groupe. L’écran de verrouillage et le Centre de notification affichent ce groupe sous forme de pile avec la notification la plus récente en haut. Les utilisateurs peuvent développer le groupe pour afficher toutes les notifications qu’il contient et ignorer le groupe dans son ensemble.

Les applications peuvent également regrouper des notifications par thread, ce qui facilite la recherche et l’interaction des utilisateurs avec les informations spécifiques qui leur intéressent.

Demander l’autorisation et autoriser les notifications de premier plan

Pour qu’une application puisse envoyer des notifications locales, elle doit demander l’autorisation de le faire. Dans l’exemple d’application AppDelegate, la FinishedLaunching méthode demande cette autorisation :

public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
    UNUserNotificationCenter center = UNUserNotificationCenter.Current;
    center.RequestAuthorization(UNAuthorizationOptions.Alert, (bool success, NSError error) =>
    {
        // Set the Delegate regardless of success; users can modify their notification
        // preferences at any time in the Settings app.
        center.Delegate = this;
    });
    return true;
}

( Delegate défini ci-dessus) pour déterminer UNUserNotificationCenter si une application de premier plan doit afficher ou non une notification entrante en appelant le gestionnaire d’achèvement passé à WillPresentNotification:

[Export("userNotificationCenter:willPresentNotification:withCompletionHandler:")]
public void WillPresentNotification(UNUserNotificationCenter center, UNNotification notification, System.Action<UNNotificationPresentationOptions> completionHandler)
{
    completionHandler(UNNotificationPresentationOptions.Alert);
}

Le UNNotificationPresentationOptions.Alert paramètre indique que l’application doit afficher l’alerte, mais pas lire un son ou mettre à jour un badge.

Notifications threaded

Appuyez sur le bouton Message de l’exemple d’application avec Alice à plusieurs reprises pour qu’il envoie des notifications pour une conversation avec un ami nommé Alice. Étant donné que les notifications de cette conversation font partie du même thread, l’écran de verrouillage et le Centre de notification les regroupent.

Pour démarrer une conversation avec un autre ami, appuyez sur le bouton Choisir un nouvel ami . Les notifications pour cette conversation s’affichent dans un groupe distinct.

ThreadIdentifier

Chaque fois que l’exemple d’application démarre un nouveau thread, il crée un identificateur de thread unique :

void StartNewThread()
{
    threadId = $"message-{friend}";
    // ...
}

Pour envoyer une notification threaded, l’exemple d’application :

  • Vérifie si l’application a l’autorisation d’envoyer une notification.
  • Crée un UNMutableNotificationContent objet pour le contenu de la notification et définit son ThreadIdentifier à l’identificateur de thread créé ci-dessus.
  • Crée une demande et planifie la notification :
async partial void ScheduleThreadedNotification(UIButton sender)
{
    var center = UNUserNotificationCenter.Current;

    UNNotificationSettings settings = await center.GetNotificationSettingsAsync();
    if (settings.AuthorizationStatus != UNAuthorizationStatus.Authorized)
    {
        return;
    }

    string author =  // ...
    string message = // ...

    var content = new UNMutableNotificationContent()
    {
        ThreadIdentifier = threadId,
        Title = author,
        Body = message,
        SummaryArgument = author
    };

    var request = UNNotificationRequest.FromIdentifier(
        Guid.NewGuid().ToString(),
        content,
        UNTimeIntervalNotificationTrigger.CreateTrigger(1, false)
    );

    center.AddNotificationRequest(request, null);

    // ...
}

Toutes les notifications de la même application avec le même identificateur de thread s’affichent dans le même groupe de notifications.

Remarque

Pour définir un identificateur de thread sur une notification distante, ajoutez la thread-id clé à la charge utile JSON de la notification. Pour plus d’informations, consultez le document De génération d’une notification à distance d’Apple.

SummaryArgument

SummaryArgument spécifie l’impact d’une notification sur le texte récapitulative qui apparaît dans le coin inférieur gauche d’un groupe de notifications auquel appartient la notification. iOS agrège le texte de synthèse des notifications dans le même groupe pour créer une description résumée globale.

L’exemple d’application utilise l’auteur du message comme argument de synthèse. À l’aide de cette approche, le texte de synthèse d’un groupe de six notifications avec Alice peut être de 5 notifications supplémentaires d’Alice et moi.

Notifications non lues

Chaque appui du bouton rappel de rendez-vous de l’exemple d’application envoie l’une des différentes notifications de rappel de rendez-vous . Étant donné que ces rappels ne sont pas threadés, ils apparaissent dans le groupe de notifications au niveau de l’application sur l’écran de verrouillage et dans le Centre de notification.

Pour envoyer une notification non lue, la méthode de l’exemple d’application ScheduleUnthreadedNotification utilise du code similaire comme ci-dessus. Toutefois, elle ne définit pas l’objet ThreadIdentifierUNMutableNotificationContent .