Partilhar via


Gerenciamento de notificações no Xamarin.iOS

No iOS 12, o sistema operacional pode vincular profundamente a Central de Notificações e o aplicativo Configurações à tela de gerenciamento de notificações de um aplicativo. Essa tela deve permitir que os usuários aceitem e desativem os vários tipos de notificações que o aplicativo envia.

Tela de gerenciamento de notificações

No aplicativo de exemplo, ManageNotificationsViewController define uma interface do usuário que permite que os usuários habilitem e desabilitem independentemente notificações vermelhas e notificações verdes. É um padrão UIViewController contendo um para cada tipo de UISwitch notificação. Alternar a opção para qualquer tipo de notificação salva, nos padrões do usuário, a preferência do usuário por esse tipo de notificação:

partial void HandleRedNotificationsSwitchValueChange(UISwitch sender)
{
    NSUserDefaults.StandardUserDefaults.SetBool(sender.On, RedNotificationsEnabledKey);
}

Observação

A tela de gerenciamento de notificações também verifica se o usuário desabilitou completamente as notificações do aplicativo. Em caso afirmativo, ele oculta as alternâncias para os tipos de notificação individuais. Para fazer isso, a tela de gerenciamento de notificações:

  • Chama UNUserNotificationCenter.Current.GetNotificationSettingsAsync e examina o AuthorizationStatus imóvel.
  • Oculta as alternâncias para os tipos de notificação individuais se as notificações tiverem sido completamente desativadas para o aplicativo.
  • Verifica novamente se as notificações foram desativadas sempre que o aplicativo se move para o primeiro plano, já que o usuário pode ativar/desativar as notificações nas Configurações do iOS a qualquer momento.

A classe do ViewController aplicativo de exemplo, que envia as notificações, verifica a preferência do usuário antes de enviar uma notificação local para garantir que a notificação seja do tipo que o usuário realmente deseja receber:

partial void HandleTapRedNotificationButton(UIButton sender)
{
    bool redEnabled = NSUserDefaults.StandardUserDefaults.BoolForKey(ManageNotificationsViewController.RedNotificationsEnabledKey);
    if (redEnabled)
    {
        // ...

Links diretos do iOS para a tela de gerenciamento de notificações de um aplicativo na Central de Notificações e as configurações de notificação do aplicativo no aplicativo Configurações. Para facilitar isso, um aplicativo deve:

  • Indique que uma tela de gerenciamento de notificações está disponível passando UNAuthorizationOptions.ProvidesAppNotificationSettings para a solicitação de autorização de notificação do aplicativo.
  • Implemente o OpenSettings método de IUNUserNotificationCenterDelegate.

Solicitação de autorização

Para indicar ao sistema operacional que uma tela de gerenciamento de notificações está disponível, um aplicativo deve passar a UNAuthorizationOptions.ProvidesAppNotificationSettings opção (junto com quaisquer outras opções de entrega de notificação necessárias) para o RequestAuthorization método no UNUserNotificationCenter.

Por exemplo, no aplicativo de AppDelegateexemplo:

public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
    // Request authorization to send notifications
    UNUserNotificationCenter center = UNUserNotificationCenter.Current;
    var options = UNAuthorizationOptions.ProvidesAppNotificationSettings | UNAuthorizationOptions.Alert | UNAuthorizationOptions.Sound | UNAuthorizationOptions.Provisional;
    center.RequestAuthorization(options, (bool success, NSError error) =>
    {
        // ...

Método OpenSettings

O OpenSettings método, chamado pelo sistema para fazer um link profundo para a tela de gerenciamento de notificações de um aplicativo, deve navegar o usuário diretamente para essa tela.

No aplicativo de exemplo, esse método executa o acompanhamento para o ManageNotificationsViewController se necessário:

[Export("userNotificationCenter:openSettingsForNotification:")]
public void OpenSettings(UNUserNotificationCenter center, UNNotification notification)
{
    var navigationController = Window.RootViewController as UINavigationController;
    if (navigationController != null)
    {
        var currentViewController = navigationController.VisibleViewController;
        if (currentViewController is ViewController)
        {
            currentViewController.PerformSegue(ManageNotificationsViewController.ShowManageNotificationsSegue, this);
        }

    }
}