2012-01-24 2 views
8

Я разрабатываю приложение для Android и вам нужно получить информацию о «мне» из Google, но я всегда получаю в любом ответе код 401 или 403. Что я делаю неправильно? Вот мой код:Как позвонить https://www.googleapis.com/plus/v1/people/me в google

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

Я получаю маркер OAuth путем (примечание ... ниже код укорачивается):

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

До сих пор так хорошо ... У меня теперь есть маркер так здесь все выглядит хорошо.

Теперь получить информацию мне:

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

Это дает код ответа 401.

Я также попытался:

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

Это дает код ответа 403 - Что-то вроде «Дейли предел превышен. Пожалуйста, зарегистрируйтесь ».

Что я делаю неправильно? что я пропустил? Как это сделать?

Благодаря

// редактирует ниже Некоторые больше исследований: Я добавил проект в code.google.com/apis/console и взял ключ, созданный оттуда и поместить в URL, как: https://www.googleapis.com/plus/v1/people/me?key=my_generated_key&access_token= "+ authToken. Теперь звонок работает нормально, и я получаю ответ 200 с правильной информацией. Но я действительно не хочу использовать этот метод, если мне не нужно и в соответствии с google мне не нужно" Если для запроса требуется авторизация (например, запрос личных данных пользователя), он должен включать токен OAuth 2.0. Он также может включать в себя ключ API, но он не должен.»- от developers.google.com/+/api/oauth

Другое дело:. Если я попробовать другой URL, как „https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=“+ authToken он работает отлично

ответ

0

вы используете HTTP в данный момент, но вы на самом деле заход в сайте по протоколу HTTPS либо использовать безопасную процедуру подключения или использовать HTTP:... // адрес

(к сожалению , еще не смог проголосовать)

+0

Привет и спасибо за вашу помощь. Вы имеете в виду, что я не могу использовать DefaultHttpClient и HttpGet? Можете ли вы опубликовать, как я должен это делать? – user1140596

+0

Другие вызовы https, такие как h t t p s: // w w w.googleapis.com/oauth2/v1/tokeninfo?access_token=my_authToken работает отлично с тем же кодом. См. Мое редактирование в главном сообщении – user1140596

+0

Да, извините, возможно, вы правы. Некоторое время назад я столкнулся с проблемой сертификата, и это была настоящая проблема. Я должен был сделать несколько вещей, чтобы заставить его работать, но теперь я вижу, что ваша проблема другая. Для записей, вот что я должен был сделать: http://stackoverflow.com/questions/2012497/accepting-a-certificate-for-https-on-android – Scalarr

0

Создать новый токен аутентификации d секретно для вашего приложения и повторите попытку.

Это может решить вашу проблему, но ваш ежедневный лимит повторных попыток может быть исчерпан ...

У меня был тот же вопрос, что вы имеете.

+0

Я пробовал функцию invalidateAuthToken, а затем получил новый токен auth, но это не помогло. Я все равно получаю те же результаты. – user1140596

+0

BTW, я не создавал никаких «секретных». Что это? – user1140596

+0

секретный и токен, выданный при регистрации регистра ur. – sandeep

1

Почему некоторые из вас не пытаются перейти в Google Консоль. Таким образом, вы сможете получить доступ к инструментам, необходимым для исправления не менее 403 forbidden problems. DMC

3

Большинство новых API Google имеют квоты (например, ежедневные ограничения использования), а некоторые даже имеют поддержку выставления счетов (там, где вы получаете счет за вызов API). Эти квоты и биллинг рассчитываются для каждого проекта разработчика, а не для каждого пользователя, поэтому Google должен знать, какое приложение назначит использование вашего API.

Клиенты API, использующие Google OAuth 2.0, как правило, обязаны регистрироваться и получать идентификатор клиента и секрет клиента.

Этот идентификатор клиента и секрет клиента возвращаются консолью API Google: code.google.com/apis/console.

Затем вы используете эти значения в своем приложении, и это определяет ваше приложение и позволяет Google назначать ваше использование API для вашей учетной записи/проекта разработчика.

В интерфейсе AccountManger, который вы используете, идентификатор клиента не передается вашим приложением, поэтому Google не может определить, какая учетная запись разработчика/квота проекта вычитается для использования. Он также не знает, что API был правильно включен (TOS принят и т. Д.) Вами как разработчиком. Вот почему он просит вас «пожалуйста, зарегистрируйтесь» и сообщите, что «превышен лимит ежедневных лимитов» (поскольку незарегистрированный лимит является нулевым запросом для многих API-интерфейсов).

В этом случае вам необходимо передать значение «ключа», как это было сделано для доступа к API с токенами OAuth 2.0, извлеченными из AccountManager.

13

Вопрос касается простого ключа api, переданного в запрос.

Если ключевой параметр не включен в запрос или API Google+ не был активирован для этого проекта, вы получите сообщение об ошибке: «Превышен лимит времени. Пожалуйста, зарегистрируйтесь».

Чтобы решить эту проблему, вам нужно сделать следующее:

  • Посетите Google API Console здесь: https://code.google.com/apis/console/?api=plus
  • Под панелью обслуживания, убедитесь, что Google+ API включен "на".
  • В консоли API щелкните API Access в меню слева.
  • Скопируйте ключ API, представленный снизу.
  • Включите этот ключ API в свой HTTP-запрос.
GOOGLE_ME_URL + "?access_token=" + authToken + "&key=" + MY_SIMPLE_API_KEY 
+0

Это помогло! Шаги: # 1. создать проект на консоли разработчика, добавить google plus API. # 2. start oauth с GET https://accounts.google.com/o/oauth2/v2/auth?client_id добавить не менее https://www.googleapis.com/plus.login и https://www.googleapis.com/ plus.me. # 3. Получить токен для кода (POST https://www.googleapis.com/oauth2/v4/token) # 4.Проверьте предоставленные разрешения (GET https://www.googleapis.com/oauth2/v1/tokeninfo?key=YOUR_KEY&access_token=YOUR_TOKEN) - убедитесь, что plus.me было предоставлено №5. GET https://www.googleapis.com/people/me?key=YOUR_KEY&access_token=YOUR_TOKEN – nagylzs

+0

Спасибо. Я не знаю, почему так трудно найти. Так много документов об использовании API от других интерфейсов. Мне просто нужна простая форма REST. –

0

У меня тот же вопрос, просто необходимо включить Google + API в консоли наслаждаться :)