我正在尝试通过Java中的简单POST调用来检索自己的忙/闲日历,并且遇到访问错误。基本上我遇到了404,notFound这样的错误:
{
"kind": "calendar#freeBusy",
"timeMin": "2019-05-28T13:00:00.000Z",
"timeMax": "2019-05-28T21:00:00.000Z",
"calendars": {
"me@mycompany.com": {
"errors": [
{
"domain": "global",
"reason": "notFound"
}
],
"busy": []
}
}
}
代码相当简单。如果我使用OAuth Playground的不记名令牌,就可以得到所需的一切,一切都很好。这是我的相关代码:
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(Objects.requireNonNull(classLoader.getResource("...a59.json")).getFile());
GoogleCredential credential = GoogleCredential
.fromStream(new FileInputStream(file))
.createScoped(CalendarScopes.all());
credential.refreshToken();
String accessToken = credential.getAccessToken();
我得到的accessToken
值导致上述响应。
对于我的服务帐户,我已经在启用Calendar API的项目中创建了该帐户。我还授予了它Project Owner
的角色,以便它可以完全访问项目中的设置。
我确定使用“服务帐户”配置这是一件小事,但是我一生都无法弄清楚它是什么。
答案 0 :(得分:1)
您还需要一步。
您将需要与服务帐户共享日历。
打开使用文本编辑器创建服务帐户时下载的something-something.json
文件,您会找到所需的电子邮件地址,作为“ client_email”键/值对的值。
转到日历中的“设置和共享”,然后单击“与特定人员共享”下的“ +添加人员”按钮。
您可能已经做到了,但是对于其他人,以下是使用服务帐户访问Google日历的完整过程:(allow my user to add meeting in my calendar with Google Calendar API with PHP without auth)
答案 1 :(得分:0)
所以我设法自己弄清楚了这一点。似乎我的服务帐户设置正确,但是我添加的权限不正确。作为记录,这是我想要的:
我已经创建了服务帐户,确保它具有“域范围委托”授权,已将Calendar和Admin API添加到了拥有该服务帐户的项目中,但是如果不将我的服务帐户添加到“ @Alex Baban上面的消息发送日历。
我回到了绘图板上,因为将其添加到几十个帐户中并不是一个理想的解决方案,然后我找到了它。我必须为我的服务帐户添加以下授权:
希望这可以帮助将来的其他人。