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

28. API и готовые решения

Bitly

Наверное все вы знаете про такой полезный сервис как Bitly. Кто не знает — полезен он тем, что умеет сокращать ссылки. Зачем это нужно, спросите вы. Отвечу, к примеру вы хотите поделиться другом в твиттере результатом поискового запроса и гугл вам выдал длинную ссылку, которая состоит из 120 знаков, а максимальная длинна сообщения в твиттере 80 знаков. Как тут быть? На помощь нам прийдет Bitly. В этой статье я расскажу как научить вашу программу сокращать ссылки. Для телефона это очень полезная функция т. к. в следующих примерах я буду показывать как работать с API социальных сетей (в том числе twitter).

 

 

Для начала давайте создадим обычное приложение на основе представления (View-based Application) и назовем его myBitly. Затем, по ссылке скачайте и добавьте в проект классы необходимый для работы с этим сервисом. В первую очередь необходимо изменить реализацию класса myBitlyViewController:

 

<code data-result="[object Object]">@interface myBitlyViewController : UIViewController &lt;BitlyControllerDelegate, UITextFieldDelegate&gt; {
    BitlyController *bitlyController;
    UITextField *longURLField;
    UITextField *shortenedURLField;
    UITextField *expandedURLField;
}

@property (nonatomic, retain) BitlyController *bitlyController;
@property (nonatomic, retain) IBOutlet UITextField *longURLField;
@property (nonatomic, retain) IBOutlet UITextField *shortenedURLField;
@property (nonatomic, retain) IBOutlet UITextField *expandedURLField;

- (IBAction)shorten:(id)sender;
- (IBAction)expand:(id)sender;

@end</code>

 

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

 

Теперь перейдем к реализации класса. В первую очередь синтезируем свойства нашим переменным и реализуем их очистку. Затем в методе viewDidLoad инициализируем экземпляр класса BitlyController.

 

<code data-result="[object Object]">- (void)viewDidLoad
{
    [super viewDidLoad];
    self.bitlyController = [BitlyController controllerWithLogin:BitlyLogin 
                                                         apiKey:BitlyApiKey 
                                                        version:BitlyVersion];
	self.bitlyController.delegate = self;
}</code>

 

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

 

<code data-result="[object Object]">- (IBAction)shorten:(id)sender {
    [bitlyController shortenURL:longURLField.text];
}

- (IBAction)expand:(id)sender {
    [bitlyController expandURL:shortenedURLField.text];
}</code>

 

Ничего сложно в этих методах нету. Первый получает текст с переменной, где хранится длинная ссылка (то есть саму ссылку) и передает ее в качестве параметра в метод shortenURL, относящийся к нашему экземпляру класса BitlyController. Метод expandделает точно то же действие, только получает сокращенную ссылку и передает ее в метод expandURL.

Добавим еще небольшой метод, который будет убирать клавиатуру к экрана:

 

<code data-result="[object Object]">- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
    [theTextField resignFirstResponder];
    return YES;
}</code>

 

И в конце добавим те методы, которые будут вызываться нашим делегатом.

 

<code data-result="[object Object]">- (void)bitlyShortenedLongURL:(NSString *)theLongURL toShortURL:(NSString *)theShortURL 
{
	shortenedURLField.text = theShortURL;
}</code>

 

В методе bitlyShortenedLongURL нам возвращаются обе ссылки (theLongURL и theShortURL) после успешного сокращения. Получив эти ссылки, мы присваиваем нашей переменной shortenedURLField значение theShortURL.

 

Методе bitlyExpandedShortURL вызывается в случае успешного сокращения ссылки.

 

<code data-result="[object Object]">- (void)bitlyExpandedShortURL:(NSString *)theShortURL toLongURL:(NSString *)theLongURL 
{
	expandedURLField.text = theLongURL;
}</code>

 

В нем мы делаем все так же как и в предыдущем методе, только наоборот. Нашей переменной, которая хранит короткую ссылку (expandedURLField) присваиваем значение theLongURL.

 

В случае, если по какой-то причине не удалось сократить или расширить ссылку — вызывается метод bitlyRequestForURL.

 

<code data-result="[object Object]">- (void)bitlyRequestForURL:(NSString *)theURL didFailWithError:(NSError *)theError 
{
	NSString *errorTitle = [NSString stringWithFormat:@"Bitly Error %d", theError.code];
	NSString *errorMessage = [theError.userInfo objectForKey:@"errorMessage"];
	UIAlertView *alert = [[UIAlertView alloc] initWithTitle:errorTitle 
                                                    message:errorMessage 
                                                   delegate:nil 
                                          cancelButtonTitle:@"OK" 
                                          otherButtonTitles:nil];
	[alert show];
	[alert release];
}</code>

 

В этом методе мы выводим информацию об ошибке в консоль и показываем ошибку на экране с помощью сообщения (более подробно о сообщениях здесь).

 

Программа может работать, осталось лишь создать интерфейс и связать его с кодом. Перейдите на myBitlyViewController.xib и добавьте на него элементы так, как я это сделал на картинке ниже.

 

 

Теперь нажмите правой кнопкой на File’s Owner и в первом же пункте Outlets вы увидите наши переменные, свяжите их с только что добавленными элементами инетрфейса. Затем проделайте тоже самое для методов. Как это делать я уже описывал в уроке Знакомство с GUI. Чтобы метод с помощью которого мы прячем клавиатуру работал корректно следует подключить делегат UITextField к нашему File’s Owner. Для этого нажмите правой кнопкой на File’s Owner и в пункте Referencing Outlets вы увидите полеNew Referencing Outlets. Нажмите на кружочек в правой части этого поля и перетяните к первом полю UITextField нашего интерфейса. Когда вы отпустите курсор мышки — появится всплывающее меню с одним единственным пунктом delegate. Выберите этот пункт и проделайте ту же операцию для двух других текстовых полей.

 

 

Как вы заметили с картинок — я добавил в первое текстовое поле ссылку на этот проект. Я это сделал для примера, чтобы каждый раз не набирать длинный текст. Делается это с помощью инспектора атрибутов в поле Text.

 

 

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

 

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

 

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

Comments are closed.