title: 400 Bad Request in Yahoo Authentication
body: <p>I'm trying to integrate Yahoo into my application. </p>
  
  <p>I want users to login using their Yahoo accounts but whenever I request for a token, I receive the following errors:</p>
  
  <pre><code>getRequestToken() Exception: oauth.signpost.exception.OAuthCommunicationException: 
  Communication with the service provider failed: Service provider responded in error: 400 (Bad Request)
  </code></pre>
  
  <p>Here is my code (Request_Token_Activity.java): </p>
  
  <pre><code>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 &amp;&amp; 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());
      }
  }
  
  }
  </code></pre>
  
  <p>And this is a snapshot of my AndroidManifest.xml:</p>
  
  <pre><code>        &lt;activity android:name="Request_Token_Activity" android:launchMode="singleTask"&gt;
          &lt;intent-filter&gt;
              &lt;action android:name="android.intent.action.VIEW" /&gt;
              &lt;category android:name="android.intent.category.DEFAULT" /&gt;
              &lt;category android:name="android.intent.category.BROWSABLE" /&gt;
              &lt;data android:scheme="yahooapi" android:host="callback" /&gt;
          &lt;/intent-filter&gt;
      &lt;/activity&gt;
  </code></pre>
  
  <p>I have set-up my <code>Yahoo Project</code> as a <code>Web Application</code> and put <code>Read and Write access</code> to <code>Social</code> and <code>Contacts</code>. What am I doing wrong?</p>