Partilhar via


Notificações agrupadas no Xamarin.iOS

Por padrão, o iOS 12 coloca todas as notificações de um aplicativo em um grupo. A tela de bloqueio e a Central de Notificações exibem esse grupo como uma pilha com a notificação mais recente na parte superior. Os usuários podem expandir o grupo para ver todas as notificações que ele contém e descartar o grupo como um todo.

Os aplicativos também podem agrupar notificações por segmento, tornando mais fácil para os usuários encontrar e interagir com as informações específicas nas quais estão interessados.

Solicitar autorização e permitir notificações em primeiro plano

Antes que um aplicativo possa enviar notificações locais, ele deve solicitar permissão para fazê-lo. No aplicativo de AppDelegateexemplo , o FinishedLaunching método solicita essa permissão:

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

O Delegate (definido acima) para um UNUserNotificationCenter decide se um aplicativo em primeiro plano deve ou não exibir uma notificação de entrada chamando o manipulador de conclusão passado para WillPresentNotification:

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

O UNNotificationPresentationOptions.Alert parâmetro indica que o aplicativo deve mostrar o alerta, mas não reproduzir um som ou atualizar um selo.

Notificações encadeadas

Toque repetidamente no botão Mensagem com Alice do aplicativo de exemplo para que ele envie notificações para uma conversa com uma amiga chamada Alice. Como as notificações dessa conversa fazem parte do mesmo thread, a tela de bloqueio e a Central de Notificações as agrupam.

Para iniciar uma conversa com um amigo diferente, toque no botão Escolher um novo amigo . As notificações para esta conversa aparecem em um grupo separado.

ThreadIdentifier

Sempre que o aplicativo de exemplo inicia um novo thread, ele cria um identificador de thread exclusivo:

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

Para enviar uma notificação encadeada, o aplicativo de exemplo:

  • Verifica se o aplicativo tem autorização para enviar uma notificação.
  • Cria uma UNMutableNotificationContent para o conteúdo da notificação e define seu ThreadIdentifier para o identificador de thread criado acima.
  • Cria uma solicitação e agenda a notificação:
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);

    // ...
}

Todas as notificações do mesmo aplicativo com o mesmo identificador de thread aparecerão no mesmo grupo de notificações.

Observação

Para definir um identificador de thread em uma notificação remota, adicione a thread-id chave à carga JSON da notificação. Consulte o documento Gerando uma notificação remota da Apple para obter mais detalhes.

ResumoArgumento

SummaryArgument Especifica como uma notificação afetará o texto de resumo que aparece no canto inferior esquerdo de um grupo de notificação ao qual a notificação pertence. O iOS agrega texto de resumo de notificações no mesmo grupo para criar uma descrição de resumo geral.

O aplicativo de exemplo usa o autor da mensagem como o argumento de resumo. Usando essa abordagem, o texto de resumo para um grupo de seis notificações com Alice pode ser mais 5 notificações de Alice e Eu.

Notificações não encadeadas

Cada toque no botão Lembrete de compromisso do aplicativo de exemplo envia uma das várias notificações de lembrete de compromisso. Como esses lembretes não são encadeados, eles aparecem no grupo de notificação no nível do aplicativo na tela de bloqueio e na Central de Notificações.

Para enviar uma notificação não encadeada, o método do aplicativo de ScheduleUnthreadedNotification exemplo usa código semelhante ao acima. No entanto, ele não define o ThreadIdentifier no UNMutableNotificationContent objeto.