2012-01-24 11 views
8

Pracuję nad aplikacją na Androida i muszę uzyskać informacje "mnie" od google, ale zawsze otrzymuję odpowiedź kod 401 lub 403. Co robię źle? Oto mój kod:Jak zadzwonić pod https://www.googleapis.com/plus/v1/people/me pod adresem google

private static final String GOOGLE_AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/plus.me"; 

uzyskać token OAuth przez (uwaga ... Kod poniżej jest skrócona):

Account googleAccount = (AccountManager) getSystemService(ACCOUNT_SERVICE).getAccountsByType("com.google")[0]; 
final Bundle bundle = manager.getAuthToken(googleAccount, GOOGLE_AUTH_TOKEN_TYPE, true, null, null).getResult(); 
String authToken = bundle.getString(AccountManager.KEY_AUTHTOKEN); 

tej pory tak dobrze ... teraz mam tak token wszystko tu wygląda dobrze.

teraz uzyskać informacje o mnie:

String GOOGLE_ME_URL = "https://www.googleapis.com/plus/v1/people/me"; 
final DefaultHttpClient client = new DefaultHttpClient(); 
final HttpGet request = new HttpGet(GOOGLE_ME_URL); 
request.addHeader("Authorization", "OAuth=" + authToken); 
final HttpResponse response = client.execute(request); 

daje ten kod odpowiedzi 401.

Próbowałem również:

final DefaultHttpClient client = new DefaultHttpClient(); 
final HttpGet request = new HttpGet(GOOGLE_ME_URL + "?access_token=" + authToken); 
final HttpResponse response = client.execute(request); 

Daje kod odpowiedzi 403 - coś w stylu „dzienny limit przekroczone. Zarejestruj się ".

Co robię źle? co przeoczyłem? Jak to zrobić?

Dzięki

// Modyfikacje poniżej Niektóre bardziej dochodzenie: Dodałem projektu do code.google.com/apis/console i wziął klucz wygenerowany stamtąd i wstawić do adresu URL, takich jak: https://www.googleapis.com/plus/v1/people/me?key=my_generated_key&access_token= "+ authToken. Teraz połączenie działa dobrze i otrzymuję odpowiedź 200 z prawidłowymi informacjami, ale naprawdę nie chcę używać tej metody, jeśli nie muszę i zgodnie z Google nie powinienem" Jeśli żądanie wymaga autoryzacji (np. Żądanie prywatnych danych osoby), musi zawierać token OAuth 2.0. Może ona również zawierać klucz API, ale nie muszą.”- od developers.google.com/+/api/oauth

Inną rzeczą. Gdy próbuję kolejny url podobny «https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=»+ authToken działa dobrze

Odpowiedz

0

używasz http w tej chwili, ale w rzeczywistości wywoływania witrynie w ciągu https albo użyć bezpiecznego procedurę połączenia lub użyć http:... // adres

(przepraszam , nie można tego jeszcze skomentować)

+0

Cześć i dzięki za pomoc. Masz na myśli, że nie mogę użyć DefaultHttpClient i HttpGet? Czy możesz zamiast tego opublikować, jak powinienem to zrobić? – user1140596

+0

Inne połączenia https, takie jak h t t p s: // w w w.googleapis.com/oauth2/v1/tokeninfo?access_token=my_authToken działa poprawnie z tym samym kodem. Zobacz moją edycję w głównym poście. – user1140596

+0

Tak, przepraszam, może masz rację. Wpadłem kiedyś na problem z certyfikatem i było to prawdziwe kłopotliwe. Musiałem zrobić kilka rzeczy, żeby to działało, ale teraz widzę, że twój problem jest inny. W przypadku rekordów, oto co musiałem zrobić: http://stackoverflow.com/questions/2012497/accepting-a-certyfikat-for-https-on-android – Scalarr

0

Generowanie nowego tokena autoryzacji d secret dla twojej aplikacji i spróbuj ponownie.

To może rozwiązać problem, ale twój dziennego limitu ponawiania może być wyczerpany ...

miałem ten sam problem, z którym masz.

+0

