ठीक है, इसलिए, मैं एंड्रॉइड के लिए टंबलर क्लाइंट बना रहा हूं, मैं ओएथ को लगभग एक हफ्ते तक काम करने की कोशिश कर रहा हूं और विफल रहा हूं। यहां बताया गया है कि यह कैसे चल रहा है:एंड्रॉइड टंबलर ओथ-साइनपोस्ट 401
उपयोगकर्ता ऐप को सक्रिय करता है। मुख्य गतिविधि की ऑनक्रेट यह करता है:
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);
}
यह एक प्रमाणीकरण गतिविधि लॉन्च करता है जिसमें वेबव्यू शामिल है। उस गतिविधि को अनुरोध टोकन सफलतापूर्वक प्राप्त हो जाता है, और वेबव्यू को टंबलर लॉगिन स्क्रीन पर भेजता है। उपयोगकर्ता अनुप्रयोग, वे अनुमति दें दबाते हैं, के द्वारा अपने डेटा एक्सेस करने के लिए कहा जाता है और मेरे WebViewClient कॉलबैक यूआरएल पकड़ता, और इसके साथ यह करता है:
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()
};
}
तो मैं अंत में मुख्य आवेदन स्क्रीन पर वापस जाने के लिए और मेरी पहली एपीआई कॉल करने के लिए, उपयोगकर्ता के डैशबोर्ड पर हाल ही में दस पदों प्राप्त करने की कोशिश:
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);
}
10-20 16:36:18.110: D/Result(22817): {"meta":{"status":401,"msg":"Not Authorized"},"response":[]}
तो मैं कहाँ गलती कर दी: 10,403,210 हालांकि, बजाय की तरह एक अच्छा JSON उत्तर मैं होना चाहिए होने का, मैं इस मिल रहा है? धन्यवाद
मुझे यह वही समस्या मिल रही है, जिसमें मैं उन API विधियों का उपयोग करने का प्रयास करता हूं जिनके लिए POST अनुरोधों की आवश्यकता होती है, हालांकि अनुरोधों को ठीक काम करने के लिए प्रतीत होता है। मैं आश्चर्यचकित होना शुरू कर रहा हूं कि क्या उनकी एपीआई थोड़ा फ्लेकी है। –
एंड्रॉइड का कौन सा संस्करण आप विकसित कर रहे हैं? – NotACleverMan
केवल हनीकॉम्ब। – Nick