2012-01-31 13 views
1

私のアプリでは、ユーザーが投稿を共有しようとするたびにTwitterのログインを表示したいと思います。AndroidでのTwitter認証

共有設定でツイッターの認証情報を保存したくないのですが、2回目に投稿を共有しようとするとログインフィールドが表示されません。

誰でも問題を把握できますか?

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

私はあなたがforce_login = trueだURL

で一つのパラメータを逃し、これでもセッションは有効期限が切れていないログインするユーザーに尋ねると思います。 RestAPI

+0

これを「http://api.twitter.com/oauth/authorize」に入れる方法を指定することができます –

+0

今私はそれを持っています..boss.thanks –