2012-07-06 29 views
8

Yahoo'yu uygulamamla bütünleştirmeye çalışıyorum.400 Yahoo Authentication'da Kötü İstek

Ben kullanıcıların Yahoo hesaplarını kullanarak giriş istiyorum ama bir simgesi için talep her zaman, ben aşağıdaki hataları alırsınız:

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

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

benim kodu (Request_Token_Activity.java) 'dir

Ve bu benim AndroidManifest.xml anlık bir:

 <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> 

Ben-kurdunuz benim Yahoo Project, bir Web Application olarak ve Read and Write access'u Social ve Contacts'a koymaktadır. Neyi yanlış yapıyorum?

+0

Burada bunun geçerli olup olmadığını bilmiyorum, ama Yahoo! bazen sunucularına bağlanmak için wifi üzerinde olmanızı gerektirir. Yine, bunun burada geçerli olup olmadığından emin değilim ya da Yahoo! – Eliezer

cevap

3

@Jayson Tamayo, Eliezer ile aynı fikirdeyim. Ben wifi çalıştı ve çalışır, ama ne yazık ki GPRS üzerinde çalışmıyor. Android uygulamanızın yerel bir uygulama ise, o zaman projenizi Client/Desktop olarak ayarlamanız gerekir. Ben yaptım ve benim için çalışıyor.

4

Yahoo'nun api çağrısı bir ssl çağrısı gibi görünüyor. bu kadar basit olmadığını bilmiyorum ama kod olarak Oauth sağlayıcıları vardır: sağlayıcı s * // api.login.yahoo * Http olmalıdır http://developer.yahoo.com/oauth/guide/oauth-requesttoken.html

göre

  "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

ayrıca burada yahoo oauth hata kodları ve nedenleri sen benim isteğimi log ve görürdünüz 400 hatası http://developer.yahoo.com/oauth/guide/oauth-errors.html alacağı eksik ne paramater/yanlış/hatalı biçimlendirilmiş vb