twitter登录回调Android应用程序

时间:2012-09-14 15:22:11

标签: android twitter login callback twitter4j

我正在尝试使用Twitter4j库从我的Android应用程序登录Twitter,但是当调用回调时崩溃...并且出现此屏幕:该页面不可取消

这是我的代码:

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

    Twitter twitter;
    RequestToken requestToken;

    /*
    * 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(TwitterConstants.CONSUMER_KEY,TwitterConstants.CONSUMER_SECRET_KEY);
                requestToken = twitter.getOAuthRequestToken(TwitterConstants.CALLBACK_URL);
                Log.w("TwitterLogin requestToken callbackUrl: "+requestToken.toString());
    //          requestToken = twitter.getOAuthRequestToken(OAuth.OUT_OF_BAND);
    //          String pin = requestToken.getParameter(OAuth.OAUTH_VERIFIER);
                String authUrl = requestToken.getAuthenticationURL();
                Log.w("TwitterLogin requestToken authUrl: "+authUrl);
                this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)));
                Log.w("TwitterLogin despres del startActivity intent");
                } 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);
            Log.w("TwitterLogin  dintre del onNewIntent");
            Uri uri = intent.getData();

            Log.w("TwitterLogin uri: "+uri.toString());

                if (uri != null && uri.toString().startsWith(TwitterConstants.CALLBACK_URL)){

                    try {
                        String verifier = uri.getQueryParameter("oauth_verifier");
                        Log.w("TwitterLogin","onNewIntent oauth_verifier: "+verifier);
                        AccessToken accessToken = twitter.getOAuthAccessToken(requestToken, verifier);
                        Log.w("TwitterLogin","onNewIntent accesToken: "+accessToken.toString());
                        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());
                    }
                }

        }

    /*
    * Displays the timeline's first tweet in a Toast
    */

        @SuppressWarnings("deprecation")
        void displayTimeLine(String token, String secret) {
            if (null != token && null != secret) {
                List<Status> statuses = null;
                try {
                    twitter.setOAuthAccessToken(token, secret);
                    statuses = twitter.getFriendsTimeline();
                    Toast.makeText(this, statuses.get(0).getText(), Toast.LENGTH_LONG)
                    .show();
                } catch (Exception ex) {
                    Toast.makeText(this, "Error:" + ex.getMessage(),
                    Toast.LENGTH_LONG).show();
                    Log.d("Main.displayTimeline",""+ex.getMessage());
                }

            } else {
                Toast.makeText(this, "Not Verified", Toast.LENGTH_LONG).show();
            }
        }
    }

如果有人可以帮助我,我一直试图在Twitter登录2天,我不知道如何解决这个问题。

由于

1 个答案:

答案 0 :(得分:0)

您是否在Twitter上注册了应用程序时为您的应用程序提供了回调URL。

如果你提供了回调网址,那么在Android客户端中使用它...

因为您正在使用回调提出请求

requestToken = twitter.getOAuthRequestToken(TwitterConstants.CALLBACK_URL);

然后服务器也会在登录成功后回复Twitter回复。