Статьи

iPhone SDK: подключитесь к Twitter с помощью OAuth

Из этого туториала Вы узнаете, как быстро интегрировать API-интерфейс Twitter с iPhone SDK с помощью Twitter-OAuth-iPhone , библиотеки Twitter с поддержкой технологии Plug-and-Play для iPhone, состоящей из нескольких проектов с открытым исходным кодом, которые объединены и синтезированы для простоты реализации Беном. Готлиб.

Последующие изменения в методах и программном обеспечении

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

ПРИМЕЧАНИЕ. С выходом iOS 5 эта статья устарела. Двигаясь вперед, вы должны серьезно подумать об использовании Twitter Framework, который поставляется с iOS 5 SDK. Рассмотрите возможность реализации продемонстрированного здесь решения, если вам необходимо поддерживать пользователей в старых версиях iOS.

В этом руководстве будет использовано простое приложение под названием «TwitterRush», чтобы продемонстрировать интеграцию Twitter OAuth для iPhone. Загрузив приложение TwitterRush , вы сможете точно выполнить все шаги в этом руководстве. Однако, если у вас уже есть проект iPhone, который вы хотели бы подключить с помощью API Twitter, вы все равно сможете следовать своему собственному коду с небольшими изменениями.

В дополнение к TwitterRush или вашему собственному проекту, вам также необходимо загрузить проект Twitter-OAuth-iPhone Бена Готтлиба, доступный на GitHub.

После загрузки и разархивирования библиотеки Twitter-OAuth-iPhone перетащите папку под названием «Twitter + OAuth» в папку «Другие источники» в области навигатора Xcode 4. Обязательно установите флажок «Копировать объекты в папку целевой группы (если необходимо)» и нажмите «Готово».

Руководство по API Twitter 1

Попытка скомпилировать и запустить ваше приложение сейчас приведет к МНОГИМ ошибкам (90 на момент написания этой статьи с iOS SDK 4). Не беспокойтесь: мы легко исправим их все на шаге 2.

В области навигатора Xcode 4 выберите имя проекта (в данном случае «TwitterRush»). Затем выберите текущую цель (здесь снова «TwitterRush»), а затем перейдите на вкладку «Фазы сборки». Разверните параметр «Связать двоичные файлы с библиотеками», а затем нажмите кнопку «+», чтобы добавить новую платформу. Введите «libxml2» в поле поиска и выберите библиотеку libxml2.dylib, которая появится в списке. Нажмите «Добавить», чтобы включить эту библиотеку в фазу связывания вашего проекта.

После выполнения этих шагов ваш экран должен выглядеть примерно так:

Добавление библиотеки libxml2 в проект Xcode 4

После добавления библиотеки в ваш проект вам нужно будет изменить настройку «пути поиска заголовка» в настройках сборки вашего проекта. Для этого отмените выбор цели и выберите актуальный проект TwitterRush. Откройте вкладку «Настройки сборки» и найдите запись «Пути поиска по заголовку». Дважды щелкните этот параметр, а затем нажмите кнопку «+» в левом нижнем углу всплывающего диалога, чтобы добавить новый путь поиска. Установите флажок «рекурсивный», дважды щелкните поле «Путь» и введите следующий динамический путь:

1
$(SDKROOT)/usr/include/libxml2

После нажатия «Готово» ваш экран должен выглядеть примерно так:

Руководство по API Twitter

Если вы запустите приложение из строки меню Xcode, вы сможете создать приложение без каких-либо ошибок компиляции!

Хотя теперь вы можете скомпилировать и запустить приложение без каких-либо ошибок, имеется ряд предупреждений, связанных с изменениями в iOS4 SDK и протоколе NSXMLParserDelegate. Вам нужно будет явно объявить, что MGTwitterStatusesParser.h и MGTwitterXMLParser.h соответствуют этому протоколу, чтобы предотвратить появление этих предупреждений.

Для этого откройте файл MGTwitterStatusesParser.h и измените объявление NSXMLParserDelegate объявив протокол NSXMLParserDelegate следующим образом:

Теперь сделайте то же самое для MGTwitterXMLParser.h , изменив объявление @interface следующим образом :

Теперь вы сможете беспрепятственно скомпилировать приложение, не генерируя ошибок или предупреждений! Теперь мы готовы начать интеграцию библиотеки Twitter-OAuth-iPhone с нашим кодом.

