Статьи

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

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

Файл сертификата SSL, который вы скачали с портала обеспечения iOS в первой части этой серии, представлен в формате DER и содержит только сертификат — он не содержит ваш закрытый ключ. Однако для правильной связи со службой push-уведомлений Apple для Urban Airship необходимо, чтобы сертификат SSL и закрытый ключ были загружены в один файл PKCS # 12. Итак, у нас есть работа. К счастью для нас, утилита Keychain Access фактически делает для нас почти все, всего лишь несколькими щелчками мыши.

Первое, что вам нужно сделать, если вы еще этого не сделали, это дважды щелкнуть по загруженному сертификату (он должен называться aps_developer_identity.cer) в Finder и нажать «Добавить», чтобы добавить его в цепочку для ключей. Примечание. Необходимо добавить сертификат в ту же цепочку ключей, которая содержит открытый и закрытый ключи, сгенерированные запросом на подпись сертификата в предыдущей части.

Как только сертификат будет добавлен в вашу цепочку для ключей, выберите «Мои сертификаты» в списке категорий слева и найдите свой недавно добавленный сертификат. Убедитесь, что рядом с ним есть раскрывающий треугольник. Если это не так, это означает, что Keychain Access не может найти закрытый ключ, который соответствует сертификату в текущей цепочке ключей — убедитесь, что вы добавили сертификат в соответствующую цепочку ключей.

Щелкните правой кнопкой мыши сертификат и выберите «Экспортировать« Apple Development Push Services [идентификатор] »…». Когда появится лист экспорта, убедитесь, что во всплывающей кнопке «Формат файла» выбран «Обмен личной информацией (.p12)». Доброе имя и нажмите «Сохранить».

Появится приглашение с запросом пароля для файла. Хотя Urban Airship поддерживает файлы PKCS # 12, защищенные паролем, он рекомендует оставить это поле пустым — просто нажмите «ОК».

Видите, это было не так уж сложно! Теперь мы готовы отправиться на Urban Airship и все настроить.

Как упоминалось в предыдущем выпуске, мы будем использовать Urban Airship для связи со службой push-уведомлений Apple и отправки толчков в наше демонстрационное приложение.

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

После входа перейдите в форму «Добавить новое приложение» и введите название своего приложения. Как упоминалось ранее, Apple использует две отдельные группы push-серверов для разработки и производства — каждая из них требует от вас создания отдельного сертификата SSL на портале обеспечения. В связи с этим Urban Airship рекомендует создавать отдельные приложения для их разработки и производства — таким образом, вы можете продолжать тестировать уведомления в процессе разработки, не прерывая push-сервисы для ваших пользователей, которые загрузили ваше приложение из App Store.

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

Установите флажок «Поддержка push-уведомлений», и в форму следует добавить ряд новых полей. Единственные области, о которых мы будем беспокоиться, — это три под заголовком «Apple». Нажмите кнопку «Выбрать файл» и найдите файл PKCS # 12, который вы ранее экспортировали из Keychain Access. Если вы все-таки решили ввести пароль для файла, введите его в поле «Пароль сертификата». Мы также должны установить флажок «Push-режим отладки», чтобы помочь нам в устранении любых проблем. (Любопытный может нажать на ссылку, чтобы узнать больше о том, что это такое и что он делает).

После ввода всей информации нажмите «Создать приложение».

Как только ваше приложение будет создано, вы должны будете перенаправлены на страницу сведений о вашем приложении.

Прежде чем перейти к API, я хочу упомянуть две вещи: ключ приложения и секрет приложения. Для объяснения того и другого я отсылаю вас к документации Urban Airship:

Каждое приложение имеет ключ приложения, а также секрет приложения и главный секрет приложения (ранее известный как секрет приложения). Учетные данные предоставляются в формате HTTP Basic Auth (с ключом в качестве имени пользователя и секретом в качестве пароля), всегда через наше соединение HTTPS. Секрет приложения должен быть включен в приложение для выполнения регистрации, а главный секрет должен использоваться только на удаленном сервере и не включаться в приложение.

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

Если вы прокрутите страницу документации API, которую мы только что просмотрели, первым, с чем вы столкнетесь, будет раздел Регистрация . Быстро прочитайте первые четыре абзаца, и вы увидите, что нам нужно отправить HTTP-запрос PUT на https://go.urbanairship.com/api/device_tokens/<device token>, чтобы зарегистрировать устройство.

Давайте вернемся к нашему проекту Xcode и добавим немного кода, чтобы наше приложение сделало именно это!

