В Xamarin мы стараемся предоставить программистам возможность создавать красивые, практичные, нативные мобильные приложения, но мы также не обделяем вниманием и традиционные настольные программы. Xamarin.Mac, а также относительно новые Xamarin.Forms под Mac предоставляют все необходимое для создания высококачественного приложения для рабочего стола на базе macOS; инструменты в принципе соответствуют аналогичным для мобильных устройств.
Как и мобильные приложения, классические программы могут не всегда находиться у пользователя на главном экране. А ведь иногда пользователя нужно предупредить о чем-то происходящем в приложении, и тогда локальные уведомления — отличный способ поддерживать с пользователем связь. Настройка локальных уведомлений в Xamarin.Mac требует внесения всего нескольких строк кода и очень похожа на аналогичную в Xamarin.iOS. Сегодня мы еще раз взглянем на нативный Xamarin.Mac и добавим локальные уведомления в наш проект Pomodoro — приложение, предназначенное для того, чтобы помочь пользователям разделить их рабочие нагрузки на 25-минутные интервалы.
Ознакомьтесь с материалами Разработка первого приложения на macOS и Отображение данных с macOS в табличных представлениях, если Вы еще этого не сделали. Кроме того, можно загрузить сегодняшнюю точку входа здесь.
Информация по уведомлениям
Целью добавления уведомлений в это приложение является оповещение пользователя по истечении 25 минут, даже если приложение в данное время не находится у него перед глазами. В этом случае значок панелей мигает по истечении времени, так как отображается модальное оповещение. Это стандартное поведение macOS и здесь не требуется дополнительное кодирование. Однако прыгающий значок в панели не предоставляет контекста, а для оповещения это нужно (и к тому же он может быть довольно раздражающим!).
Локальные уведомления отличаются от push-уведомлений тем, что в данном случае для отправки уведомления приложению не требуется какая-либо веб-служба как, например, Azure. Уведомление устанавливается в коде локально, и параметр — когда ему инициироваться — задается вручную. Это идеально подходит для нашего приложения Pomodoro, так как мы точно знаем, когда нужно инициировать уведомление.
Код, который нужно добавить
Код для уведомления состоит всего лишь из нескольких строк. Этот код необходимо добавить после остановки таймера; его не нужно вызывать в главном потоке (UI):
1 2 3 4 5 6 7 8 9 | // Trigger a local notification after the time has elapsed var notification = new NSUserNotification(); // Add text and sound to the notification notification.Title = "25 Minutes is up!"; notification.InformativeText = "Add your task to your activity log"; notification.SoundName = NSUserNotification.NSUserNotificationDefaultSoundName; notification.HasActionButton = true; NSUserNotificationCenter.DefaultUserNotificationCenter.DeliverNotification(notification); |
Как вы видите, мы создаем уведомление в коде, а затем указываем заголовок и текст. У нас также есть возможность выбрать звук для воспроизведения в момент уведомления. В этом случае мы просто оставим звуковое уведомление по умолчанию.
Мы также устанавливаем HasActionButton, который по умолчанию дает уведомление с двумя кнопками: «Закрыть» и «Показать» (close и show). Система macOS также устанавливает по умолчанию уведомления в стиле «баннер», что не предполагает кнопок. Это можно изменить в системных настройках (System Preferences) на «оповещение» (Alert), благодаря чему кнопки будут отображаться. Однако можно принудительно установить уведомления в стиле Alert, если указать следующее строковое значение в Info.plist:
1 2 | <key>NSUserNotificationAlertStyle</key> <string>alert</string> |
К сведению: Важно отметить, что здесь у macOS есть один нюанс. Этот параметр влияет на уведомление только в том случае, если приложение подписано для релиза. Во время отладки этот параметр игнорируется, поэтому необходимо установить тип оповещений alert в настройках системы (System Preferences).
Попробуйте это сделать:
Итак, все, что нам нужно сделать сейчас, это протестировать наше новое уведомление. Запустите приложение, пусть истечет срок действия таймера, и, надеюсь, Вы увидите следующее уведомление:
Уведомление в виде оповещения улучшает общее восприятие приложения. Пользователь может либо закрыть уведомление, либо нажать кнопку «Показать», чтобы перейти к приложению.
Итог
Благодаря уведомлениям пользователям легче взаимодействовать с приложением, и, кроме того, с помощью этих средств можно при необходимости отображать полезную информацию. Настройка локальных уведомлений является простой и эффективной и не требует дополнительной инфраструктуры. Эти уведомления также могут быть расширены различными способами — путем настройки звукового сигнала, кнопок и более совершенных методов, таких как предоставление текстового поля.
Чтобы оценить завершенный проект Pomodoro можете скачать его на GitHub.
Источник: Официальный блог Xamarin
Написать ответ