android twitter retrieveRequestToken 401 по запросу токен - PullRequest
13 голосов
/ 23 июля 2010

Я пытаюсь использовать следующий пример приложения для 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);

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

Ответы [ 6 ]

14 голосов
/ 24 мая 2012

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

Все учебные пособия и вся информация, которую я нашел в Интернете, просто недействительны.Твиттер давно удалил радиокнопку «Клиент / Сайт».

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

8 голосов
/ 26 июля 2010

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

4 голосов
/ 27 июля 2010

** 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) настроено ли ваше приложение для Twitter в качестве браузера? попробуйте с помощью этих клавиш:

Ключ потребителя

sdOjEI2cOxzTLHMCCMmuQ

Секрет потребителя

biI3oxIBX2QMzUIVaW1wVAXygbynuS80pqSliSDTc

2 голосов
/ 10 марта 2013

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

1 голос
/ 08 сентября 2010

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

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

Наслаждайтесь ..

1 голос
/ 29 июля 2010

наконец сделано, проверьте следующий пост

проблема обратного вызова в учебнике для Android в Twitter

...