Android twitter retrieveRequestToken 401 по запросу токен

Я пытаюсь выполнить следующее примерное приложение для twitter oauth.

http://www.androidsdkforum.com/android-sdk-development/3-oauth-twitter.html

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_URL);
            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();
        }
    }

Когда я запускаю следующий код, он дает исключение, следуя

"oauth.signpost.exception.OAuthNotAuthorizedException: авторизация не удалась (сервер ответил с 401). Это может произойти, если потребительский ключ не был прав или подписи не совпадали."

на этой строке String authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URL);

Я предоставил правильный "ключ" и "секрет", твиттер дал мне неправильный ключ и секрет?

Ответ 2

Я потратил несколько часов на это. Кажется, вы должны установить ЛЮБОЕ значение URL-адреса обратного вызова на вкладке "Настройки" в панели разработчиков приложений Twitter. Сохранение пустого значения по умолчанию отключает динамические обратные вызовы.

Все учебники и вся информация, которую я нашел в Интернете, просто недействительны. Twitter долго удалял переключатель "Клиент/Веб-сайт".

Кроме того, OAuth проверяет наличие перекосов часов.

Ответ 3

У меня была такая же проблема. Он появился только на моем телефоне, но на эмуляторе и другом телефоне код работал нормально. После того, как вы опробовали несколько решений связанных вопросов без везения, в конечном итоге оказалось, что я не установил время и дату на телефоне dev, в котором нет сим-карты. Это привело к тому, что SSL-сертификаты были недействительными, а запрос OAuth - неудачным, а также все, что использовало HTTPS. После установки времени проблемы исчезли.

Ответ 4

** 1) ** Установите дату и время в правильные значения, это поможет исправить эту проблему. ****

2)

private OAuthConsumer consumer;
private OAuthProvider provider;
...
...
...
provider = new CommonsHttpOAuthProvider (
                TWITTER_REQUEST_TOKEN_URL, 
                TWITTER_ACCESS_TOKEN_URL,
                TWITTER_AUTHORIZE_URL);

private void askOAuth() {
        try {
            consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
            provider = new CommonsHttpOAuthProvider("http://twitter.com/oauth/request_token",
                                                "http://twitter.com/oauth/access_token",
                                                "http://twitter.com/oauth/authorize");

            provider.setOAuth10a(true);

            String authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URL);
            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();
        }
    }

3) - ваше твиттер-приложение, настроенное как браузер? попробуйте с помощью этих клавиш:

Потребительский ключ

sdOjEI2cOxzTLHMCCMmuQ

Потребительский секрет

biI3oxIBX2QMzUIVaW1wVAXygbynuS80pqSliSDTc

Ответ 5

используя https вместо http в провайдере

Ответ 6

yes totramon прав... Если вы столкнулись с проблемой только во время проверки подлинности, вам может потребоваться установить время устройства. Я столкнулся с той же проблемой и решил это решение. Также, если вы используете старый twitter api, вам нужно изменить его на стабильную версию api (2.1.4). Вы можете найти по следующей ссылке:

http://twitter4j.org/en/index.html

Enjoy..