2010-10-09 1 views
3

Я успешно использую Signpost для авторизации вызовов защищенных ресурсов в учетной записи Google через OAuth.Signpost OAuth на Android: как воссоздать Потребителя между двумя успешными прогонами?

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

Любые идеи?

ответ

7

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

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 docs:

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

+0

1+ для справки по официальным документам. – Gem

Смежные вопросы