使用Android进行Gmail API访问

Tal*_*ihr 12 android google-oauth google-schemas google-oauth-java-client gmail-api

我正在尝试使用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): }
Run Code Online (Sandbox Code Playgroud)

是否需要在API控制台中启用除Google+ API和Gmail API之外的任何其他API?

编辑:

我发现使用基于WebView的身份验证将导致访问令牌授予Gmail API访问权限,但这不是有效的解决方案,因为令牌是短暂的.至于现在,GoogleAuthUtil会授予令牌,但它的权限不足以使用Gmail API.有人成功将Android与Gmail API连接并希望分享?

EDIT2:

以下是我正在做的片段:

获得令牌:

token = GoogleAuthUtil.getToken(MainActivity.this, Plus.AccountApi.getAccountName(mGoogleApiClient), scope);
Run Code Online (Sandbox Code Playgroud)

尝试从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();
}
Run Code Online (Sandbox Code Playgroud)

使用Gmail API服务时会遇到异常.此外,我已经尝试清除令牌并要求一个具有相同结果的新令牌.

Eri*_*eda 6

虽然没有清楚地描述,但问题是获得的令牌GoogleAuthUtil.getToken()是在本地缓存的并且可能会过期.您收到的403错误是由于令牌过期造成的.处理这种情况的正确方法是调用GoogleAuthUtil.clearToken()删除本地缓存的令牌,然后调用GoogleAuthUtil.getToken()以获取新的令牌.

或者,你可以跟踪你的要求令牌的最后时间,如果它是一个多小时(默认到期时间为这些令牌)都大做的ClearToken +为gettoken调用前先发制人.


Eri*_*c D 4

该错误消息具有欺骗性,我相信当开发人员项目凭据客户端不正确时也会发生这种情况。例如,当您真正想要“安装的应用程序”时,您选择了“网络应用程序”。

确认您正确遵循以下说明: https://developers.google.com/accounts/docs/OAuth2

(应该是“已安装的应用程序”等)

您可以发布从开发人员控制台获得的 oauth 客户端信息吗?(其中的类型和任何其他非机密信息等)