Android用のTumblrクライアントを作っています。私は今、約1週間はOAuthを手に入れようとしています。ここにその方法があります:Android Tumblr Oauth-signpost 401
ユーザーがアプリを起動します。主なアクティビティのonCreateはこれを行います:
settings = getSharedPreferences(PREFS_NAME, 0);
authToken=settings.getString("OauthToken", "none");
authTokenSecret=settings.getString("OauthSecret", "none");
if(authToken=="none" || authTokenSecret=="none"){
Intent i = new Intent(getApplicationContext(),Authentication.class);
startActivity(i);
}
これは、WebViewを含む認証アクティビティを起動します。そのアクティビティは要求トークンを正常に取得し、WebViewをTumblrログイン画面に送信します。ユーザーは、彼らは、許可を押しアプリによるそれらのデータへのアクセスを許可するように頼まれて、私のWebViewClientは、コールバックURLをキャッチし、それでこれを行います。
String[] token = helper.getVerifier(url);
if (token != null) {
try {
String accessToken[] = helper.getAccessToken(token[1]);
editor.putString("OauthToken", accessToken[0]);
editor.putString("OauthSecret", accessToken[1]);
editor.commit();
} catch (Exception e) {
e.printStackTrace();
}
}
finish();
ヘルパークラスのgetAccessTokenとgetVerifier次のようになります。
をpublic String[] getVerifier(String myUrl) {
// extract the token if it exists
Uri uri = Uri.parse(myUrl);
if (uri == null) {
return null;
}
String token = uri.getQueryParameter("oauth_token");
String verifier = uri.getQueryParameter("oauth_verifier");
return new String[] { token, verifier };
}
public String[] getAccessToken(final String verifier)
throws OAuthMessageSignerException, OAuthNotAuthorizedException,
OAuthExpectationFailedException, OAuthCommunicationException {
new Thread(new Runnable() {
public void run() {
try {
mProvider.retrieveAccessToken(mConsumer, verifier);
} catch (OAuthMessageSignerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OAuthNotAuthorizedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OAuthExpectationFailedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OAuthCommunicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
return new String[] {
mConsumer.getToken(), mConsumer.getTokenSecret()
};
}
その後、私は最終的に戻って、メインアプリケーション画面に移動して、ユーザーのダッシュボード上の最新の10枚のポストを得るために、私の最初のAPIコールをしよう:
OAuthConsumer myConsumer = new CommonsHttpOAuthConsumer(MainView.authToken, MainView.authTokenSecret);
HttpGet request = new HttpGet("http://api.tumblr.com/v2/user/dashboard?limit=10");
myConsumer.sign(request);
HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(request);
HttpEntity entity = response.getEntity();
BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent()));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
しかし、代わりに私があるべきのような素敵なJSONレスポンスを取得し、私はこの取得しています:
10-20 16:36:18.110: D/Result(22817): {"meta":{"status":401,"msg":"Not Authorized"},"response":[]}
をだからここで私が間違って行くのですか?ありがとう
POSTリクエストを必要とするAPIメソッドを使用しようとするとまったく同じ問題が発生しますが、GETリクエストは正常に動作するようです。私は、彼らのAPIがちょっと薄れているのだろうかと思っています。 –
あなたはどのAndroidのバージョンを開発していますか? – NotACleverMan
ハニカムのみ。 – Nick