2012-07-06 6 views
8

나는 내 응용 프로그램에 야후를 통합하려고합니다.야후 인증에서 400 잘못된 요청

나는 사용자가 자신의 야후 계정을 사용하여 로그인 할하지만 토큰을 요청 할 때마다, 나는 다음과 같은 오류가 나타날 :

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()); 
    } 
} 

} 
: 여기
getRequestToken() Exception: oauth.signpost.exception.OAuthCommunicationException: 
Communication with the service provider failed: Service provider responded in error: 400 (Bad Request) 

내 코드 (Request_Token_Activity.java)입니다

그리고 이것은 내 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> 

내가 설정 한 내 Yahoo ProjectWeb Application으로 지정하고 Read and Write accessSocialContacts이라고 지정합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

여기에 해당되는지 아닌지는 잘 모르겠지만 야후! 때로는 서버에 연결하기 위해 wifi에 있어야합니다. 다시 말하지만, 여기에 적용되는지 또는 Yahoo!와 함께 더 이상 그렇지 않은지 확실하지 않습니다. – Eliezer

답변

3

@Jayson Tamayo 나는 Eliezer에 동의하며 Wi-Fi에서 앱을 사용해보십시오. 나는 wifi에서 작동했지만 작동하지만 안타깝게도 GPRS에서 작동하지 않습니다. 안드로이드 응용 프로그램이 기본 응용 프로그램이라면 클라이언트/데스크탑으로 프로젝트를 설정해야합니다. 나는 그것을했고 그것은 나를 위해 일한다.

4

yahoo의 api 통화가 ssl 호출 인 것 같습니다. 그것은 간단합니다 모르겠어요하지만 코드로의 Oauth 업체가 있습니다 공급자는 * // api.login.yahoo * HTTP를이어야한다 http://developer.yahoo.com/oauth/guide/oauth-requesttoken.html

에 따라

  "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"); 

. COM/OAuth를/V2/get_request_token

추가로 여기에 야후의 OAuth 오류 코드 및 이유 당신은 내가 내 요청을 기록하고 볼 것 400 오류 http://developer.yahoo.com/oauth/guide/oauth-errors.html을받을 것없는 것을 paramater/잘못된/잘못된 등

관련 문제