В помощь мобильному разработчику
Устройства iOS 10

Приступая к работе с iOS 10 Notification Framework

Александр Алексеев

В iOS 10 notifications-hero_2x1появились определенные значимые для разработчиков изменения в части уведомлений, например, добавился новый фреймворк для работы с ними, который поддерживает передачу и обработку локальных и удаленных уведомлений. В этой статье мы разберем детальнее эти новшества, и расскажем, как обеспечить по-прежнему идеальную работу приложений с новой версией 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.

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

 

Настройка удаленных уведомлений

В iOS 10 Вы должны информировать iOS о том, в какой среде push-уведомления станут действовать, в Development или Production. Если Вы не укажете эту информацию, тогда Ваше приложение будет отклонено при представлении на рассмотрение в App Store.

Для того чтобы установить свойство среды, Вы должны открыть файл Entitlements.plist в Solution Explorer и добавить aps-environment с таким типом, как String. Затем нужно будет ввести либо development, либо production.

 

Токены

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

push1

Следующий код может быть использован для инициализации требуемых регистраций:

Токен, который мы получаем и отправляем поставщику уведомлений, необходимо включить в общую часть уведомления, которая переходит на APNs при его отправке.

push3

 

Пересылка и планирование передач уведомлений

Теперь, когда мы зарегистрировали приложение, мы можем двигаться дальше и приступить к отправке и получению уведомлений. Давайте продолжим работу и настроим локальные уведомление на то, чтобы они срабатывали с помощью временных интервалов.

 

Подводя итог

Уведомления в любом приложении невероятно важны для контроля за его использованием и взаимодействия с ним. iOS 10 вводит ряд усовершенствований для повышения продуктивности нашей работы при добавлении поддержки уведомлений в уже существующие приложения. Если вы хотите узнать больше об уведомлениях в iOS 10, то мы советуем обратиться к нашей обширной документации, в которой данная тема освещается более подробно.

Автор: Mike James
ИсточникОфициальный блог Xamarin

Александр Алексеев
Александр Алексеев

Xamarin - разработчик. Работаю с .NET платформой с 2012 года, программирую в основном с использованием C#. За это время успел поработать с ASP.NET, Entity Framework, MSSQL, Git

Siri о чем спросить
Распознание лиц

6 комментариев

  1. Доброе время суток!
    Я 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 есть свой дизайнер, но мне он не очень нравится

  2. Аватар Алексей Reply to Алексей

    А есть рабочий пример получалки пушей на 10iOS

Написать ответ