Notificações no Xamarin.iOS
Importante
As informações nesta seção pertencem ao iOS 9 e anteriores. Para iOS 10 e posterior, consulte o Guia da estrutura de notificação do usuário.
O iOS tem três maneiras de indicar ao usuário que uma notificação foi recebida:
- Som ou vibração - O iOS pode reproduzir um som para notificar os usuários. Se o som estiver desativado, o dispositivo pode ser configurado para vibrar.
- Alertas - É possível exibir uma caixa de diálogo na tela com informações sobre a notificação.
- Selos - Quando uma notificação é publicada, um número pode ser exibido (com distinção) no ícone do aplicativo.
O iOS também fornece uma Central de Notificações que exibirá todas as notificações, locais e remotas, para o usuário. Os usuários podem acessar isso deslizando para baixo a partir da parte superior da tela:
Criando notificações locais no iOS
O iOS torna bastante simples criar e lidar com notificações locais. Primeiro, o iOS 8 exige que os aplicativos peçam permissão do usuário para exibir notificações. Adicione o seguinte código ao seu aplicativo antes de tentar enviar uma notificação local, normalmente no método FinishedLaunching do AppDelegate:
var notificationSettings = UIUserNotificationSettings.GetSettingsForTypes(
UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound, null
);
application.RegisterUserNotificationSettings(notificationSettings);
Para agendar uma notificação local, crie um UILocalNotification
objeto, defina o FireDate
, e agende-o por meio do ScheduleLocalNotification
método no UIApplication.SharedApplication
objeto. O trecho de código a seguir mostra como agendar uma notificação que será acionada um minuto no futuro e exibir um alerta com uma mensagem:
UILocalNotification notification = new UILocalNotification();
notification.FireDate = NSDate.FromTimeIntervalSinceNow(15);
//notification.AlertTitle = "Alert Title"; // required for Apple Watch notifications
notification.AlertAction = "View Alert";
notification.AlertBody = "Your 15 second alert has fired!";
UIApplication.SharedApplication.ScheduleLocalNotification(notification);
A captura de tela a seguir mostra a aparência desse alerta:
Observe que se o usuário optar por não permitir notificações, nada será exibido.
Se você quiser aplicar um selo ao ícone do aplicativo com um número, poderá defini-lo conforme mostrado no código de linha a seguir:
notification.ApplicationIconBadgeNumber = 1;
Para reproduzir um som com o ícone, defina a propriedade SoundName na notificação, conforme mostrado no seguinte trecho de código:
notification.SoundName = UILocalNotification.DefaultSoundName;
Se o som de notificação tiver mais de 30 segundos, o iOS reproduzirá o som padrão.
Importante
Há um bug no simulador do iOS que disparará a notificação do delegado duas vezes. Esse problema não deve ocorrer ao executar o aplicativo em um dispositivo.
Manipulando notificações
Os aplicativos iOS lidam com notificações remotas e locais quase exatamente da mesma maneira. Quando um aplicativo está em execução, o ReceivedLocalNotification
método ou o ReceivedRemoteNotification
método na AppDelegate
classe será chamado e as informações de notificação serão passadas como um parâmetro.
Um aplicativo pode lidar com uma notificação de maneiras diferentes. Por exemplo, o aplicativo pode apenas exibir um alerta para lembrar os usuários sobre algum evento. Ou a notificação pode ser usada para exibir um alerta ao usuário de que um processo foi concluído, como sincronizar arquivos com um servidor.
O código a seguir mostra como manipular uma notificação local e exibir um alerta e redefinir o número do selo para zero:
public override void ReceivedLocalNotification(UIApplication application, UILocalNotification notification)
{
// show an alert
UIAlertController okayAlertController = UIAlertController.Create(notification.AlertAction, notification.AlertBody, UIAlertControllerStyle.Alert);
okayAlertController.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null));
Window.RootViewController.PresentViewController(okayAlertController, true, null);
// reset our badge
UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0;
}
Se o aplicativo não estiver em execução, o iOS reproduzirá o som e/ou atualizará o emblema do ícone, conforme aplicável. Quando o usuário iniciar o aplicativo associado ao alerta, o aplicativo será iniciado e o método no representante do FinishedLaunching
aplicativo será chamado e as informações de notificação serão passadas por meio do launchOptions
parâmetro. Se o dicionário de opções contiver a chave UIApplication.LaunchOptionsLocalNotificationKey
, o AppDelegate
aplicativo será iniciado a partir de uma notificação local. O trecho de código a seguir demonstra esse processo:
// check for a local notification
if (launchOptions.ContainsKey(UIApplication.LaunchOptionsLocalNotificationKey))
{
var localNotification = launchOptions[UIApplication.LaunchOptionsLocalNotificationKey] as UILocalNotification;
if (localNotification != null)
{
UIAlertController okayAlertController = UIAlertController.Create(localNotification.AlertAction, localNotification.AlertBody, UIAlertControllerStyle.Alert);
okayAlertController.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null));
Window.RootViewController.PresentViewController(okayAlertController, true, null);
// reset our badge
UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0;
}
}
Para uma notificação remota, launchOptions
terá um LaunchOptionsRemoteNotificationKey
com um associado NSDictionary
contendo a carga de notificação remota. Você pode extrair a carga de notificação por meio das alert
chaves , badge
e sound
. O trecho de código a seguir mostra como obter notificações remotas:
NSDictionary remoteNotification = options[UIApplication.LaunchOptionsRemoteNotificationKey];
if(remoteNotification != null)
{
string alert = remoteNotification["alert"];
}
Resumo
Esta seção mostrou como criar e publicar uma notificação no Xamarin.iOS. Ele mostra como um aplicativo pode reagir a notificações substituindo o ReceivedLocalNotification
método ou o ReceivedRemoteNotification
método no AppDelegate
.