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 sonThreadIdentifier
à 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 ThreadIdentifier
UNMutableNotificationContent
.