Статьи

Приложение для Windows Phone 7 Twitter: Часть 1 из 2 (Понимание OAuth)

(Обновление: для проверки кода, размещенного в этом блоге, пожалуйста, используйте официальный / заблокированный эмулятор. У разблокированных образов эмулятора есть известная проблема с HTTPS)


Как и было обещано в предыдущем посте (я знаю, это было очень давно), мы постараемся создать приложение для Twitter.
Создание приложения для твиттера — очень простая задача, и этот пост поможет вам шаг за шагом создать первое приложение для твиттера. В этом посте будет рассказано о том, как аутентифицировать / авторизовать приложение с помощью механизма oAuth.

В этом посте целевой платформой является Windows Phone 7, но вы можете создать приложение для Twitter на любой другой платформе, основанной на этом руководстве.

Шаг 1: Зарегистрируйте свое приложение Twitter на dev.twitter.com

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

образ

twitterAppRegistration


При регистрации приложения убедитесь, что вы установили тип приложения в браузер и указали URL-адрес обратного вызова. (Твиттер предъявляет определенные требования к URL-адресам обратного вызова, то есть он не принимает URL-адреса, не относящиеся к HTTP (для этого нужно специально обратиться к Twitter). В демонстрационных целях я указал Google.com в качестве URL-адреса обратного вызова по умолчанию. Вы можете укажите свою пользовательскую страницу, размещенную на вашем домене, если вы хотите

Вот так будут выглядеть настройки вашего приложения в твиттере:
AppSettings

Запишите выделенные URL-адреса, а также свой ключ и секрет потребителя. (Хотите знать, что это такое? Продолжить чтение или прочитать об этом
здесь )

Теперь самое интересное: как обычно, запускаем Visual studio 2010. Do a File |
Новый проект. Выберите
телефон приложение Windows из
Silverlight для Windows Phone раздела.

Twitter предоставляет сервис RESTful для доступа к твитам пользователя и т. Д. На данный момент Twitter позволяет использовать только oAuth и XAuth в качестве единственного механизма авторизации.
Поскольку нам необходимо использовать REST-сервис вместе с oAuth, мы будем использовать помощника REST-клиента, который отвлекает меня от тяжелой работы. (Например, добавление необходимых заголовков, вычисление параметров oAuth, таких как Signature, Nonce, Timestamp и т. Д. И т. Д.)

Для этой демонстрации мы будем использовать клиент Hammock REST, доступный для загрузки
здесь . (Ох, кстати, Hammock — очень хороший пример того, как один и тот же исходный код может быть нацелен на несколько платформ и несколько версий .net. Любопытно, узнать, как это сделать? Перейдите прямо на сайт, скачайте исходный код и посмотрите сами.)

Теперь давайте запачкаем руки кодом для нашего первого приложения Twitter на Windows Phone 7
Улыбка

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

Запрос токена и запрос секрета токена — это временный набор учетных данных, которые позволяют вам получить токены доступа. Токен доступа и секрет токена доступа необходимы для доступа к твитам пользователя.

Чтобы сделать это, я буду использовать некоторые аккуратно написанные вспомогательные классы в библиотеке Hammock (иначе я бы на самом деле писал код, чтобы сделать много уродливых вещей)

 var oauth = new OAuthWorkflow
{
     ConsumerKey = TwitterSettings.consumerKey,
     ConsumerSecret = TwitterSettings.consumerKeySecret,
     SignatureMethod = OAuthSignatureMethod.HmacSha1,
     ParameterHandling = OAuthParameterHandling.HttpAuthorizationHeader,
     RequestTokenUrl = TwitterSettings.RequestTokenUri,
     Version = TwitterSettings.oAuthVersion,
     CallbackUrl = TwitterSettings.CallbackUri
};

var info = oauth.BuildRequestTokenInfo(WebMethod.Get);
var objOAuthWebQuery = new OAuthWebQuery(info);
objOAuthWebQuery.HasElevatedPermissions = true;
objOAuthWebQuery.SilverlightUserAgentHeader = "Hammock";
objOAuthWebQuery.SilverlightMethodHeader = "GET";

Этот вспомогательный класс скрывает много вещей от конечного пользователя, которые необходимо сделать, чтобы получить токен и секрет запроса. Используя объект oauth WebQuery, все, что мне нужно сделать, — это создать экземпляр объекта Hammock Rest Client для отправки запроса на серверы Twitter.

var requestTokenQuery = oAuthHelper.GetRequestTokenQuery();
requestTokenQuery.RequestAsync(TwitterSettings.RequestTokenUri, null);
requestTokenQuery.QueryResponse += new EventHandler(requestTokenQuery_QueryResponse);

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

var parameters = HelperMethods.GetQueryParameters(e.Response);
OAuthTokenKey = parameters["oauth_token"];
tokenSecret = parameters["oauth_token_secret"];
var authorizeUrl = TwitterSettings.AuthorizeUri+ "?oauth_token=" + OAuthTokenKey;

Теперь, используя токен запроса и секрет, нам нужно авторизовать наше приложение для чтения / записи данных из учетной записи конечного пользователя. Для этого нам нужно открыть веб-браузер и перенаправить конечного пользователя на страницу входа / авторизации в Twitter. Для этого я буду использовать элемент управления веб-браузера и перенаправлять его на URL авторизации, который я создал выше.

Dispatcher.BeginInvoke(() =>
{
      this.objAuthorizeBrowserControl.Navigate(new Uri(authorizeUrl));
});


Пользователь видит страницу в твиттере, где он / она входит в твиттер.
Здесь его просят авторизовать наше приложение для твиттера.
twiiter_HomeScreen
twitter_startScreen
twitter_signIn
twitter_signIn_2
tiwtter_authorize

После того как вы авторизовали приложение для доступа к вашим данным от вашего имени, Twitter отправит
токен запроса oauth (полученный вами на предыдущем шаге) и
пин-код подтверждения . Используя эти токены, теперь вы можете запросить
токен доступа и
секрет токена доступа. (Ааааааааа … еще один набор токенов

Используя вспомогательный класс Hammock, который мы использовали для получения токенов запросов, мы можем получить
токены доступа следующим образом:
var AuthorizeResult = HelperMethods.GetQueryParameters(e.Uri.ToString());
var VerifyPin = AuthorizeResult["oauth_verifier"];
this.objAuthorizeBrowserControl.Visibility = Visibility.Collapsed;

//We now have the Verification pin
//Using the request token and verification pin to request for Access tokens

var AccessTokenQuery = oAuthHelper.GetAccessTokenQuery(
                                             OAuthTokenKey,     //The request Token
                                             tokenSecret,       //The request Token Secret
                                             VerifyPin         // Verification Pin
                                          );

AccessTokenQuery.QueryResponse += new EventHandler(AccessTokenQuery_QueryResponse);
AccessTokenQuery.RequestAsync(TwitterSettings.AccessTokenUri, null);

В ответ твиттер отправляет нам токены доступа, идентификатор пользователя и имя пользователя.
Я собираюсь хранить их все (может оказаться очень удобным.)

var parameters = HelperMethods.GetQueryParameters(e.Response);
 accessToken = parameters["oauth_token"];
accessTokenSecret = parameters["oauth_token_secret"];
userID = parameters["user_id"];
userScreenName = parameters["screen_name"];

HelperMethods.SetKeyValue("AccessToken", accessToken);
HelperMethods.SetKeyValue("AccessTokenSecret", accessTokenSecret);
Dispatcher.BeginInvoke(() =>
{
    MenuItemSignIn.IsEnabled = false;
    MenuItemSignOut.IsEnabled = true;
    TweetButton.IsEnabled = true;
});

Уф !!! Теперь мы аутентифицированы. Теперь мы можем использовать токены, которые мы получили до сих пор, и приложение теперь может получать доступ к данным пользователя (таким как твиты, временная шкала и т. Д.)