Condividi tramite


Notifiche raggruppate in Xamarin.iOS

Per impostazione predefinita, iOS 12 inserisce tutte le notifiche di un'app in un gruppo. La schermata di blocco e il Centro notifiche visualizzano questo gruppo come stack con la notifica più recente nella parte superiore. Gli utenti possono espandere il gruppo per visualizzare tutte le notifiche contenute e ignorare il gruppo nel suo complesso.

Le app possono anche raggruppare le notifiche in base al thread, rendendo più semplice per gli utenti trovare e interagire con le informazioni specifiche a cui sono interessati.

Richiedere l'autorizzazione e consentire le notifiche in primo piano

Prima che un'app possa inviare notifiche locali, deve richiedere l'autorizzazione per farlo. Nell'app di AppDelegateesempio il FinishedLaunching metodo richiede questa autorizzazione:

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

L'oggetto Delegate (impostato in precedenza) per un UNUserNotificationCenter oggetto decide se un'app in primo piano deve visualizzare una notifica in ingresso chiamando il gestore di completamento passato a WillPresentNotification:

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

Il UNNotificationPresentationOptions.Alert parametro indica che l'app deve visualizzare l'avviso ma non riprodurre un suono o aggiornare un badge.

Notifiche in thread

Toccare ripetutamente il pulsante Messaggio dell'app di esempio con Alice per inviare notifiche per una conversazione con un amico di nome Alice. Poiché le notifiche di questa conversazione fanno parte dello stesso thread, la schermata di blocco e il Centro notifiche li raggruppano.

Per avviare una conversazione con un altro amico, toccare il pulsante Scegli un nuovo amico . Le notifiche per questa conversazione vengono visualizzate in un gruppo separato.

ThreadIdentifier

Ogni volta che l'app di esempio avvia un nuovo thread, crea un identificatore di thread univoco:

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

Per inviare una notifica thread, l'app di esempio:

  • Verifica se l'app dispone dell'autorizzazione per inviare una notifica.
  • Crea un oggetto UNMutableNotificationContent oggetto per il contenuto della notifica e imposta il relativo ThreadIdentifier all'identificatore del thread creato in precedenza.
  • Crea una richiesta e pianifica la notifica:
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);

    // ...
}

Tutte le notifiche della stessa app con lo stesso identificatore di thread verranno visualizzate nello stesso gruppo di notifiche.

Nota

Per impostare un identificatore di thread in una notifica remota, aggiungere la thread-id chiave al payload JSON della notifica. Per altri dettagli, vedere il documento Generazione di una notifica remota di Apple.

RiepilogoArgument

SummaryArgument specifica il modo in cui una notifica influirà sul testo di riepilogo visualizzato nell'angolo inferiore sinistro di un gruppo di notifiche a cui appartiene la notifica. iOS aggrega il testo di riepilogo delle notifiche nello stesso gruppo per creare una descrizione di riepilogo generale.

L'app di esempio usa l'autore del messaggio come argomento di riepilogo. Usando questo approccio, il testo di riepilogo per un gruppo di sei notifiche con Alice potrebbe essere di altre 5 notifiche di Alice e me.

Notifiche non lette

Ogni tocco del pulsante Promemoria appuntamento dell'app di esempio invia una delle varie notifiche di promemoria per gli appuntamenti. Poiché questi promemoria non vengono threadati, vengono visualizzati nel gruppo di notifiche a livello di applicazione nella schermata di blocco e nel Centro notifiche.

Per inviare una notifica senza thread, il metodo dell'app di ScheduleUnthreadedNotification esempio usa codice simile a quello precedente. Tuttavia, non imposta l'oggetto ThreadIdentifier sull'oggetto UNMutableNotificationContent .