Статьи

Создание iOS Poke App SDK с APNS — Часть 1

Это руководство является первым в серии из трех статей о работе с функциями push-уведомлений в iOS 3.0+. Он будет охватывать все, что вам нужно сделать для работы push-уведомлений в вашем приложении: регистрация уведомлений, настройка приложения на портале обеспечения iOS, отправка уведомлений в службу push-уведомлений Apple (APNS) и обработка их в вашем приложении.

В этом уроке мы создадим демонстрационное приложение под названием Poke. Это позволит вам «тыкать» пользователей с помощью push-уведомлений. Хотя, возможно, это не очень хорошее использование сервиса, это руководство научит вас основам того, что вам нужно знать, чтобы начать работу.

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

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

С помощью push-уведомлений, представленных в iOS 3.0, Apple обошла эти ограничения с помощью push-дизайна. Вместо того, чтобы заставлять ваше приложение оставаться открытым и постоянно запрашивать обновления, как в модели pull, сама iOS вместо этого прослушивает обновления и уведомляет ваше приложение, когда они поступают. В результате уменьшается использование процессора, памяти и аккумулятора. Кроме того, вместо того, чтобы каждое приложение подключалось к своему собственному серверу, между устройством iOS и APNS поддерживается одно постоянное соединение.

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

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

Push-уведомления работают по любому сетевому соединению, и вам, как разработчику, не нужно платить дополнительную плату за добавление этой замечательной функции в ваши приложения.

В недавно выпущенных Рекомендациях App Store Apple разработала ряд правил, касающихся сервиса. Большинство из них являются здравым смыслом, но вы можете посмотреть на них, если вы еще этого не сделали.

В двух словах, это основной рабочий процесс приложения для push-уведомлений:

  1. Ваше приложение отправляет запрос в ОС для регистрации уведомлений.
  2. ОС устанавливает безопасное соединение с APNS, возвращает токен устройства и передает его в ваше приложение. Обратите внимание, что по соображениям безопасности этот токен не совпадает с идентификатором устройства (как извлекается из свойства deviceIdentifier UIDevice). Например, если пользователь удаленно стирает свой утерянный iPhone, когда устройство снова регистрируется на уведомления, оно получает другой маркер устройства.
  3. Ваше приложение передает этот токен на ваш сервер, где он хранится.
  4. Когда вы хотите отправить push-уведомление определенному пользователю, ваш сервер захватывает токен устройства этого пользователя и отправляет его в специально отформатированном виде в APNS.
  5. APNS пересылает сообщение на устройство данного пользователя.

Мы рассмотрим каждый пункт в списке по мере прохождения этой серии.

Существует три основных требования для службы push-уведомлений Apple:

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

Ряд сторонних служб возникли для решения этой проблемы. Эти сервисы выступают в качестве посредника между вами и APNS — они управляют настройкой SSL-соединения с APNS и обычно предоставляют API, который вы можете использовать для более простой отправки посылок. У некоторых даже есть веб-интерфейс, который вы можете использовать для быстрой отправки уведомлений без необходимости писать какой-либо код. В этой серии мы будем использовать Urban Airship , в основном из-за простоты использования и отличных цен .

Сертификат идентифицирует ваше приложение для службы и используется для установления безопасного соединения между вашим сервером и APNS. Эти сертификаты создаются (бесплатно) на портале обеспечения iOS, и инструкции о том, как это сделать, приведены ниже на шаге 5.

Это также подробно описано в шаге 5 ниже. Давайте копаться в.

Откройте Xcode и создайте новый проект iPhone. В этом уроке мы будем использовать простой шаблон «View-based Application» для iPhone и назовем наш проект «Poke».

Поскольку эта часть руководства будет в основном посвящена настройке получения push-уведомлений, мы пока не будем тратить время на настройку нашего представления для отображения какой-либо полезной информации. Мы рассмотрим это в третьем выпуске. Вместо этого давайте сразу перейдем к регистрации нашего приложения в службе push-уведомлений Apple.

