2012-08-30 3 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"); 
    } 

} 

매니페스트 문제는이 https://mobile.twitter.com/ 에 저를 리디렉션 내가 뭘 잘못 파악하지 못할 것입니다

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

입니다. 문제는 getAuthenticationUrl() 또는 getAuthorizationUrl()이 사용되는지 여부에 관계없이 존재합니다. Twitter의 callback_url 필드에 더미 URL을 제공했습니다. 코드에 callbackurl을 제공하지 않은 경우 트위터 페이지에 핀 번호가 표시됩니다. 그러나 그것은 내가 원하는 것이 아닙니다. 내 트위터가 내 앱으로 리디렉션되어야합니다. 이것을 어떻게 할 수 있습니까?

답변

3

이것은 내가이 문제를 해결받은 방법,

  1. 는 웹보기를 작성하고 앱 내에서 트위터의 형태 페이지를로드입니다. 당신이 callback_url을 받으면

    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. 는 액세스를 얻을 당신이 원하는 일을하기 위해 '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"; 

android 응용 프로그램의 트위터 통합에 대한 자세한 내용은 아래 링크를 참조하십시오.

Twitter Integration

+0

아니요, 예상대로 작동하지 않습니다. 이제 콜백 루프에 있습니다. 항상 다른 인증 페이지로 리디렉션됩니다. – emiljho

+0

@emiljho 자세한 내용은 위의 링크를 참조하십시오, 그것은 내 응용 프로그램에서 작동합니다. –

+0

다음은 블로그 https://gist.github.com/3528561에 따른 코드입니다. 그것은 작동하지 않습니다. 나는 그 문제가 callback_url과 같다고 생각하지 않는다. – emiljho

관련 문제