Compartilhar via


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:

A Central de Notificações

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

Confirmando a capacidade de enviar uma notificação local

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:

Um alerta de exemplo

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 alertchaves , badgee 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.