2012-08-30 48 views
4

我的目標是允許使用twitter4j的Twitter登錄。 I used this as reference.嘰嘰喳喳不重定向到android應用程序中的回調url

問題是,在64行,它調用getAuthenticationURl()。當我執行它時,會將我帶到登錄頁面,而不是我可以允許/禁止我的應用程序訪問ppl帳戶的頁面。
但是,如果我將其更改爲getAuthorizationUrl()它需要到正確的頁面。

1)那麼兩者有什麼區別?

2)這是一個重要的問題。我正在提供下面的代碼。

package com.example.twitter; 



import twitter4j.Twitter; 
import twitter4j.TwitterException; 
import twitter4j.TwitterFactory; 
import twitter4j.http.AccessToken; 
import twitter4j.http.RequestToken; 
import android.app.Activity; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class WriteTweet extends Activity{ 
    public final static String consumerKey = "xxxxxxxxxxxxxxxxxx"; 
    public final static String consumerSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; 
    private final String CALLBACKURL = "T4J_OAuth://callback"; 
    Twitter twitter; 
    RequestToken requestToken; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     loginUser(); 
    } 

    private void loginUser() { 
     // TODO Auto-generated method stub 
     try { 
      twitter = new TwitterFactory().getInstance(); 
      twitter.setOAuthConsumer(consumerKey, consumerSecret); 
      requestToken = twitter.getOAuthRequestToken(CALLBACKURL); 
      String authUrl = requestToken.getAuthorizationURL(); 
      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()); 
     } 
    } 
    @Override 
    protected void onNewIntent(Intent intent) { 
     Log.e("hi","hi"); 
     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()); 
     } 

    } 
    @SuppressWarnings("deprecation") 
    void displayTimeLine(String token, String secret) { 
     Log.e("display","timeline"); 
    } 

} 

清單是

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.twitter" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="15" /> 
    <uses-permission android:name="android.permission.INTERNET"/> 

    <application 

     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/title_activity_main" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 

      </intent-filter> 
     </activity> 


     <activity android:name=".ListTweets" > 

     </activity> 
     <activity android:name=".WriteTweet"> 
       <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="T4J_OAuth" android:host="callback" /> 
       </intent-filter> 
     </activity> 
     <activity android:name=".ViewFollowers"> 

     </activity> 
    </application> 

</manifest> 

的問題是,它重定向我https://mobile.twitter.com/ ,我無法弄清楚什麼做錯了。無論是使用getAuthenticationUrl()還是getAuthorizationUrl(),都存在問題。我在Twitter中的callback_url字段中提供了一個虛擬url。 如果我沒有在代碼和Twitter頁面中提供callbackurl,它會給我一個PIN碼。但那不是我想要的。我需要我的twitter來重定向到我的應用程序。我怎樣才能做到這一點?

回答

3

這是我解決此問題得到了方式,

  1. 創建一個Web視圖,並從你的應用程序內加載嘰嘰喳喳的構象頁。

    vw = (WebView)findViewById(R.id.loginView); 
    vw.setWebViewClient(new WebViewClient() { 
        @Override 
         public boolean shouldOverrideUrlLoading(WebView view, String url) { 
         return super.shouldOverrideUrlLoading(view, url); 
        } 
    }); vw.loadUrl(authUrl); 
    
  2. 一旦你收到一個callback_url,得到 'oauth_verifier'

      Uri uri = Uri.parse(url); 
          String verifier = uri.getQueryParameter("oauth_verifier"); 
    
  3. 使用此驗證來獲得訪問,做你想做的。在我的情況下,我銷燬webview並加載我需要的活動。

2

將以下URL用作回調URL。

public static final String CALLBACK_URL = "x-oauthflow-twitter://callback"; 

並參見下面的鏈接瞭解更多關於twitter應用程序集成的信息。

Twitter Integration

+0

不,它沒有按預期工作。現在在一個回調循環中。它一直重定向到不同的授權頁面。 – emiljho

+0

@emiljho請參閱上面的鏈接瞭解更多信息,它在我的應用程序中工作。 –

+0

這是根據您的博客https://gist.github.com/3528561的代碼。它沒有工作。我不認爲問題是與callback_url。 – emiljho