Теперь нам нужно начать импортировать библиотечные классы, которые мы будем использовать для соединения с Twitter API. Откройте TwitterRushViewController.h и измените код следующим образом:

В строке 2 мы импортируем класс SA_OAuthTwitterController для использования в нашем контроллере представления. В строке 4 мы объявляем класс SA_OAuthTwitterEngine чтобы мы могли объявить экземпляр этого класса в @interface без фактического импорта заголовочного файла. В строке 6 мы объявляем протокол SA_OAuthTwitterControllerDelegate — это позволит нам легко реагировать на события Twitter API позже. Наконец, в строке 10 мы объявляем объект _engine как экземпляр класса SA_OAuthTwitterEngine .

Теперь переключитесь на файл TwitterRushViewController.m . Импортируйте класс SA_OAuthTwitterEngine который мы только что объявили в интерфейсе класса:

Поскольку SA_OAuthTwitterControllerDelegate содержит только необязательные объявления методов, на этом этапе вы снова сможете скомпилировать и запустить приложение без каких-либо ошибок или предупреждений.

Чтобы получить OAuth-доступ к API-интерфейсу Twitter, вам необходимо сначала создать потребительский ключ и секретный ключ для Twitter, чтобы иметь возможность идентифицировать и аутентифицировать ваше приложение. Вы можете сделать это с веб-сайта Twitter, войдя в свою учетную запись и перейдя к форме регистрации приложения . При прохождении процесса регистрации обязательно укажите «клиент» в качестве типа приложения, установите флажок «Да, использовать Twitter для входа в систему» ​​и выберите «Чтение и запись» в качестве типа доступа по умолчанию, чтобы приложение iPhone могло публиковать твиты от имени ваших пользователей.

После того как вы зарегистрировали свое приложение и Twitter сгенерировал учетные данные приложения, добавьте следующее в TwitterRushViewController.m над классом @implementation :

Мы будем использовать эти константы мгновенно, когда _engine экземпляр нашего объекта _engine .

В нашем случае мы хотим инициализировать объект _engine при создании нашего ViewController, а затем отобразить экран входа в систему Twitter OAuth, как только контроллер представления завершит загрузку. Чтобы инициализировать объект _engine , измените метод viewDidAppear следующим образом:

Теперь _engine объект _engine в методе dealloc нашего контроллера вида:

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

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

Для этого добавьте следующее условие перед отображением представления:

Метод isAuthorized вернет логическое значение TRUE, если у нас есть токен аутентификации OAuth. Таким образом, это условие просто проверяет, нет ли у нас авторизации, а затем отображает логин Twitter при необходимости.

Чтобы метод isAuthorized работал, нам также необходимо добавить следующие SA_OAuthTwitterEngineDelegate протокола SA_OAuthTwitterEngineDelegate , отвечающие за хранение нашего токена аутентификации OAuth после первого входа в систему:

В самом простом шаге всего процесса добавьте следующую единственную строку кода в updateTwitter , наш собственный метод IBAction, чтобы фактически опубликовать обновление в Twitter:

Вуаля! Теперь вы должны публиковать обновления для своей ленты Twitter. Тем не менее, мы еще не совсем закончили. Что произойдет, если наше приложение не сможет опубликовать обновление? Что, если мы хотим представить представление подтверждения, если твит успешно опубликован? К счастью, протокол TwitterEngineDelegate имеет два метода, определенных именно для этой цели.

Добавьте следующий код в TwitterRushViewController.m :

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

Если вы выполнили пошаговые инструкции, приведенные выше, теперь вы сможете публиковать обновления статуса в Twitter от имени своих пользователей!

Полный файл TwitterRushViewController.h должен теперь выглядеть так:

Полный файл TwitterRushViewController.m должен гласить:

Спасибо за чтение этого руководства в библиотеке Twitter-OAuth-iPhone, а также за особую благодарность Бену Готтлибу, Мэтту Джеммеллу, Джону Кросби, Крису Кимптону и Исаии Карью. Без их тяжелой работы реализация Twitter API с помощью iPhone SDK заняла бы много-много других шагов.

Есть вопросы или комментарии к этому уроку? Оставьте их в разделе комментариев ниже или напишите @markhammonds прямо в твиттере. Бонусные баллы за прохождение этого урока и использование приложения TwitterRush, чтобы выслушать меня!