我正在尝试使用Android应用程序访问Gmail API。
我已成功请求并使用所有可用范围组合接收了访问令牌。
但似乎每次我实际尝试使用Gmail API命令时,我都会收到403 exception reading: Access not configured please use Google developers console to activate the api...
毋庸置疑,API已激活,并且使用正确的包名称创建了客户端密钥。 sha1代码。相同的客户端ID适用于Google Plus功能。
是否有任何人遇到此问题或成功连接到Android的Gmail API?
由于
这是日志:
09-04 21:40:54.014: W/System.err(26717): com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
09-04 21:40:54.014: W/System.err(26717): {
09-04 21:40:54.014: W/System.err(26717): "code" : 403,
09-04 21:40:54.014: W/System.err(26717): "errors" : [ {
09-04 21:40:54.014: W/System.err(26717): "domain" : "usageLimits",
09-04 21:40:54.014: W/System.err(26717): "message" : "Access Not Configured. Please use Google Developers Console to activate the API for your project.",
09-04 21:40:54.014: W/System.err(26717): "reason" : "accessNotConfigured"
09-04 21:40:54.014: W/System.err(26717): } ],
09-04 21:40:54.014: W/System.err(26717): "message" : "Access Not Configured. Please use Google Developers Console to activate the API for your project."
09-04 21:40:54.014: W/System.err(26717): }
除了Google+ API和Gmail API之外,API控制台是否还需要启用其他API?
编辑:
我发现使用基于WebView的身份验证会产生一个授予Gmail API访问权限的访问令牌,但这不是一个有效的解决方案,因为令牌很短暂。至于现在,GoogleAuthUtil会授予令牌,但它的权限不足以使用Gmail API。 有人成功地将Android与Gmail API连接并希望分享?
EDIT2:
以下是我正在做的片段:
获取令牌:
token = GoogleAuthUtil.getToken(MainActivity.this, Plus.AccountApi.getAccountName(mGoogleApiClient), scope);
尝试从Gmail API获取邮件:
GoogleCredential credential = new GoogleCredential().setAccessToken(token);
JsonFactory jsonFactory = new JacksonFactory();
HttpTransport httpTransport = new NetHttpTransport();
service = new Gmail.Builder(httpTransport, jsonFactory, credential).setApplicationName("GmailApiTP").build();
ListMessagesResponse messagesRespose;
List<Message> m = null;
ArrayList<String> ids = new ArrayList<String>();
ids.add("INBOX");
try {
messagesRespose = service.users().messages().list("me").setLabelIds(ids).setQ("From: something")
.execute();
m = messagesRespose.getMessages();
} catch (IOException e) {
e.printStackTrace();
}
使用Gmail API服务时会捕获异常。此外,我已经尝试清除令牌并要求一个具有相同结果的新令牌。
答案 0 :(得分:6)
虽然没有清楚地描述,但问题是通过GoogleAuthUtil.getToken()
获得的令牌在本地缓存并且可能会过期。您收到的403错误是由于令牌过期造成的。处理这种情况的正确方法是调用GoogleAuthUtil.clearToken()
删除本地缓存的令牌,然后调用GoogleAuthUtil.getToken()
以获取新的令牌。
或者,您可以跟踪上次请求令牌的时间,如果它超过一小时(这些令牌的默认到期时间),请先抢先执行clearToken + getToken调用。
答案 1 :(得分:4)
该错误消息具有欺骗性,我相信当开发人员项目凭据客户端不正确时也会发生这种情况。例如,当您真正想要“安装的应用程序”时,您选择了“Web应用程序”。
确认您正确遵循以下说明: https://developers.google.com/accounts/docs/OAuth2
(应该是“已安装的应用程序”等)
您可以从开发者控制台发布您拥有的oauth客户端信息吗? (在那里输入类型和任何其他非机密信息等)
答案 2 :(得分:0)
您需要在Google Dev Console中设置Android应用密钥。
45:B5:E4:6F:36:AD:0A:98:94:B4:02:66:2B:12:17:F2:56:26:A0:E0;com.example
您的问题将自动解决。确保使用调试密钥库和发布密钥库创建客户机ID和密钥。
答案 3 :(得分:-3)
这是这笔交易。到目前为止,GoogleAuthUtil&amp;&amp; amp; AccountManager无法使用Gmail API。不知道它是否是谷歌的东西,但我的解决方案是:
在API控制台中创建客户端ID(Applicaion-&gt; Other)。 使用客户端ID&amp;客户端通过WebView获取访问令牌的秘密。 保存结果刷新令牌。 现在,只要您想刷新访问令牌,请使用此请求:
httpClient = new DefaultHttpClient();
httpPost = new HttpPost(address);
params.add(new BasicNameValuePair("refresh_token", token));
params.add(new BasicNameValuePair("client_id", client_id));
params.add(new BasicNameValuePair("client_secret", client_secret));
params.add(new BasicNameValuePair("grant_type", "refresh_token"));
httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
适合我。希望以后将使用GoogleAuthUtil.getToken()选项提供有效的令牌。