Поделиться через


Управление уведомлениями в 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);
        }

    }
}