В iOS 10 появились определенные значимые для разработчиков изменения в части уведомлений, например, добавился новый фреймворк для работы с ними, который поддерживает передачу и обработку локальных и удаленных уведомлений. В этой статье мы разберем детальнее эти новшества, и расскажем, как обеспечить по-прежнему идеальную работу приложений с новой версией iOS.
Для чего понадобился новый API?
Прежде чем вышла iOS 10, мы были вынуждены регистрировать уведомления в классе UIApplication, и определять, каким образом они будут инициироваться. Проблематичным в этом подходе является то, что локальные и удаленные уведомления будут обрабатываться по-разному и потребуют определённого дублирования кода. Еще одним преимуществом нового фреймворка стала возможность использования единого API на всех платформах Apple, то есть, на iOS, tvOS и watchOS.
Хотя этот API и является совершенно новым, он все-таки должен быть хорошо знаком любым разработчикам, которые уже работали с существующим API-интерфейсом уведомлений. Этот API содержит в себе особенности, идентичные функциям предыдущего API, что позволяет с лёгкостью добавлять поддержку новых возможностей UserNotifications в существующие приложения.
Локальные уведомления
Локальные уведомления это те, которые поступают с устройства, а не с сервиса наподобие Azure Notification Hub. Локальные уведомления могут быть сконфигурированы для запуска путём использованием как триггеров на основе данных местоположение, так и с помощью средств оповещения. К примеру, локальные уведомления могут в себя включать:
- Календарные оповещения
- Напоминания
- Триггеры информирования о местоположении (например, о прибытие домой).
Удаленные уведомления
Удаленные уведомления являются немного более сложными, чем локальные, поскольку для работы им необходим сторонний компонент. Существует огромное количество провайдеров уведомлений, включая Notification Hub, Firebase и AWS notification service, но процесс реализация на стороне клиента в значительной степени не изменяется от выбранного поставщика услуг.
После того как Вы определитесь с провайдером, он будет нести ответственность за отправку уведомлений в систему Apple’s Push Notification (APN) для последующей передачи их на устройства пользователей. Для того чтобы Apple располагала информацией о том, куда следует направлять уведомления, приложение сначала регистрирует устройство с помощью Apple, и они получают возможность отслеживать его IP-адрес.
Подготовка к пересылке уведомлений
Как уже упоминалось выше, Вы должны зарегистрировать приложение в Apple, чтобы дать возможность выбора пользователю на тот случай, если он захочет отказаться от уведомлений, а также обеспечить компанию Apple IP-адресом устройства. В рамках процесса утверждения, пользователь сможет выбирать, давать ли ему согласие на следующие типы уведомлений:
- Баннеры
- Звуковые сигналы
- Бэйджики
Чтобы зарегистрировать приложение, вам необходимо добавить следующий код к методу FinishedLaunching класса AppDelegate.
1 2 3 4 5 6 7 8 9 10 11 12 | using UserNotifications; ... public override bool FinishedLaunching (UIApplication application, NSDictionary launchOptions) { // Request notification permissions from the user UNUserNotificationCenter.Current.RequestAuthorization (UNAuthorizationOptions.Alert, (approved, err) => { // Handle approval }); return true; } |
После того как Вы зарегистрировали приложение, Вам уже не составит труда внести коррективы в привилегии уведомлений с помощью приложения настроек на устройстве.
Настройка удаленных уведомлений
В iOS 10 Вы должны информировать iOS о том, в какой среде push-уведомления станут действовать, в Development или Production. Если Вы не укажете эту информацию, тогда Ваше приложение будет отклонено при представлении на рассмотрение в App Store.
Для того чтобы установить свойство среды, Вы должны открыть файл Entitlements.plist в Solution Explorer и добавить aps-environment с таким типом, как String. Затем нужно будет ввести либо development, либо production.
Токены
Если ваше приложение будет отправлять или получать push-уведомления, то вам необходимо запросить регистрацию токена из класса UIApplication. Процесс регистрации, естественно, требует того, чтобы устройство было подключено к интернету, так как ему необходимо вести связь с APNs. После того как токен будет сформирован, он отправится в приложение и может быть перенаправлено провайдеру push-уведомлений.
Следующий код может быть использован для инициализации требуемых регистраций:
1 | UIApplication.SharedApplication.RegisterForRemoteNotifications (); |
Токен, который мы получаем и отправляем поставщику уведомлений, необходимо включить в общую часть уведомления, которая переходит на APNs при его отправке.
Пересылка и планирование передач уведомлений
Теперь, когда мы зарегистрировали приложение, мы можем двигаться дальше и приступить к отправке и получению уведомлений. Давайте продолжим работу и настроим локальные уведомление на то, чтобы они срабатывали с помощью временных интервалов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | using UserNotifications; ... var content = new UNMutableNotificationContent (); content.Title = "Notification Title"; content.Subtitle = "Notification Subtitle"; content.Body = "This is the message body of the notification."; content.Badge = 1; var trigger = UNTimeIntervalNotificationTrigger.CreateTrigger (5, false); var requestID = "sampleRequest"; var request = UNNotificationRequest.FromIdentifier (requestID, content, trigger); UNUserNotificationCenter.Current.AddNotificationRequest (request, (err) => { if (err != null) { // Do something with error... } }); |
Подводя итог
Уведомления в любом приложении невероятно важны для контроля за его использованием и взаимодействия с ним. iOS 10 вводит ряд усовершенствований для повышения продуктивности нашей работы при добавлении поддержки уведомлений в уже существующие приложения. Если вы хотите узнать больше об уведомлениях в iOS 10, то мы советуем обратиться к нашей обширной документации, в которой данная тема освещается более подробно.
Автор: Mike James
Источник: Официальный блог Xamarin
Доброе время суток!
Я Android разработчик и с Xamarin никогда не работал. Утверждается, что у Xamarin одна кодовая база для iOS, Android.
Есть такой вопрос: Вот решил использовать iOS 10 Notification Framework в своем приложении на Xamarin. Что увидят пользователи Android? Или в месте вывода Notification я должен вставить что-то типа ЕСЛИ iOS ТО … ИНАЧЕ toast? или как?
Доброе, Иван!
Notification Framework относится только к iOS в Android он недоступен. У Android есть свой класс нотификации называется так же как и в Java Notification или NotificationCompat. Почитать можно тут:
https://developer.xamarin.com/guides/android/application_fundamentals/notifications/local_notifications_in_android/
Если использовать просто Xamarin то можно вынести до 70% общей логики:
-Взаимодействие с API
-Бизнес-логика
-Прочй код не специфичный для платформы.
Все специфичные классы и возможности платформы доступны только для этой платформы их не вынести в общий код.
Т.е. я не могу объявить ViewController в Android проекте, также как и Activity в iOS
Xamarin выступает в роли обёртки к нативным классам и методам, так что если ты программируешь под Android на Java то примерно поймёшь код на C# в Xamarin.
Спасибо, ясно! Еще один вопрос любопытен.
А файл разметки экрана (в терминах Android, xml файл с layout) надо описывать отдельно для iOS и Android или есть универсальный «диалект»?
Если это обычный Xamarin то для каждый платформы свой интерфейс.
Если это Xamrin Forms то здесь единый язык разметки для 3 платформ.
Кстати интерфейс можно свободно копировать из Android Studio, в Xamarin, 1 в 1 та же разметка интерфейса.
Для iOS я делаю интерфейс через Xcode, хотя в Xamarin Studio есть свой дизайнер, но мне он не очень нравится
Спасибо за инфу!
А есть рабочий пример получалки пушей на 10iOS