Я настраиваю OAuth для своего приложения для Android.Чтобы проверить это, я сделал следующее: добавил в свой проект signpost-core-1.2.1.1.jar и signpost-commonshttp4-1.2.1.1.jar, добавил переменные «CommonsHttpOAuthConsumer consumer» и «CommonsHttpOAuthProvider provider» и сделал следующеенажата кнопка:
consumer = new CommonsHttpOAuthConsumer("xxx", "yyy");
provider = new CommonsHttpOAuthProvider("https://api.twitter.com/oauth/request_token",
"https://api.twitter.com/oauth/access_token",
"https://api.twitter.com/oauth/authorize");
oauthUrl = provider.retrieveRequestToken(consumer, "myapp://twitterOauth");
persistOAuthData();
this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(oauthUrl)));
persistOAuthData () выполняет следующие действия:
protected void persistOAuthData()
{
try
{
FileOutputStream providerFOS = this.openFileOutput("provider.dat", MODE_PRIVATE);
ObjectOutputStream providerOOS = new ObjectOutputStream(providerFOS);
providerOOS.writeObject(this.provider);
providerOOS.close();
FileOutputStream consumerFOS = this.openFileOutput("consumer.dat", MODE_PRIVATE);
ObjectOutputStream consumerOOS = new ObjectOutputStream(consumerFOS);
consumerOOS.writeObject(this.consumer);
consumerOOS.close();
}
catch (Exception e) { }
}
Таким образом, потребитель и поставщик сохраняются перед открытием браузера, как описано здесь 1008 *.
В методе onResume () я загружаю данные поставщика и потребителя и делаю следующее:
Uri uri = this.getIntent().getData();
if (uri != null && uri.getScheme().equals("myapp") && uri.getHost().equals("twitterOauth"))
{
verifier = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER);
if (!verifier.equals(""))
{
loadOauthData();
try
{
provider.retrieveAccessToken(consumer, verifier);
}
catch (OAuthMessageSignerException e) {
e.printStackTrace();
} catch (OAuthNotAuthorizedException e) {
e.printStackTrace();
} catch (OAuthExpectationFailedException e) {
e.printStackTrace();
} catch (OAuthCommunicationException e) {
e.printStackTrace();
}
}
}
Итак, что работает: 1) Я получаю requestToken и arequestSecret.2) Я получаю oauthUrl.3) Я направлен на страницу браузера для авторизации моего приложения. 4) Я перенаправлен в свое приложение.5) Я получаю верификатор.Но при вызове retrieveAccessToken (потребитель, верификатор) возникает ошибка OAuthCommunicationException, в которой говорится: «Не удалось установить связь с поставщиком услуг: ноль».
Кто-нибудь знает, в чем может быть причина?Некоторые люди, кажется, испытывают проблемы с получением requestToken, но это просто отлично работает.Интересно, может быть проблема в том, что мое приложение также включает в себя apache-mime4j-0.6.jar и httpmime-4.0.1.jar, которые мне нужны для многочастной загрузки.