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 AppDelegate
exemplo , 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 seuThreadIdentifier
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.