2012-01-31 4 views
1

내 앱에서 사용자가 게시물을 공유하려고 시도 할 때마다 트위터 로그인을 표시하려고합니다.Android에서 Twitter 인증

공유 환경 설정에서 트위터 자격 증명을 저장하고 싶지 않지만 두 번째로 공유하려는 경우 로그인 필드가 표시되지 않습니다.

누구나 문제를 파악할 수 있습니까?

public class AuthorizationActivity extends Activity { 

private TwitterActivity app; 
private WebView webView; 
static String token, verifier; 

Webservice web; 
OAuthCredentialsResponse credentials; 
private WebViewClient webViewClient = new WebViewClient() { 
    @Override 
    public void onLoadResource(WebView view, String url) { 
     final OAuthHmacSigner signer = new OAuthHmacSigner(); 
     Uri uri = Uri.parse(url); 

     if (url.startsWith(Constants.OAUTH_CALLBACK_URL)) { 
      try { 

       if (url.indexOf("oauth_token=")!=-1) { 
      token = uri.getQueryParameter("oauth_token"); 
      verifier = uri.getQueryParameter("oauth_verifier"); 

      signer.clientSharedSecret = Constants.CONSUMER_SECRET; 

      OAuthGetAccessToken accessToken = new OAuthGetAccessToken(
        Constants.ACCESS_URL); 
      accessToken.transport = new ApacheHttpTransport(); 
      accessToken.temporaryToken = token; 
      accessToken.signer = signer; 
      accessToken.consumerKey = Constants.CONSUMER_KEY; 
      accessToken.verifier = verifier; 

      credentials = accessToken.execute(); 

      signer.tokenSharedSecret = credentials.tokenSecret; 


        + credentials.tokenSecret); 

      ; 
      if (null != token) { 
       webView.setVisibility(View.INVISIBLE); 


       finish(); 

      } else if (url.indexOf("error=")!=-1) { 
       view.setVisibility(View.INVISIBLE); 

      } 

       }} catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 
    } 
}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.authorization_view); 
    setUpViews(); 

String authURL = beginAuthorization(); 
webView.loadUrl(authURL); 
} 



private void setUpViews() { 
    webView = (WebView) findViewById(R.id.web_view); 
    webView.setWebViewClient(webViewClient); 
} 
public String beginAuthorization() { 
    try { 

     final OAuthHmacSigner signer = new OAuthHmacSigner(); 
     OAuthAuthorizeTemporaryTokenUrl authorizeUrl; 
     signer.clientSharedSecret = Constants.CONSUMER_SECRET; 

    OAuthGetTemporaryToken temporaryToken = new OAuthGetTemporaryToken(Constants.REQUEST_URL); 
     temporaryToken.transport = new ApacheHttpTransport(); 
     temporaryToken.signer = signer; 
     temporaryToken.consumerKey = Constants.CONSUMER_KEY; 
     temporaryToken.callback = Constants.OAUTH_CALLBACK_URL; 

     OAuthCredentialsResponse tempCredentials =      temporaryToken.execute(); 
     signer.tokenSharedSecret = tempCredentials.tokenSecret; 

    authorizeUrl = new OAuthAuthorizeTemporaryTokenUrl(Constants.AUTHORIZE_URL); 
     authorizeUrl.temporaryToken = tempCredentials.token; 
     String authorizationUrl = authorizeUrl.build(); 
     System.out.println(authorizationUrl); 

     return authorizationUrl; 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return null; 
} 

public void authorized() { 
    try { 



     AccessToken a = new AccessToken(credentials.token,credentials.tokenSecret); 
     Twitter twitter = new TwitterFactory().getInstance(); 
     twitter.setOAuthConsumer(Constants.CONSUMER_KEY, Constants.CONSUMER_SECRET); 
     twitter.setOAuthAccessToken(a); 
     twitter.updateStatus("my first post"); 

     Toast t = Toast.makeText(this,"Successfully Shared",Toast.LENGTH_LONG); 
     t.show(); 

    } catch (TwitterException e) { 
     throw new RuntimeException("Unable to authorize user", e); 
    } 
} 
+1

내 추측 (즉,하지 만료 된) 두 번째 트윗을 공유 할 때 첫 번째 트윗을 공유 할 때 앱이 얻은 OAuth 액세스 토큰은 여전히 ​​유효하다 . 나는 OAuth를 많이 사용하지는 않았지만 트윗을 공유 한 직후 만료되도록 토큰의 만료 시간을 "조정"하는 방법을 살펴 보는 것이 좋습니다. OAuth 라이브러리가 표지 아래에서 새로 고침 토큰을 사용하는 경우이 방법이 작동하지 않을 수 있습니다. – curioustechizen

답변

3

나는,이 경우에도 세션이 만료되지 않았 로그인 사용자를 물어볼 것입니다 당신이 URL force_login = true있어

에서 하나 개의 매개 변수를 놓쳤다 생각합니다.

이 링크로 이동 더 읽으려면 RestAPI

+0

당신은 이것을 "http://api.twitter.com/oauth/authorize"에 넣을 방법을 지정할 수 있습니까 –

+0

이제 알았습니다 .. 보스. –

관련 문제