2011-11-18 77 views
1

我正在使用應用程序來使用Twitter4j庫在Twitter中授權用戶。我想加入一個功能,我的移動應用程序打開。它有一個登錄按鈕,點擊哪個Twitter登錄對話框出現,並讓你輸入登錄信息。登錄完成後,將打開另一個屏幕。Android for Android的oAuth中的錯誤

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.List; 

import twitter4j.Status; 
import twitter4j.Twitter; 
import twitter4j.TwitterException; 
import twitter4j.TwitterFactory; 
import twitter4j.auth.AccessToken; 
import twitter4j.auth.RequestToken; 
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.util.Log; 
import android.view.View; 
import android.webkit.WebView; 
import android.widget.Button; 
import android.widget.Toast; 

public class AndTweetVJActivity extends Activity { 
    /** Called when the activity is first created. */ 


    Twitter twitter; 
    RequestToken requestToken; 
    public final static String consumerKey = "myKey"; // "your key here"; 
    public final static String consumerSecret = "myKey"; // "your secret key here"; 
    private final String CALLBACKURL = "T4JOAuth://main"; //Callback URL that tells the WebView to load this activity when it finishes with twitter.com. (see manifest) 


     //Calls the OAuth login method as soon as its started 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
      OAuthLogin(); 
     } 

     /* Creates object of Twitter and sets consumerKey and consumerSecret 
     * - Prepares the URL accordingly and opens the WebView for the user to provide sign-in details 
     * - When user finishes signing-in, WebView opens your activity back */ 

     void OAuthLogin() { 
      try { 
       twitter = new TwitterFactory().getInstance(); 
       twitter.setOAuthConsumer(consumerKey, consumerSecret); 
       requestToken = twitter.getOAuthRequestToken(CALLBACKURL); 
       String authUrl = requestToken.getAuthenticationURL(); 
       this.startActivity(new Intent(Intent.ACTION_VIEW, Uri 
         .parse(authUrl))); 
      } catch (TwitterException ex) { 
       Toast.makeText(this, ex.getMessage(), Toast.LENGTH_LONG).show(); 
       Log.e("in Main.OAuthLogin", ex.getMessage()); 
      } 
     } 


     /* 
     * - Called when WebView calls your activity back.(This happens when the user has finished signing in) 
     * - Extracts the verifier from the URI received 
     * - Extracts the token and secret from the URL 
     */ 
     @Override 
     protected void onNewIntent(Intent intent) { 
      super.onNewIntent(intent); 
      Uri uri = intent.getData(); 
      try { 
       String verifier = uri.getQueryParameter("oauth_verifier"); 
       AccessToken accessToken = twitter.getOAuthAccessToken(requestToken,verifier); 
       String token = accessToken.getToken(), secret = accessToken.getTokenSecret(); 
       //displayTimeLine(token, secret); //after everything, display the first tweet 

      } catch (TwitterException ex) { 
       Log.e("Main.onNewIntent", "" + ex.getMessage()); 
      } 

     } 
    } 

但是在運行此應用程序,它給了我錯誤的logcat:

11-18 10:36:27.727: E/in Main.OAuthLogin(282): 401:Authentication credentials (https://dev.twitter.com/docs/auth) were missing or incorrect. Ensure that you have set valid conumer key/secret, access token/secret, and the system clock in in sync. 
11-18 10:36:27.727: E/in Main.OAuthLogin(282): <?xml version="1.0" encoding="UTF-8"?> 
11-18 10:36:27.727: E/in Main.OAuthLogin(282): <hash> 
11-18 10:36:27.727: E/in Main.OAuthLogin(282): <error>Desktop applications only support the oauth_callback value 'oob'</error> 
11-18 10:36:27.727: E/in Main.OAuthLogin(282): <request>/oauth/request_token</request> 
11-18 10:36:27.727: E/in Main.OAuthLogin(282): </hash> 

我相信我還沒有設置回調URL,但我確實在我的應用程序,以及對https://dev.twitter.com/pages/welcome-anywhere

+0

查看http://stackoverflow.com/questions/8306237/android-login-with-twitter-using-twitter4j/8306602#8306602瞭解身份驗證的一些代碼示例。 – jmcdale

+0

我有同樣的'oob'錯誤,這個鏈接是有用的修復它:https://dev.twitter.com/discussions/392 – Spoonface

回答

0

我的壞...我的網絡服務器壞了,直到5分鐘前我才注意到它。感謝所有的建議。我已經做了這些事情。

1

確保您尚未在桌面應用程序類別的Twitter應用程序註冊中註冊您的應用程序。

+1

現在沒有這樣的選擇..我所能做的就是註冊我的應用程序與一個回調網址以確保它是一個網絡應用程序。如果回調aint,那麼它是一個使用oob而不是oAuth的桌面應用程序 – typedefcoder2