Estoy tratando de integrar Yahoo en mi aplicación.400 Solicitud incorrecta en Autenticación de Yahoo
Quiero usuarios iniciar sesión utilizando sus cuentas de Yahoo, pero cada vez que solicito para un token, que reciben los siguientes errores:
getRequestToken() Exception: oauth.signpost.exception.OAuthCommunicationException:
Communication with the service provider failed: Service provider responded in error: 400 (Bad Request)
Aquí está mi código (Request_Token_Activity.java):
import oauth.signpost.OAuth;
import oauth.signpost.OAuthConsumer;
import oauth.signpost.OAuthProvider;
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;
import oauth.signpost.commonshttp.CommonsHttpOAuthProvider;
import oauth.signpost.signature.HmacSha1MessageSigner;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
public class Request_Token_Activity extends Activity {
private OAuthConsumer consumer;
private OAuthProvider provider;
private SharedPreferences prefs;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
consumer = new CommonsHttpOAuthConsumer("my consumer key", "my consumer secret");
consumer.setMessageSigner(new HmacSha1MessageSigner());
provider = new CommonsHttpOAuthProvider(
"http://api.login.yahoo.com/oauth/v2/get_request_token",
"http://api.login.yahoo.com/oauth/v2/get_token",
"http://api.login.yahoo.com/oauth/v2/request_auth");
} catch (Exception e) {
Log.e("", "onCreate Exception: " + e.toString());
}
getRequestToken();
}
private void getRequestToken() {
try {
String url = provider.retrieveRequestToken(consumer, "yahooapi://callback");
Log.i("", "Yahoo URL: " + url);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)).setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_FROM_BACKGROUND);
this.startActivity(intent);
} catch (Exception e) {
Log.i("", "getRequestToken() Exception: " + e.toString());
}
}
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
prefs = PreferenceManager.getDefaultSharedPreferences(this);
final Uri uri = intent.getData();
if (uri != null && uri.getScheme().equals("yahooapi")) {
getAccessToken(uri);
}
}
private void getAccessToken(Uri uri) {
final String oauth_verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER);
try {
provider.retrieveAccessToken(consumer, oauth_verifier);
final Editor edit = prefs.edit();
edit.putString("YAHOO_OAUTH_TOKEN", consumer.getToken());
edit.putString("YAHOO_OAUTH_TOKEN_SECRET", consumer.getTokenSecret());
edit.commit();
String token = prefs.getString("YAHOO_OAUTH_TOKEN", "");
String secret = prefs.getString("YAHOO_OAUTH_TOKEN_SECRET", "");
consumer.setTokenWithSecret(token, secret);
Log.i("", "Yahoo OAuth Token: " + token);
Log.i("", "Yahoo OAuth Token Secret: " + token);
} catch (Exception e) {
Log.i("", "getAccessToken Exception: " + e.toString());
}
}
}
Y esta es una foto de mi AndroidManifest.xml:
<activity android:name="Request_Token_Activity" android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="yahooapi" android:host="callback" />
</intent-filter>
</activity>
he puesto en marcha mi Yahoo Project
como Web Application
y ponga Read and Write access
en Social
y Contacts
. ¿Qué estoy haciendo mal?
No sé si esto se aplica aquí o no, pero recuerdo que Yahoo! a veces requiere estar en wifi para conectarse a sus servidores. De nuevo, no estoy seguro de si esto se aplica aquí o si ya es el caso con Yahoo! – Eliezer