Signpost OAuth на Android: как заново создать Потребитель между двумя последовательными прогонами? - PullRequest
3 голосов
/ 10 октября 2010

Я успешно использую Signpost для авторизации звонков на защищенные ресурсы в учетной записи Google через OAuth.

Однако кажется немного странным, что пользователю приходится каждый раз проходить через Google и предоставлять доступ.Есть ли способ сериализации Consumer и его воссоздания, чтобы повторная авторизация не требовалась?Я пытался сохранить токены, секретный и верифицирующий в общих настройках и установить их в Consumer, но я получаю OAuthExpectationFailedException.

Есть идеи?

1 Ответ

7 голосов
/ 10 ноября 2010

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

provider.retrieveAccessToken(consumer, oauth_verifier);

final Editor edit = prefs.edit();
edit.putString(OAuth.OAUTH_TOKEN, consumer.getToken());
edit.putString(OAuth.OAUTH_TOKEN_SECRET, consumer.getTokenSecret());
edit.commit();

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

private OAuthConsumer getConsumer(SharedPreferences prefs) {
    String token = prefs.getString(OAuth.OAUTH_TOKEN, "");
    String secret = prefs.getString(OAuth.OAUTH_TOKEN_SECRET, "");
    OAuthConsumer consumer = new CommonsHttpOAuthConsumer(Constants.CONSUMER_KEY, Constants.CONSUMER_SECRET);
    consumer.setTokenWithSecret(token, secret);
    return consumer;
}

Как только вы получите потребителя, вы можете делать вызовы API, и потребитель будет подписывать их.

DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
consumer.sign(request);
HttpResponse response = httpclient.execute(request);

Согласно документам указатель :

Объекты Signpost очень легкие, поэтому рекомендуется создать OAuthConsumer и OAuthProvider для каждого потока в вашем приложении, который должен отправлять подписанные HTTP-запросы . Оба объекта также сериализуемы, поэтому вы можете сохранить их и восстановить позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...