ПРОГРАММИРОВАНИЕ ПОД IPHONE, IPAD OBJECTIVE-C часть 3

Отправка Push с помощью Urban Airship

Urban Airship — это сервис, который поможет отправлять вам Push сообщения без создания собственного сервера. Точнее работа этого сервиса не ограничена только отправкой Push-уведомлений. Но в данном случае мы будем рассматировать именно эту возможность. Хочу сразу предупредить, что работа с Push Notifications преполагает что вы зарегестиррованы в Apple как разработчик. Без этой регистрации невозможно будет создать сертификат, а соответственно, и отправлять уведомления. Кроме этого, тестировать отправку сообщений возможно только на реальном устройстве, симулятор для этой цели не подойдет.

 

В первую очередь подготовим провижин, которым будем одписывать наше приложение. Как это сделать можно посмотреть в уроке Настройка apple developer account. После подготовки приложения следует вернуться в Provisioning Portal и там в App IDs. Напротив только что созданного ID нажать на Configure и активировать Apple Push Notification service:

 

 

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

 

 

А со связки ключей эекспортируйте в файл (без указания пароля).

 

 

Все сертификаты и провижены готовы к отправке уведомлений. Пора приступать к созданию учетной запииси Urban Airship (я думаю, вам не составит труда найти кнопку «Sign Up»). Первой ступенью на пути регистрации становится выбор тарифного плана. Здесь следует обратить внимание, что при выборе «BASIC», то есть бесплатной версии у нас будет возможность отправлять один миллион сообщений каждый месяц. Вторым этапом будет стандартная форма в которой следует указать свои данные (почтовый ящик, имя, пароль и пр.). После успешной активации перейдите на страничку аккаунта и в верхней части вы увидите раздел «SELECT AN APPLICATION».

 

 

Как вы уже заметили, у нас нет ни одного приложения и система предлагает создать новое. Последуем ее совету и нажмем кнопкуCreate an App. В появившейся форме нас интересуют три поля, которые обязательны для заполнения:

 

 

Если в момент экспорта сертификата со связки ключей вы не указывали пароль, то поле Certificate password оставляем пустым.

 

Все для отправки сообщений подготовлено, теперь перейдем к процессу программирования. Для начала создадим приложение на основе Single View Application, как видно со скриншота выше, я свое назвал PushUrban. У Urban Airship есть отдельная страца посвященная библиотеке клиенту для iOS (ссылка). Там вы можете скачать исходный код не только самой библиотеки, но и примеров как ее использовать.Скопируйте папку библиотеки в каталок проекта. В результате должна получиться примерно следующая картинка:

 

 

Теперь, с только что добавленной папки перетянем каталоги Common, External и Library в проект Xcode (без копирования, то есть галочку Copy items into destination group’s folder нужно снять).

Чтобы проект запускался без ошибок, добавьте в него следующие фреймверки:

 

  • libUAirship-<version>.a
  • AudioToolbox.framework (специально для Push Sample UI)
  • MessageUI.framework (специально для Push Sample UI)
  • CFNetwork.framework
  • CoreGraphics.framework
  • Foundation.framework
  • MobileCoreServices.framework
  • Security.framework
  • SystemConfiguration.framework
  • UIKit.framework
  • libz.dylib
  • libsqlite3.dylib
  • CoreTelephony.framework (это только для iOS 4.x+)
  • StoreKit.framework

 

Первый из этого списка можно найти в папке Airship. Если кто-то забыл как это делается можно пчитать в уроке Добавляем в проект Framework.

 

Теперь в проект нужно добавить файл AirshipConfig.plist, если кто-то забыл, я описывал как это делать в уроке Знакомство с файловой системой iOS. Структура этого файла выглядит так:

 

 

А значения для полей DEVELOPMENT_APP_KEY и DEVELOPMENT_APP_SECRET можно взять со странички вашего приложения:

 

 

Чтобы вся эта кухня начала работать следует добавить код в AppDelegate.m. В первую очередь, необходим импортировать файлы UAirship.h и UAPush.h. После чего в метод didFinishLaunchingWithOptions добавим следующий код:

 

<code data-result="[object Object]">NSMutableDictionary *takeOffOptions = [[[NSMutableDictionary alloc] init] autorelease];
[takeOffOptions setValue:launchOptions forKey:UAirshipTakeOffOptionsLaunchOptionsKey];

[UAirship takeOff:takeOffOptions];

[[UAPush shared] resetBadge];
[[UAPush shared] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                                     UIRemoteNotificationTypeSound |
                                                     UIRemoteNotificationTypeAlert)];</code>

 

Затем добавим метод didRegisterForRemoteNotificationsWithDeviceToken, он вызывается в момент регистрации токена дэвайса:

 

<code data-result="[object Object]">- (void)application:(UIApplication *)app 
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
{
    [[UAPush shared] registerDeviceToken:deviceToken];
}</code>

 

И метод didFailToRegisterForRemoteNotificationsWithError для обработки ошибок регистрации устройсват на сервере:

 

<code data-result="[object Object]">- (void)application:(UIApplication *)app 
didFailToRegisterForRemoteNotificationsWithError:(NSError *)err 
{ 
    NSString *str = [NSString stringWithFormat: @"Error: %@", err];
    NSLog(@"%@", str);   
}</code>

 

В момент получения сообщения вызывается метод didReceiveRemoteNotification:

 

<code data-result="[object Object]">- (void)application:(UIApplication *)application 
didReceiveRemoteNotification:(NSDictionary *)userInfo 
{
    UIApplicationState appState = UIApplicationStateActive;
    if ([application respondsToSelector:@selector(applicationState)]) {
        appState = application.applicationState;
    }

    [[UAPush shared] handleNotification:userInfo applicationState:appState];
    [[UAPush shared] resetBadge];
}</code>

 

Кроме этого изменим метод applicationDidBecomeActive и applicationWillTerminate:

 

<code data-result="[object Object]">- (void)applicationDidBecomeActive:(UIApplication *)application
{
    [[UAPush shared] resetBadge];
}

- (void)applicationWillTerminate:(UIApplication *)application
{
    [UAirship land];
}</code>

 

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

 

Исходный код этого проекта можно скачать здесь.

Comments are closed.