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


Уведомления в Xamarin.iOS

Внимание

Сведения в этом разделе относятся к iOS 9 и более предыдущим. Сведения об iOS 10 и более поздних версиях см. в руководстве по платформе уведомлений пользователей.

IOS имеет три способа указать пользователю, что получено уведомление:

  • Звук или вибрация — iOS может воспроизводить звук для уведомления пользователей. Если звук отключен, устройство можно настроить для вибрации.
  • Оповещения — можно отобразить диалоговое окно на экране с информацией о уведомлении.
  • Индикаторы событий. При публикации уведомления на значке приложения можно отобразить номер (значок).

iOS также предоставляет Центр уведомлений, который будет отображать все уведомления, как локальные, так и удаленные, пользователю. Пользователи могут получить доступ к этому, прокрутив вниз в верхней части экрана:

Центр уведомлений

Создание локальных уведомлений в iOS

iOS упрощает создание и обработку локальных уведомлений. Во-первых, iOS 8 требует, чтобы приложения запрашивали разрешение пользователя на отображение уведомлений. Добавьте следующий код в приложение перед попыткой отправить локальное уведомление, как правило, в методе FinishedLaunching AppDelegate:

var notificationSettings = UIUserNotificationSettings.GetSettingsForTypes(
    UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound, null
);
application.RegisterUserNotificationSettings(notificationSettings);

Подтверждение возможности отправки локального уведомления

Чтобы запланировать локальное уведомление, создайте UILocalNotification объект, задайте FireDateобъект и запланируйте его с помощью ScheduleLocalNotification метода в объекте UIApplication.SharedApplication . В следующем фрагменте кода показано, как запланировать уведомление, которое будет запускаться в течение одной минуты в будущем, и отображать оповещение с сообщением:

UILocalNotification notification = new UILocalNotification();
notification.FireDate = NSDate.FromTimeIntervalSinceNow(15);
//notification.AlertTitle = "Alert Title"; // required for Apple Watch notifications
notification.AlertAction = "View Alert";
notification.AlertBody = "Your 15 second alert has fired!";
UIApplication.SharedApplication.ScheduleLocalNotification(notification);

На следующем снимку экрана показано, как выглядит это оповещение:

Пример оповещения

Обратите внимание, что если пользователь решил не разрешать уведомления, то ничего не будет отображаться.

Если вы хотите применить эмблему к значку приложения с номером, его можно задать, как показано в следующем коде строки:

notification.ApplicationIconBadgeNumber = 1;

Чтобы воспроизвести звук со значком, задайте свойство SoundName в уведомлении, как показано в следующем фрагменте кода:

notification.SoundName = UILocalNotification.DefaultSoundName;

Если звук уведомления превышает 30 секунд, iOS будет воспроизводить звук по умолчанию.

Внимание

В симуляторе iOS возникает ошибка, которая дважды запустит уведомление делегата. Эта проблема не должна возникать при запуске приложения на устройстве.

Обработка уведомлений

Приложения iOS обрабатывают удаленные и локальные уведомления практически так же. При запуске ReceivedLocalNotification приложения вызывается метод или ReceivedRemoteNotification метод класса AppDelegate , а сведения о уведомлении передаются в качестве параметра.

Приложение может обрабатывать уведомление разными способами. Например, приложение может просто отобразить оповещение, чтобы напоминать пользователям о каком-то событии. Кроме того, уведомление может использоваться для отображения оповещения пользователю о завершении процесса, например синхронизации файлов с сервером.

В следующем коде показано, как обработать локальное уведомление и отобразить оповещение и сбросить номер индикатора событий до нуля:

public override void ReceivedLocalNotification(UIApplication application, UILocalNotification notification)
{
    // show an alert
    UIAlertController okayAlertController = UIAlertController.Create(notification.AlertAction, notification.AlertBody, UIAlertControllerStyle.Alert);
    okayAlertController.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null));

    Window.RootViewController.PresentViewController(okayAlertController, true, null);

    // reset our badge
    UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0;
}

Если приложение не запущено, iOS воспроизводит звук и (или) обновит значок значка в соответствии с применимым. Когда пользователь запускает приложение, связанное с оповещением, приложение запустится и FinishedLaunching метод делегата приложения будет вызван, а сведения о уведомлении будут переданы через launchOptions параметр. Если словарь параметров содержит ключ UIApplication.LaunchOptionsLocalNotificationKey, AppDelegate то известно, что приложение было запущено из локального уведомления. В следующем фрагменте кода демонстрируется этот процесс:

// check for a local notification
if (launchOptions.ContainsKey(UIApplication.LaunchOptionsLocalNotificationKey))
{
    var localNotification = launchOptions[UIApplication.LaunchOptionsLocalNotificationKey] as UILocalNotification;
    if (localNotification != null)
    {
        UIAlertController okayAlertController = UIAlertController.Create(localNotification.AlertAction, localNotification.AlertBody, UIAlertControllerStyle.Alert);
        okayAlertController.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null));

        Window.RootViewController.PresentViewController(okayAlertController, true, null);

        // reset our badge
        UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0;
    }
}

Для удаленного уведомления launchOptions будет связан LaunchOptionsRemoteNotificationKey с связанной NSDictionary с ней полезные данные для удаленного уведомления. Полезные данные уведомления можно извлечь с помощью клавиш badgeи sound ключейalert. В следующем фрагменте кода показано, как получить удаленные уведомления:

NSDictionary remoteNotification = options[UIApplication.LaunchOptionsRemoteNotificationKey];
if(remoteNotification != null)
{
    string alert = remoteNotification["alert"];
}

Итоги

В этом разделе показано, как создать и опубликовать уведомление в Xamarin.iOS. В нем показано, как приложение может реагировать на уведомления, переопределяя ReceivedLocalNotification метод или ReceivedRemoteNotification метод в нем AppDelegate.