Чтобы ваше приложение получало push-уведомления, оно сначала должно сообщить службе push-уведомлений Apple, какие уведомления оно хочет получать. Ваше приложение может поддерживать любую комбинацию следующих трех типов (перечисленных в порядке убывания).

  • Значки — отображает небольшое число в красном круге в верхней части значка вашего приложения (как в приложениях Mail и App Store ниже):
  • Звуки — воспроизводит либо системный звук по умолчанию (слышимый при получении SMS), либо собственный фирменный звук. Если вы собираетесь использовать свой собственный звук, он должен быть включен в комплект вашего приложения и должен быть в одном из следующих форматов:
    • Линейный PCM
    • MA4
    • μLaw
    • закон
  • Оповещения — отображает UIAlertView с вашим сообщением:

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

В этой части руководства мы сосредоточимся на оповещениях. В последней части мы вернемся и поэкспериментируем с двумя другими.

Давайте продолжим и сообщим iOS, что наше приложение хочет получать уведомления о предупреждениях.

Откройте PokeAppDelegate.m (или как бы ни был назван ваш делегат приложения) и обновите приложение: didFinishLaunchingWithOptions: обратный вызов, чтобы он выглядел так:

Обратите внимание, что мы только передаем UIRemoteNotificationTypeAlert, потому что все, что мы хотим получить прямо сейчас, это оповещения. Если вы хотите получать другие уведомления, добавьте их побитовым или:

После внесения этих изменений в делегат нашего приложения ОС начнет регистрироваться в службе push-уведомлений Apple. В случае успеха он отправит приложение: didRegisterForRemoteNotificationsWithDeviceToken: сообщение делегату приложения с маркером устройства; в случае неудачи он отправит сообщение: didFailToRegisterForRemoteNotificationsWithError: message. В идеале вы должны реализовать оба.

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

Мы вернемся к успешному обратному вызову в более позднем сегменте — сейчас он просто регистрирует быстрое сообщение. Наш обратный вызов сбоя информирует пользователя о сбое. Обратите внимание, что регистрация на iPhone Simulator всегда будет неудачной, так как он не поддерживает push-уведомления. Чтобы правильно протестировать свой код, вам нужно использовать реальное устройство.

Теперь, когда у нас есть базовое приложение, созданное с нашей стороны, давайте перейдем на сторону Apple и настроим все на iOS Provisioning Portal.

Если вы уже являетесь платным участником Программы разработчиков iOS, войдите в iOS Dev Center и нажмите ссылку справа, чтобы перейти на портал инициализации iOS. Если вы еще не являетесь участником, вы можете подписаться на $ 99 здесь .

Первое, что вам нужно сделать, это убедиться, что вы уже настроили свою учетную запись с необходимыми сертификатами разработчика и добавили свои устройства. Инструкции для этого выходят за рамки данного руководства, но Apple предоставляет помощника по настройке, а также видео и другие ресурсы, которые помогут вам пройти через этот процесс. Посетите раздел «Главная» портала для получения дополнительной информации.

Следующим шагом является создание нового идентификатора приложения. Чтобы правильно связать push-сообщения, отправленные в службу с конкретным приложением, служба push-уведомлений Apple не поддерживает приложения с «групповым» идентификатором пакета (т. Е. Идентификатором с конечной звездочкой, например com.acme. * ). Причина в том, что служба push-уведомлений должна иметь возможность идентифицировать конкретное приложение, к которому относится push, но подстановочные идентификаторы позволяют создавать несколько приложений с одним и тем же профилем обеспечения. Итак, если у вас уже есть подстановочный идентификатор, настроенный для разработки, вам нужно будет создать новый для этого приложения, чтобы включить поддержку push-уведомлений. Если в вашем идентификаторе приложения не используется подстановочный идентификатор пакета, этот шаг можно пропустить.

Нажмите кнопку «Новый идентификатор приложения» в правом верхнем углу. Заполните информацию о вашем приложении и нажмите кнопку «Отправить».

Найдите в списке только что созданный (или уже существующий) идентификатор приложения и нажмите ссылку «Настроить» справа. На появившейся странице установите флажок «Включить службу push-уведомлений Apple».

Если «Включить службу push-уведомлений Apple» не отображается, возможно, идентификатор вашего приложения настроен неправильно. Вернитесь к предыдущему шагу и убедитесь, что вы не вводили идентификатор пакета подстановочных знаков.

