Обратный звонок в Твиттере и логин с помощью Jtwitter - PullRequest
1 голос
/ 26 марта 2012
 public class TwitterActivity extends Activity 
    {
        private Twitter twitter;
        private OAuthProvider provider;
        private CommonsHttpOAuthConsumer consumer;

        String CONSUMER_KEY = "abcdefgh";
        String CONSUMER_SECRET = "abcdefgh";
        String CALLBACK = "twitterapp://connect"; 


        @Override
        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            askOAuth();
        }

        private void askOAuth() {
            try {
                consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
                provider = new DefaultOAuthProvider("http://twitter.com/oauth/request_token",
                                                    "http://twitter.com/oauth/access_token",
                                                    "http://twitter.com/oauth/authorize");
                String authUrl = provider.retrieveRequestToken(consumer, CALLBACK);
                Toast.makeText(this, "Please authorize this app!", Toast.LENGTH_LONG).show();
                this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)));
            } catch (Exception e) {
                Log.e(APP, e.getMessage());
                Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
            }
        }

        @Override
        protected void onNewIntent(Intent intent) {

            super.onNewIntent(intent);

            Uri uri = intent.getData();
            if (uri != null && uri.toString().startsWith(CALLBACK)) {

                String verifier = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER);

                try {
                    // this will populate token and token_secret in consumer
                    provider.retrieveAccessToken(consumer, verifier);

                    // TODO: you might want to store token and token_secret in you app settings!!!!!!!!
                    AccessToken a = new AccessToken(consumer.getToken(), consumer.getTokenSecret());

                    // initialize Twitter4J
                    twitter = new TwitterFactory().getInstance();
                    twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
                    twitter.setOAuthAccessToken(a);

                    // create a tweet
                    Date d = new Date(System.currentTimeMillis());
                    String tweet = "#OAuth working! " + d.toLocaleString();

                    // send the tweet
                    twitter.updateStatus(tweet);

                } catch (Exception e) {
                    Log.e(APP, e.getMessage());
                    Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
                }

            }
        }
    }


P.S.: I have used these api's 
  [1]: https://github.com/punitmg/Twitter-Test-App
  [2]: https://github.com/grantland/twitter-android-sdk
  [3]: https://github.com/yusuke/twitter4j/  

Используя все эти API, я могу успешно твитнуть. Но, к сожалению, указанные ниже 2 экрана появляются во всех трех вышеупомянутых случаях.

Все, что я хочу, это закончить () или закрыть два нижних экрана, когда мой твит будет завершен.

So .... plz guide me if i was wrong ... 

screenshot1

screenshot2

1 Ответ

0 голосов
/ 10 октября 2012

Вы должны принудительно войти в систему во второй раз, чтобы решить эту проблему,

Так что просто добавьте force_login = true в ваш URL авторизации в твиттере.

Я имею в виду просто изменитьприведенная ниже строка кода в TwitterApp.java классе (если у вас есть файл класса с другим именем, найдите в вашем проекте DefaultOAuthProvider )

mHttpOauthprovider = new DefaultOAuthProvider("http://twitter.com/oauth/request_token",
                "http://twitter.com/oauth/access_token",
        "http://twitter.com/oauth/authorize?force_login=true");

последобавление force_login = true проблема с загрузкой веб-просмотра будет решена, но каждый раз, когда вам нужно будет ввести логин и пароль.

...