如何在谷歌上调用https://www.googleapis.com/plus/v1/people/me

时间:2012-01-24 15:49:49

标签: android oauth token

我正在开发一个Android应用程序,需要从谷歌获取“我”信息,但我总是以响应代码401或403结束。我做错了什么? 这是我的代码:

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中添加了一个项目,然后从中生成密钥并放入网址,例如: https://www.googleapis.com/plus/v1/people/me?key=my_generated_key&access_token=“+ authToken。 现在通话工作正常,我收到200响应的正确信息。但我真的不想使用这种方法,如果我没有,并根据谷歌我不应该“•如果请求需要授权(如请求个人的私人数据),那么它必须包括一个OAuth 2.0令牌。它也可能包含API密钥,但它没有。“ - 来自developers.google.com / + / api / oauth。

另一件事: 如果我尝试其他网址 “https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=”+ authToken 它工作正常。

6 个答案:

答案 0 :(得分:13)

问题在于传递给请求的简单api密钥。

如果请求中未包含关键参数,或者未针对该项目激活Google+ API,则会收到错误消息:  “超出每日限额。请注册”。

要解决此问题,您需要执行以下操作:

  • 点击此处访问Google API控制台:https://code.google.com/apis/console/?api=plus
  • 在“服务”面板下,确保Google+“已启用”。
  • 在API控制台中,单击左侧菜单中的API Access。
  • 复制显示在底部的API密钥。
  • 在您的HTTP请求中包含此API密钥。
GOOGLE_ME_URL + "?access_token=" + authToken + "&key=" + MY_SIMPLE_API_KEY

答案 1 :(得分:3)

大多数较新的Google API都有配额(如每日使用限制),有些甚至还有结算支持(根据API调用收费)。这些配额和结算是根据开发人员的项目计算的,而不是基于每个最终用户计算的,因此Google需要知道哪个应用分配您的API使用情况。

使用Google的OAuth 2.0的API客户端通常需要注册并获取客户端ID和客户端密码。

此API客户端ID和客户端密钥由Google API控制台返回:code.google.com/apis/console。

然后,您可以在应用中使用这些值,这可识别您的应用,并允许Google将您的API使用情况分配给您的开发者帐户/项目。

在您使用的AccountManger界面中,您的应用没有传递客户端ID,因此Google无法识别要扣除使用的开发者帐户/项目的配额。它也不知道您作为开发人员已正确启用了API(TOS接受等)。这就是为什么它要求你“请注册”并说“超出每日限制”(因为未注册的限制是对许多API的零请求)。

在这种情况下,您需要传递“密钥”值,以便访问从AccountManager检索到的OAuth 2.0令牌的API。

答案 2 :(得分:1)

为什么有些人不会尝试访问Google控制台。通过这种方式,您将能够访问至少403 forbidden problems来纠正所需的工具。 DMC

答案 3 :(得分:0)

您目前正在使用http,但实际上是通过https呼叫该网站。使用安全连接过程或使用http://地址。

(抱歉,暂无法评论)

答案 4 :(得分:0)

为您的应用程序生成新的身份验证令牌和密码,然后重试。

这可能会解决您的问题,但您的每日重试限制可能会耗尽......

我遇到了同样的问题。

答案 5 :(得分:0)

我有同样的问题,你只需要启用谷歌+ API 在控制台 享受:)