Được rồi, vì vậy, tôi đang tạo một ứng dụng Tumblr cho Android, tôi đã cố gắng và không làm cho OAuth hoạt động được khoảng một tuần nay. Dưới đây là cách thực hiện:Android Tumblr Oauth-biển hiệu 401
Người dùng kích hoạt ứng dụng. Hoạt động chính của onCreate thực hiện điều này:
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);
}
điều này sẽ khởi chạy hoạt động xác thực có chứa WebView. Hoạt động đó đã nhận được mã thông báo yêu cầu và gửi WebView đến màn hình đăng nhập Tumblr. Người dùng được yêu cầu để cho phép truy cập vào dữ liệu của mình bằng cách ứng dụng, họ nhấn Allow, và WebViewClient tôi bắt Callback Url, và thực hiện điều này với nó:
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 Lớp helper và getVerifier trông như thế này:
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()
};
}
sau đó, cuối cùng tôi đã quay trở lại màn hình ứng dụng chính và cố gắng để thực hiện cuộc gọi API đầu tiên của tôi, để có được mười bài viết gần đây nhất trên bảng điều khiển của người dùng:
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);
}
Tuy nhiên, thay vì nhận được một phản ứng JSON đẹp như tôi nên được, tôi nhận được điều này:
10-20 16:36:18.110: D/Result(22817): {"meta":{"status":401,"msg":"Not Authorized"},"response":[]}
Vì vậy, nơi nào tôi đi sai? Cảm ơn
Tôi nhận được vấn đề này chính xác tương tự với tôi cố gắng sử dụng phương pháp API yêu cầu POST yêu cầu tuy nhiên, yêu cầu GET xuất hiện để làm việc tốt. Tôi bắt đầu tự hỏi liệu API của họ có hơi không ổn định. –
Bạn đang phát triển phiên bản Android nào? – NotACleverMan
Chỉ có tổ ong. – Nick