Seskupená oznámení v Xamarin.iOS

Ve výchozím nastavení iOS 12 umístí všechna oznámení aplikace do skupiny. Na zamykací obrazovce a Centru oznámení se tato skupina zobrazuje jako zásobník s nejnovějším oznámením nahoře. Uživatelé mohou rozbalit skupinu a zobrazit všechna oznámení, která skupina obsahuje, a zavřít ji jako celek.

Aplikace mohou také seskupit oznámení podle vláken, což uživatelům usnadňuje vyhledání a interakci s konkrétními informacemi, které je zajímají.

Ukázková aplikace: GroupedNotifications

Pokud chcete zjistit, jak používat seskupená oznámení s Xamarin.iOS, podívejte se na ukázkovou aplikaci GroupedNotifications.

Tato ukázková aplikace simuluje konverzace s různými přáteli, posílá oznámení pro každou zprávu a seskupuje je podle vlákna. Ukazuje také, jak se nevlákovaná oznámení dosazují do skupiny na úrovni aplikace.

Fragmenty kódu v této příručce pocházejí z této ukázkové aplikace.

Vyžádání autorizace a povolení oznámení na popředí

Než bude aplikace moci odesílat místní oznámení, musí k tomu požádat o oprávnění. V souboru ukázkové aplikace AppDelegate si FinishedLaunching metoda vyžádá toto oprávnění:

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

DelegateFunkce (nastavená výše) pro určuje, jestli má aplikace na popředí zobrazit příchozí oznámení voláním obslužné rutiny dokončení předané UNUserNotificationCenter do WillPresentNotification :

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

Parametr UNNotificationPresentationOptions.Alert indikuje, že aplikace by měla zobrazit upozornění, ale ne přehrát zvuk nebo aktualizovat oznámení.

Oznámení s vlákny

Opakovaně klepněte na tlačítko Message with Alice (Zpráva s Alicí) v ukázkové aplikaci, aby se do ní odesílala oznámení pro konverzaci s přítelem, který se jmenuje Alice. Vzhledem k tomu, že oznámení této konverzace jsou součástí stejného vlákna, seskupí je zamykací obrazovka a Centrum oznámení dohromady.

Pokud chcete zahájit konverzaci s jiným přítelem, klepněte na tlačítko Choose a new friend (Zvolit nového přítele). Oznámení pro tuto konverzaci se zobrazují v samostatné skupině.

Identifikátor vlákna

Kdykoli ukázková aplikace spustí nové vlákno, vytvoří jedinečný identifikátor vlákna:

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

Pokud chcete odeslat oznámení s vláknem, ukázková aplikace:

  • Kontroluje, jestli má aplikace autorizaci k odeslání oznámení.
  • VytvoříUNMutableNotificationContent objekt pro obsah oznámení a nastaví jehoThreadIdentifier identifikátoru vlákna vytvořeného výše.
  • Vytvoří požadavek a naplánuje oznámení:
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);

    // ...
}

Všechna oznámení ze stejné aplikace se stejným identifikátorem vlákna se zobrazí ve stejné skupině oznámení.

Poznámka

Pokud chcete ve vzdáleném oznámení nastavit identifikátor vlákna, přidejte klíč do datové části thread-id JSON oznámení. Další podrobnosti najdete v dokumentu o generování vzdálených oznámení společnosti Apple.

SummaryArgument

SummaryArgument určuje, jak bude oznámení mít vliv na souhrnný text, který se zobrazí v levém dolním rohu skupiny oznámení, do které oznámení patří. IOS agreguje souhrnný text z oznámení ve stejné skupině a vytvoří celkový souhrnný popis.

Ukázková aplikace používá jako souhrnný argument autora zprávy. Při použití tohoto přístupu může být souhrnným textem pro skupinu šesti oznámení s Alicí 5 dalších oznámení od Alice a Mě.

Oznámení bez vláken

Každé klepnutí na tlačítko připomenutí schůzky ukázkové aplikace odešle jedno z různých oznámení o připomenutí schůzky. Vzhledem k tomu, že tato připomenutí nejsou ve vláknech, zobrazí se ve skupině oznámení na úrovni aplikace na zamykací obrazovce a v Centru oznámení.

K odeslání nevláknového oznámení používá metoda ukázkové aplikace ScheduleUnthreadedNotification podobný kód jako výše. Nenastaví ale pro ThreadIdentifier objekt UNMutableNotificationContent .