Partilhar via


Interfaces de usuário de notificação interativas no Xamarin.iOS

As extensões de conteúdo de notificação, introduzidas no iOS 10, possibilitam a criação de interfaces de usuário personalizadas para notificações. A partir do iOS 12, as interfaces de usuário de notificação podem conter elementos interativos, como botões e controles deslizantes.

Arquivo Info.plist da extensão de conteúdo de notificação

No aplicativo de exemplo, o arquivo Info.plist no projeto RedGreenNotificationsContentExtension contém a seguinte configuração:

<!-- ... -->
<key>NSExtension</key>
<dict>
    <key>NSExtensionAttributes</key>
    <dict>
        <key>UNNotificationExtensionCategory</key>
        <array>
            <string>red-category</string>
            <string>green-category</string>
        </array>
        <key>UNNotificationExtensionUserInteractionEnabled</key>
        <true/>
        <key>UNNotificationExtensionDefaultContentHidden</key>
        <true/>
        <key>UNNotificationExtensionInitialContentSizeRatio</key>
        <real>0.6</real>
    </dict>
    <key>NSExtensionMainStoryboard</key>
    <string>MainInterface</string>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.usernotifications.content-extension</string>
    <key></key>
    <true/>
</dict>
<!-- ... -->

Observe os seguintes recursos:

  • A UNNotificationExtensionCategory matriz especifica o tipo de categorias de notificação que a extensão de conteúdo manipula.
  • Para oferecer suporte a conteúdo interativo, a extensão de conteúdo de notificação define a UNNotificationExtensionUserInteractionEnabled chave como true.
  • A UNNotificationExtensionInitialContentSizeRatio chave especifica a relação altura/largura inicial para a interface da extensão de conteúdo.

Interface interativa

MainInterface.storyboard, que define a interface para uma extensão de conteúdo de notificação, é um storyboard padrão contendo um único controlador de exibição. No aplicativo de exemplo, o controlador de exibição é do tipo NotificationViewControllere contém um modo de exibição de imagem, três botões e um controle deslizante. O storyboard associa esses controles a manipuladores definidos em NotificationViewController.cs:

  • O manipulador de botão Iniciar Aplicativo chama o método de PerformNotificationDefaultAction ação em ExtensionContext, que inicia o aplicativo:

    partial void HandleLaunchAppButtonTap(UIButton sender)
    {
        ExtensionContext.PerformNotificationDefaultAction();
    }
    

    No aplicativo, a central de Delegate notificações do usuário (no aplicativo de exemplo, o AppDelegate) pode responder à interação no DidReceiveNotificationResponse método:

    [Export("userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:")]
    public void DidReceiveNotificationResponse(UNUserNotificationCenter center, UNNotificationResponse response, System.Action completionHandler)
    {
        if (response.IsDefaultAction)
        {
            Console.WriteLine("ACTION: Default");
            // ...
    
  • O manipulador do botão Dispensar Notificação chama DismissNotificationContentExtensionExtensionContext, que fecha a notificação:

    partial void HandleDismissNotificationButtonTap(UIButton sender)
    {
        ExtensionContext.DismissNotificationContentExtension();
    }
    
  • O manipulador do botão Remover Notificação descarta a notificação e a remove da Central de Notificações:

    partial void HandleRemoveNotificationButtonTap(UIButton sender)
    {
        ExtensionContext.DismissNotificationContentExtension();
        UNUserNotificationCenter.Current.RemoveDeliveredNotifications(new string[] { notification.Request.Identifier });
    }
    
  • O método que manipula alterações de valor no controle deslizante atualiza o alfa da imagem exibida na interface da notificação:

    partial void HandleSliderValueChanged(UISlider sender)
    {
        Xamagon.Alpha = sender.Value;
    }