3

Signpost を使用して、OAuth 経由で Google アカウントの保護されたリソースへの呼び出しを承認しています。

ただし、ユーザーが毎回 Google を介してアクセスを許可する必要があるのは少し奇妙に思えます。再認証が必要ないように、コンシューマをシリアル化して再作成する方法はありますか? トークン、シークレット、ベリファイアを共有設定に保持し、それらをコンシューマに設定しようとしましたが、OAuthExpectationFailedException を受け取ります。

何か案は?

4

1 に答える 1

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オブジェクトは非常に軽量であるため、署名付き HTTP リクエストを送信する必要があるアプリケーション内のスレッドごとに OAuthConsumer と OAuthProvider を作成することをお勧めします。どちらのオブジェクトもシリアライズ可能であるため、後で永続化して復元できます。

于 2010-11-10T18:24:27.043 に答える