我正在开发一个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 它工作正常。
答案 0 :(得分:13)
问题在于传递给请求的简单api密钥。
如果请求中未包含关键参数,或者未针对该项目激活Google+ 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 在控制台 享受:)