Управление уведомлениями в Xamarin.iOS
В iOS 12 операционная система может глубоко связаться с Центром уведомлений и приложением Параметры на экран управления уведомлениями приложения. Этот экран должен позволить пользователям отказаться от различных типов уведомлений, отправляемых приложением.
Экран управления уведомлениями
В примере приложения ManageNotificationsViewController
определяет пользовательский интерфейс, позволяющий пользователям независимо включать и отключать красные уведомления и зеленые уведомления. Это стандарт UIViewController
содержит UISwitch
тип уведомления для каждого типа уведомления. Переключение переключателя для любого типа уведомлений сохраняется по умолчанию в параметрах пользователя для этого типа уведомлений:
partial void HandleRedNotificationsSwitchValueChange(UISwitch sender)
{
NSUserDefaults.StandardUserDefaults.SetBool(sender.On, RedNotificationsEnabledKey);
}
Примечание.
Экран управления уведомлениями также проверка, если пользователь полностью отключил уведомления для приложения. Если да, он скрывает переключатели для отдельных типов уведомлений. Для этого экран управления уведомлениями:
- Вызывает
UNUserNotificationCenter.Current.GetNotificationSettingsAsync
и проверяетAuthorizationStatus
свойство. - Скрывает переключатели для отдельных типов уведомлений, если уведомления были полностью отключены для приложения.
- Повторно проверка, были ли уведомления отключены при каждом переходе приложения на передний план, так как пользователь может включать и отключать уведомления в iOS Параметры в любое время.
Класс примера приложенияViewController
, который отправляет уведомления, проверка предпочтения пользователя перед отправкой локального уведомления, чтобы убедиться, что уведомление имеет тип, который пользователь действительно хочет получить:
partial void HandleTapRedNotificationButton(UIButton sender)
{
bool redEnabled = NSUserDefaults.StandardUserDefaults.BoolForKey(ManageNotificationsViewController.RedNotificationsEnabledKey);
if (redEnabled)
{
// ...
Прямая ссылка
Глубокие ссылки на экран управления уведомлениями iOS из Центра уведомлений и параметров уведомлений приложения в приложении Параметры. Чтобы упростить эту задачу, приложение должно:
- Укажите, что экран управления уведомлениями доступен путем передачи
UNAuthorizationOptions.ProvidesAppNotificationSettings
в запрос авторизации уведомления приложения. OpenSettings
Реализуйте метод изIUNUserNotificationCenterDelegate
.
Запрос авторизации
Чтобы указать операционной системе, что экран управления уведомлениями доступен, приложение должно передать UNAuthorizationOptions.ProvidesAppNotificationSettings
параметр (а также любые другие необходимые параметры доставки уведомлений) методуRequestAuthorization
.UNUserNotificationCenter
Например, в примере приложения AppDelegate
:
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) =>
{
// ...
Метод Open Параметры
Метод OpenSettings
, вызываемый системой для глубокой ссылки на экран управления уведомлениями приложения, должен перейти к пользователю непосредственно на этот экран.
В примере приложения этот метод выполняет переход к ManageNotificationsViewController
при необходимости:
[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);
}
}
}