Próbowałem funkcji invalidateAuthToken, a następnie otrzymałem nowy token autoryzacji, ale to nie pomogło. Wciąż mam te same wyniki. – user1140596

+0

BTW, nie wygenerowałem żadnego "tajnego". Co to jest? – user1140596

+0

Tajemnica i token są wydawane po zarejestrowaniu aplikacji. – sandeep

1

Dlaczego niektórzy z was nie próbują przejść do konsoli Google. W ten sposób będziesz mieć dostęp do narzędzi potrzebnych do naprawienia co najmniej 403 forbidden problems. DMC

3

Większość nowszych interfejsów API Google ma przydzielone limity (np. Limity dziennego wykorzystania), a niektóre mają nawet obsługę płatności (za które pobierane są opłaty za każde połączenie API). Te kwoty i rozliczenia są obliczane według projektu dewelopera, a nie według użytkownika końcowego, więc Google musi wiedzieć, która aplikacja ma przypisać użycie interfejsu API.

Klienci korzystający z interfejsu API OAuth 2.0 firmy Google zazwyczaj muszą zarejestrować się i uzyskać identyfikator klienta oraz tajny klucz klienta.

Ten identyfikator klienta i tajny klucz klienta są zwracane przez konsolę Google APIs: kod.google.com/apis/console.

Następnie używasz tych wartości w swojej aplikacji, co identyfikuje twoją aplikację i pozwala Google przypisać twoje użycie API do twojego konta/projektu dewelopera.

W używanym interfejsie AccountManger nie ma identyfikatora klienta przekazanego przez aplikację, więc Google nie może określić, które konto programisty/limit projektu ma odliczyć do wykorzystania. Nie wie także, że API zostało poprawnie włączone (TOS akceptowane, itp.) Przez ciebie jako programistę. Dlatego prosi o "zarejestruj się" i powiedz "przekroczono dzienny limit" (jako że niezarejestrowany limit to zero żądań dla wielu interfejsów API).

W tym scenariuszu konieczne jest przekazanie wartości "klucz" tak, jak w celu uzyskania dostępu do interfejsów API za pomocą tokenów OAuth 2.0 pobranych z AccountManager.

13

Problem dotyczy prostego klucza interfejsu API przekazanego do żądania.

Jeśli kluczowy parametr nie został uwzględniony w żądaniu lub interfejs API Google+ nie został aktywowany dla tego projektu, pojawi się błąd: "Przekroczono dzienny limit." Zarejestruj się ".

Aby rozwiązać ten problem, należy wykonać następujące czynności:

  • Wizyta konsoli API Google tutaj: https://code.google.com/apis/console/?api=plus
  • pod panelem Services, upewnij się, że API Google+ jest włączone "ON".
  • W konsoli API kliknij opcję Dostęp API w menu po lewej stronie.
  • Skopiuj klucz API przedstawiony w dolnej części.
  • Dołącz ten klucz API do żądania HTTP.
GOOGLE_ME_URL + "?access_token=" + authToken + "&key=" + MY_SIMPLE_API_KEY 
+0

Pomogło! Kroki: # 1. utwórz projekt na konsoli programisty, dodaj google plus API. # 2. uruchom oauth za pomocą GET https://accounts.google.com/o/oauth2/v2/auth?client_id dodaj co najmniej https://www.googleapis.com/plus.login i https://www.googleapis.com/ plus.me do zakresu. # 3. Uzyskaj token kodu (POST https://www.googleapis.com/oauth2/v4/token) # 4.Sprawdź przyznane uprawnienia (POBIERZ https://www.googleapis.com/oauth2/v1/tokeninfo?key=YOUR_KEY&access_token=YOUR_TOKEN) - upewnij się, że plus.me uzyskało # 5. POBIERZ https://www.googleapis.com/people/me?key=YOUR_KEY&access_token=YOUR_TOKEN – nagylzs

+0

Dzięki. Nie wiem, dlaczego tak trudno było znaleźć. Tak wiele dokumentów na temat używania API z innych interfejsów. Potrzebowałem tylko prostej formy REST. –

0

Mam ten sam problem, wystarczy włączyć google + api w konsoli cieszyć :)

Powiązane problemy