Udostępnij za pośrednictwem


Powiadomienia grupowane w środowisku Xamarin.iOS

Domyślnie system iOS 12 umieszcza wszystkie powiadomienia aplikacji w grupie. Ekran blokady i Centrum powiadomień wyświetlają tę grupę jako stos z najnowszym powiadomieniem u góry. Użytkownicy mogą rozwinąć grupę, aby wyświetlić wszystkie powiadomienia, które zawiera, i odrzucić grupę jako całość.

Aplikacje mogą również grupować powiadomienia według wątku, ułatwiając użytkownikom znajdowanie i interakcję z określonymi informacjami, które cię interesują.

Żądaj autoryzacji i zezwalaj na powiadomienia pierwszego planu

Aby aplikacja mogła wysyłać powiadomienia lokalne, musi zażądać uprawnień, aby to zrobić. W przykładowej aplikacji AppDelegateFinishedLaunching metoda żąda tego uprawnienia:

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

Element Delegate (ustawiony powyżej) UNUserNotificationCenter dla elementu decyduje, czy aplikacja pierwszego planu powinna wyświetlać przychodzące powiadomienie przez wywołanie procedury obsługi uzupełniania przekazanej do WillPresentNotificationelementu :

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

Parametr UNNotificationPresentationOptions.Alert wskazuje, że aplikacja powinna wyświetlać alert, ale nie odtwarzać dźwięku ani aktualizować wskaźnika.

Powiadomienia wątkowe

Naciśnij przycisk Wiadomość przykładowej aplikacji z Alicją wielokrotnie, aby wysyłać powiadomienia o konwersacji z przyjacielem o nazwie Alice. Ponieważ powiadomienia tej konwersacji są częścią tego samego wątku, ekran blokady i Centrum powiadomień grupują je razem.

Aby rozpocząć rozmowę z innym przyjacielem, naciśnij przycisk Wybierz nowego znajomego . Powiadomienia dotyczące tej konwersacji są wyświetlane w oddzielnej grupie.

ThreadIdentifier

Za każdym razem, gdy przykładowa aplikacja uruchamia nowy wątek, tworzy unikatowy identyfikator wątku:

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

Aby wysłać powiadomienie wątkowe, przykładowa aplikacja:

  • Sprawdza, czy aplikacja ma autoryzację do wysyłania powiadomienia.
  • Tworzy element UNMutableNotificationContent obiekt dla zawartości powiadomienia i ustawia go ThreadIdentifier do identyfikatora wątku utworzonego powyżej.
  • Tworzy żądanie i planuje powiadomienie:
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);

    // ...
}

Wszystkie powiadomienia z tej samej aplikacji o tym samym identyfikatorze wątku będą wyświetlane w tej samej grupie powiadomień.

Uwaga

Aby ustawić identyfikator wątku w powiadomieniu zdalnym, dodaj thread-id klucz do ładunku JSON powiadomienia. Aby uzyskać więcej informacji, zobacz Dokument Generowanie powiadomienia zdalnego przez firmę Apple.

PodsumowanieArgument

SummaryArgument Określa, jak powiadomienie będzie miało wpływ na tekst podsumowania wyświetlany w lewym dolnym rogu grupy powiadomień, do której należy powiadomienie. System iOS agreguje tekst podsumowania z powiadomień w tej samej grupie, aby utworzyć ogólny opis podsumowania.

Przykładowa aplikacja używa autora komunikatu jako argumentu podsumowania. Korzystając z tego podejścia, tekst podsumowania dla grupy sześciu powiadomień z Alice może być 5 więcej powiadomień od Alice i Me.

Nieprzeczytane powiadomienia

Każde naciśnięcie przycisku przypomnienia terminów przykładowej aplikacji wysyła jedno z różnych powiadomień przypomnienia o terminach. Ponieważ te przypomnienia nie są wątkowe, są one wyświetlane w grupie powiadomień na poziomie aplikacji na ekranie blokady i w Centrum powiadomień.

Aby wysłać nieprzeczytane powiadomienie, metoda przykładowej aplikacji ScheduleUnthreadedNotification używa podobnego kodu, jak pokazano powyżej. Nie ustawia ThreadIdentifier jednak obiektu na UNMutableNotificationContent obiekcie .