Freigeben über


Gruppierte Benachrichtigungen in Xamarin.iOS

iOS 12 platziert standardmäßig alle Benachrichtigungen einer App in einer Gruppe. Der Sperrbildschirm und das Benachrichtigungscenter zeigen diese Gruppe als Stapel mit der neuesten Benachrichtigung oben an. Benutzer können die Gruppe erweitern, um alle darin enthaltenen Benachrichtigungen anzuzeigen und die Gruppe als Ganzes zu schließen.

Apps können Benachrichtigungen auch nach Thread gruppieren und benutzern die Suche und Interaktion mit den spezifischen Informationen erleichtern, an der sie interessiert sind.

Anfordern der Autorisierung und Zulassen von Vordergrundbenachrichtigungen

Bevor eine App lokale Benachrichtigungen senden kann, muss sie die Berechtigung dazu anfordern. In der Beispiel-App AppDelegatefordert die FinishedLaunching Methode diese Berechtigung an:

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

Der Delegate (oben festgelegte) Für eine UNUserNotificationCenter Entscheidung, ob eine Vordergrund-App eine eingehende Benachrichtigung anzeigen soll, indem der abschlusshandler aufgerufen wird, der an WillPresentNotificationFolgendes übergeben wird:

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

Der UNNotificationPresentationOptions.Alert Parameter gibt an, dass die App die Warnung anzeigen, aber keinen Sound wiedergeben oder ein Signal aktualisieren soll.

Threadbenachrichtigungen

Tippen Sie wiederholt auf die Schaltfläche "Nachricht mit Alice" der Beispiel-App, um Benachrichtigungen für eine Unterhaltung mit einem Freund namens Alice zu senden. Da die Benachrichtigungen dieser Unterhaltung Teil desselben Threads sind, gruppieren sie der Sperrbildschirm und das Benachrichtigungscenter zusammen.

Um eine Unterhaltung mit einem anderen Freund zu beginnen, tippen Sie auf die Schaltfläche "Neuen Freund auswählen". Benachrichtigungen für diese Unterhaltung werden in einer separaten Gruppe angezeigt.

ThreadIdentifier

Jedes Mal, wenn die Beispiel-App einen neuen Thread startet, wird ein eindeutiger Threadbezeichner erstellt:

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

So senden Sie eine Threadbenachrichtigung, die Beispiel-App:

  • Überprüft, ob die App über die Autorisierung zum Senden einer Benachrichtigung verfügt.
  • Erstellt eine UNMutableNotificationContent -Objekt für den Inhalt der Benachrichtigung und legt dessen ThreadIdentifier zum oben erstellten Threadbezeichner.
  • Erstellt eine Anforderung und plant die Benachrichtigung:
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);

    // ...
}

Alle Benachrichtigungen aus derselben App mit demselben Threadbezeichner werden in derselben Benachrichtigungsgruppe angezeigt.

Hinweis

Um einen Threadbezeichner für eine Remotebenachrichtigung festzulegen, fügen Sie den thread-id Schlüssel zur JSON-Nutzlast der Benachrichtigung hinzu. Weitere Details finden Sie unter Apples Generieren eines Remotebenachrichtigungsdokuments.

SummaryArgument

SummaryArgument Gibt an, wie sich eine Benachrichtigung auf den Zusammenfassungstext auswirkt, der in der unteren linken Ecke einer Benachrichtigungsgruppe angezeigt wird, zu der die Benachrichtigung gehört. iOS aggregiert Zusammenfassungstext aus Benachrichtigungen in derselben Gruppe, um eine allgemeine Zusammenfassungsbeschreibung zu erstellen.

Die Beispiel-App verwendet den Autor der Nachricht als Zusammenfassungsargument. Bei verwendung dieses Ansatzes kann der Zusammenfassungstext für eine Gruppe von sechs Benachrichtigungen mit Alice fünf weitere Benachrichtigungen von Alice und Mir sein.

Unthreaded notifications

Jeder Tippen auf die Schaltfläche "Terminerinnerung" der Beispiel-App sendet eine der verschiedenen Terminerinnerungsbenachrichtigungen. Da diese Erinnerungen nicht threadiert sind, werden sie in der Benachrichtigungsgruppe auf Anwendungsebene auf dem Sperrbildschirm und im Benachrichtigungscenter angezeigt.

Zum Senden einer ungelesenen Benachrichtigung verwendet die Methode der Beispiel-App ScheduleUnthreadedNotification ähnlichen Code wie oben. Das Objekt wird jedoch nicht festgelegt ThreadIdentifierUNMutableNotificationContent .