Bien, entonces, estoy haciendo un cliente de Tumblr para Android, hace casi una semana que intento y no consigo utilizar OAuth. Así es como va:Android Tumblr Oauth-signpost 401
El usuario activa la aplicación. La actividad principal de onCreate hace esto:
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);
}
esto inicia una actividad de autenticación que contiene un WebView. Esa actividad obtiene con éxito el token de solicitud y envía el WebView a la pantalla de inicio de sesión de Tumblr. Se le pide al usuario que permita el acceso a sus datos mediante la aplicación, presionan Permitir, y mi WebViewClient llama la devolución de llamada URL, y lo hace con ella:
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 de la clase de ayuda y getVerifier tener este aspecto:
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()
};
}
Entonces finalmente volver a la pantalla principal de la aplicación y trato de hacer mi primera llamada a la API, para obtener las más recientes diez puestos en el salpicadero del usuario:
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);
}
Sin embargo, en lugar de obtener una buena respuesta JSON como que debe ser, me estoy haciendo esto:
10-20 16:36:18.110: D/Result(22817): {"meta":{"status":401,"msg":"Not Authorized"},"response":[]}
Entonces, ¿dónde me equivoqué? Gracias
Estoy recibiendo exactamente el mismo problema con el que trato de utilizar los métodos API que requieren solicitudes POST, sin embargo, las solicitudes GET parecen funcionar bien. Estoy empezando a preguntarme si su API es un poco escamosa. –
¿En qué versión de Android está desarrollando? – NotACleverMan
Solo nido de abeja. – Nick