我成功地使用 Signpost 授权通过 OAuth 调用 Google 帐户中受保护的资源。
然而,用户每次都必须通过谷歌并授予访问权限似乎有点奇怪。有没有办法序列化消费者并重新创建它,以便不需要重新授权?我尝试将令牌、机密和验证器保存在共享首选项中,并将它们设置在消费者中,但我收到了 OAuthExpectationFailedException。
有任何想法吗?
收到访问令牌后,您可以将其存储在您的应用首选项中,如下所示:
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);
根据路标文档:
路标对象非常轻量级,因此建议您为应用程序中必须发送签名 HTTP 请求的每个线程创建一个 OAuthConsumer 和 OAuthProvider。这两个对象也是可序列化的,因此您可以在以后保留和恢复它们。