2010-07-23 10 views
13

Próbuję następującej przykładowej aplikacji dla twitter oauth.android twitter retrieveRequestToken 401 na żądanie token

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

Kiedy uruchomić następujący kod daje wyjątek następująco

„oauth.signpost.exception.OAuthNotAuthorizedException: Autoryzacja nie powiodła się (serwer odpowiedział 401) może się to zdarzyć, jeśli. klucz konsumenta nie był poprawny lub podpisy się nie zgadzały. "

na tej linii String authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URL);

I przewidzianego poprawny „klucz” i „tajne” Czy Twitter daje mi zły klucz i sekret?

+0

plz powiedz mi, co umieścić w CALLBACK_URL ??? – Shruti

+0

Twój adres URL działania Android, który zostanie wywołany po twitterze, zwrócił odpowiedź –

+0

Twój URL działania Android, który zostanie wywołany, gdy twitter zwrócił odpowiedź –

Odpowiedz

1

końcu zrobić, sprawdź następujące po

android twitter outh tutorial callback problem

+0

ok Pytałem kilka razy "czy aplikacja do Twittera skonfigurowana jest jako przeglądarka ???" –

+0

tak skonfigurowany jako przeglądarka. –

+0

Zdałem sobie sprawę, że odpowiadasz na własne pytania, nawet przy pomocy innych użytkowników, aby zdobyć punkty. – Jorgesys

8

Po prostu miałem ten sam problem. Pojawił się tylko na moim dev-telefonie, ale na emulatorze i innym telefonie kod zadziałał dobrze. Po wypróbowaniu kilku rozwiązań pokrewnych pytań bez powodzenia, w końcu okazało się, że nie ustawiłem godziny i daty na telefonie programisty, który nie ma karty SIM. Spowodowało to, że certyfikaty SSL były nieważne, a żądanie OAuth nie powiodło się, a także wszystko inne, co używało protokołu HTTPS. Po ustawieniu czasu problemy zniknęły.

+0

wydawało się, że wiele innych możliwych przyczyn tak samo problem, ale ten, którego nie mogłem znaleźć sugerowane wcześniej, prawdopodobnie y, ponieważ nie jest to dokładnie problem z samym Twitterem lub OAuth. – DonSteep

+4

+1, Masz rację, aby ustawić datę i godzinę w telefonie bez karty SIM. –

4

** 1) ** datę i czas do właściwych wartości Ustaw, to pomoże rozwiązać ten problem. ****

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) jest twoją aplikacją twitter skonfigurowaną jako przeglądarka? spróbować z tego klawiszy:

Consumer klucz

sdOjEI2cOxzTLHMCCMmuQ

Consumer tajny

biI3oxIBX2QMzUIVaW1wVAXygbynuS80pqSliSDTc

+0

Próbuję powyższego kodu w emulatorze i przetestowałem na urządzeniu również nie działa w obu warunkach. Spróbuję ponownie, ustawiając datę i godzinę emulatora, a następnie wypróbuję. –

+0

@Faisal Edytowałem twój kod w mojej odpowiedzi. – Jorgesys

+0

Próbowałem tego, ale nadal nie działa, otrzymując ten sam błąd. –

1

tak totramon ma rację ... Jeśli napotkasz problem tylko podczas uwierzytelniania, być może musisz ustawić czas urządzenia. Zmierzyłem się z tym samym problemem i rozwiązałem tylko to rozwiązanie. Również jeśli używasz api ze starszej wersji, musisz go zmienić na stabilną wersję api (2.1.4). można znaleźć pod następującym adresem:

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

Ciesz ..

14

spędziłem kilka godzin w tej sprawie. Wygląda na to, że musisz ustawić DOWOLNĄ wartość URL-a wywołania zwrotnego na karcie Ustawienia w panelu programisty aplikacji na Twitterze. Pozostawienie domyślnej pustej wartości wyłącza dynamiczne adresy URL wywołania zwrotnego.

Wszystkie samouczki i wszystkie informacje, które znalazłem w Internecie, są nieważne.Twitter długo usuwał przycisk radiowy "Klient/witryna".

Co więcej, OAuth sprawdza, czy nie występują przesunięcia zegara.

+2

+1 Ustawienie dla adresu URL wywołania zwrotnego (np. Https://dev.twitter.com). –

+0

@gilm: Za późno, by powiedzieć, ale muszę ci bardzo podziękować! –

+0

@gilm dzięki to rozwiązał mój problem. – Siddhesh

2

użyciu https zamiast http w dostawcę

+0

To zadziałało dla mnie. dzięki! –

Powiązane problemy