Если он еще не открыт, откройте проект Xcode, который мы создали в первой части этой серии.

Первое, что нам нужно сделать — это передать приложению токен, который мы получили от APNS, обратно в Urban Airship. Если вы помните из первой части, мы добавили метод обратного вызова push-уведомлений в наш делегат приложения, который выглядел следующим образом:

Теперь мы собираемся реализовать элемент TODO.

Если вы посмотрите на метод обратного вызова выше, вы заметите, что маркер устройства возвращается как экземпляр NSData, а не NSString. Если вы посмотрите метод обратного вызова в документации Apple , вы поймете, почему:

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

Что все это значит? Городскому дирижаблю нужен токен в виде шестнадцатеричной строки, но ОС передает его нам в виде необработанных данных, поэтому нам необходимо выполнить некоторое преобразование. Хотя, возможно, это не лучший способ сделать это, мы собираемся использовать метод -Description NSData для преобразования данных в шестнадцатеричную строку:

Далее нам нужно построить URL, как описано в документации API:

Затем нам нужно создать экземпляр NSMutableURLRequest. Мы используем изменяемый запрос, потому что нам нужно изменить метод HTTP запроса на PUT.

Наконец, нам нужно создать экземпляр NSURLConnection для фактической отправки данных на сервер:

Вы заметите, что мы устанавливаем делегата соединения на себя. Поскольку NSURLRequest не имеет встроенной поддержки для предоставления учетных данных базовой аутентификации HTTP заранее (без погружения в кодировку base 64), мы хотим знать, когда соединение получает запрос аутентификации, чтобы мы могли предоставить имя пользователя и пароль. NSURLConnection имеет метод делегата -connection: didReceiveAuthenticationChallenge: который нам теперь нужно будет также реализовать.

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

Вам также следует реализовать другие методы делегата NSURLConnection, такие как -connection: didFailWithError: и -connection: didReceiveResponse :, второй из которых вы можете использовать для проверки кода ответа относительно ожидаемого, указанного в документации по Urban Airship. Но я оставлю это в качестве упражнения для читателя.

Уф! Итак, теперь у нас есть приложение, передающее push-токен, который оно получает от APNS, на серверы Urban Airship. Теперь мы готовы установить приложение на наше устройство и попробовать отправить несколько уведомлений!

Если вы уже прошли всю первую часть серии, все должно быть правильно настроено в Xcode, чтобы создать приложение и установить его на ваш iPhone.

Подключите свой iPhone к компьютеру. Если это первый раз, когда вы делаете это с открытым XCode, он должен запросить, хотите ли вы использовать устройство для разработки — если это так, нажмите «Да». Дайте ему несколько секунд после подключения, чтобы он был правильно распознан Xcode.

Убедитесь, что для активного SDK установлено значение «Устройство» во всплывающем окне «Обзор», а для активной конфигурации — «Отладка». Затем нажмите зеленую кнопку «Построить и запустить» на панели инструментов.

В течение нескольких минут Xcode должен собрать приложение и установить его на свой iPhone. Убедитесь, что вы подключены к какой-либо сети, и дайте приложению поработать несколько минут, чтобы у него было время зарегистрироваться в APNS и отправить маркер своего устройства в Urban Airship.

После двух уроков мы наконец готовы отправить push-уведомление в наше приложение!

Вернитесь на сайт Urban Airship и войдите в систему (если вы еще не вошли в систему). Перейдите на страницу своего приложения и выберите «Статистика» в меню слева.

Рядом с «Жетонами устройств» справа должен быть номер 1. Если его нет, вернитесь и проверьте, правильно ли вы ввели свои учетные данные. Вы также можете захотеть реализовать больше методов делегата NSURLConnection, чтобы убедиться, что запрос правильно принимается серверами Urban Airship.

После проверки правильности регистрации нашего устройства мы отправим push-уведомление. Выберите «Push-уведомления» в меню слева, а затем выберите «Device Tokens» в его подменю. Справа длинная шестнадцатеричная строка должна появиться в разделе «Device Token». Скопируйте эту строку в буфер обмена, а затем выберите «Test Push Notifications» слева.

Убедитесь, что вы находитесь на вкладке iOS, и вставьте свой токен устройства в поле «Device token». В поле «Предупреждение» введите текст. Убедившись, что ваше приложение не работает на вашем телефоне, нажмите «Отправить!».

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

В последней части этой серии мы рассмотрим некоторые другие функции, показанные здесь, такие как значки и звуки, а также некоторые более продвинутые функции Urban Airship API.