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 v Centru oznámení se tato skupina zobrazuje jako zásobník s nejnovějším oznámením nahoře. Uživatelé můžou skupinu rozbalit a zobrazit všechna oznámení, která obsahuje, a zavřít skupinu jako celek.

Aplikace můžou také seskupovat oznámení podle vláken, což uživatelům usnadňuje hledání a interakci s konkrétními informacemi, které mají zájem.

Ukázková aplikace: GroupedNotifications

Pokud se chcete dozvědět, 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 nečtená oznámení zobrazují ve skupině 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í

Aby aplikace mohl posílat místní oznámení, musí požádat o oprávnění k tomu. V ukázkové aplikaci AppDelegatemetoda FinishedLaunching požaduje 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;
}

Hodnota Delegate (nastavená výše) pro UNUserNotificationCenter rozhodnutí, zda by aplikace v popředí měla zobrazit příchozí oznámení zavoláním obslužné rutiny dokončení předané:WillPresentNotification

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

Parametr UNNotificationPresentationOptions.Alert označuje, že aplikace by měla zobrazit upozornění, ale ne přehrát zvuk nebo aktualizovat odznáček.

Oznámení s vlákny

Klepněte na tlačítko Zpráva ukázkové aplikace s tlačítkem Alice, aby opakovaně odesílala oznámení pro konverzaci s přítelem jménem Alice . Vzhledem k tomu, že oznámení této konverzace jsou součástí stejného vlákna, zamykací obrazovka a Centrum oznámení je seskupí dohromady.

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

ThreadIdentifier

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ákny, ukázková aplikace:

  • Zkontroluje, jestli má aplikace autorizaci k odeslání oznámení.
  • Vytvoří UNMutableNotificationContent objekt pro obsah oznámení a nastaví jeho ThreadIdentifier identifikátoru vlákna vytvořeného výše.
  • Vytvoří žádost 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 nastavit identifikátor vlákna na vzdáleném oznámení, přidejte thread-id klíč do datové části JSON oznámení. Další podrobnosti najdete v dokumentu Apple Generování vzdáleného oznámení .

SummaryArgument

SummaryArgument určuje, jak oznámení ovlivní 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ří tak celkový souhrnný popis.

Ukázková aplikace používá autora zprávy jako souhrnný argument. Pomocí tohoto přístupu může být souhrnný text pro skupinu šesti oznámení s Alicemi 5 dalších oznámení od Alice a Me.

Nečtená oznámení

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

K odeslání nečteného oznámení používá metoda ukázkové aplikace ScheduleUnthreadedNotification podobný kód jako výše. Nenastaví však objekt ThreadIdentifier na UNMutableNotificationContent objekt.