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 comotrue
. - 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 NotificationViewController
e 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 emExtensionContext
, 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, oAppDelegate
) pode responder à interação noDidReceiveNotificationResponse
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
DismissNotificationContentExtension
ExtensionContext
, 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; }