Вы заметите, что в списке есть два сертификата — один для разработки и другой для производства. У APNS есть тестовые серверы и работающие производственные серверы. Каждый использует и требует свой клиентский SSL-сертификат. Тестовые серверы могут использоваться для отправки запросов в приложения, созданные с помощью профилей обеспечения разработки; производственные серверы можно использовать для отправки запросов в приложения, созданные с помощью профилей обеспечения распространения (сборки Ad Hoc, In House или App Store).

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

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

Выберите только что созданный CSR, нажав «Выбрать файл», а затем нажмите «Создать», чтобы создать сертификат SSL.

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

Нажмите «Продолжить», и вы перейдете к шагу «Загрузка и установка». Мы рассмотрим, что делать с этим сертификатом во второй части этого учебного пособия, но сейчас нажмите кнопку «Загрузить», чтобы загрузить новый SSL-сертификат клиента APNS.

Затем нам нужно создать профиль обеспечения для нашего нового (или существующего, не подстановочного) идентификатора приложения.

Примечание. Согласно Руководству Apple по локальным и push-уведомлениям , если вы уже создали профиль обеспечения для своего существующего идентификатора приложения до включения push-уведомлений для этого идентификатора, вам нужно будет каким-то образом изменить профиль (то есть изменить имя), чтобы Портал восстановит его с необходимыми правами push.

Вы можете убедиться, что у профиля есть правильные права на push, открыв его в текстовом редакторе. Должен иметь ключ aps-environment:

Вернувшись на портал инициализации iOS, выберите «Provisioning» в главном меню слева. Перейдите на вкладку «Разработка» и нажмите кнопку «Новый профиль». Введите описательное имя в поле «Имя профиля» и выберите сертификаты для разработчиков, которые могут использовать этот профиль для создания приложений. Если вы зарегистрировались как физическое лицо, будет указан только один сертификат (ваш); Если вы зарегистрировались как компания, может быть указано несколько компаний.

Выберите идентификатор приложения, который вы создали на предыдущем шаге (или ваш существующий) из списка идентификаторов приложений, и выберите устройства, на которых вы хотите протестировать свое приложение, из списка внизу. Затем нажмите «Отправить», чтобы создать новый профиль обеспечения.

Через несколько минут ваш профиль будет опубликован, и в столбце «Действия» справа появится кнопка «Загрузить» (может потребоваться обновить браузер). Как только это произойдет, щелкните по нему, чтобы загрузить новый профиль обеспечения разработки.

Чтобы установить свой профиль, перетащите только что загруженный файл .mobileprovision на Xcode или iTunes в Dock.

Вернитесь к своему проекту в Xcode.

Выберите «Изменить активную цель« Poke »в меню« Проект ». Перейдите на вкладку «Свойства» и введите идентификатор пакета, который вы настроили на Портале подготовки iOS ранее (в нашем случае, com.tutsplus.mobile.pushdemo).

Затем перейдите на вкладку Build. Убедитесь, что в верхней части выбранной конфигурации является Debug. Найдите раздел «Подпись кода» в таблице. Второй элемент в списке должен быть идентификатором подписи кода, и он должен иметь один дочерний элемент, любое устройство iOS. Этот параметр сообщает Xcode, какой профиль обеспечения следует использовать для подписи приложения при создании для устройства iOS. Значение для любого устройства iOS должно быть «iPhone Developer (в настоящее время соответствует« iPhone Developer: [Ваше имя] ‘[…]) ».

Эта текущая выбранная опция — автоматический выбор профиля. Он просматривает идентификатор пакета вашего приложения (который мы установили на последнем шаге) и находит профиль обеспечения с совпадающим идентификатором (или совпадающим подстановочным знаком). Хотя вы, вероятно, можете оставить этот параметр без изменений, я обычно стараюсь минимизировать потенциальные источники ошибок при подписании кода, выбирая профиль, который я хочу использовать вручную.

Вот и все! Вы успешно создали новый проект iPhone и настроили его для push-уведомлений! В следующей части мы начнем говорить о серверной части и о том, как на самом деле отправить push-сообщение в ваше недавно созданное приложение.