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 oAuthorizationStatus
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)
{
// ...
Link profundo
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 deIUNUserNotificationCenterDelegate
.
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 AppDelegate
exemplo:
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);
}
}
}