Javascript: Google 日历 + api: 服务帐户

Javascript: Google Calender + gapi: service account

我的应用程序使用 Firebase 来让用户登录,他们可以访问一个日历,该日历专门创建为一个通用日历,用于添加和删除预订。

可以说,该应用为此目的拥有自己的 gmail 地址。该应用程序通过 google API(gapi 客户端)访问。

为了让用户能够与日历交互,我发现我只能使用日历/应用程序的服务帐户。

到目前为止我设法:

现在,当我开始检索 google 日历事件时,我确实得到了成功的响应,但是事件数组是空的,即使共享日历中有可用的测试事件也是如此。

响应如下所示:

{
 "kind": "calendar#events",
 "etag": "\"pqef3g4h5j6j0g\"",
 "summary": "my_app_email@appspot.gserviceaccount.com",
 "updated": "2019-01-15T21:14:05.029Z",
 "timeZone": "UTC",
 "accessRole": "owner",
 "defaultReminders": [],
 "items": []
}

Whosebug 上有一些与此相关的主题,但其中 none 具有有用的信息,或者它们适用于 Pythin / PHP。

我希望有人可以就此提出建议 Javascript...

我解决了这个问题...问题出在获取事件时的 gapi 请求中。 我使用了错误的 calendarId。我将其值设置为默认值 'primary',但要使用的实际 calendarId 可以在 Google 日历设置 >> 集成日历下找到。在我的设置中,calendarId 是关联帐户的电子邮件地址。

因此 gapi 请求如下所示:

const fetchTimeLimit = new Date(2019, 0, 1).toISOString();

let events = await gapi.client.calendar.events.list({
  calendarId: 'calendar_email@gmail.com',
  timeMin: fetchTimeLimit,
  showDeleted: false,
  singleEvents: true,
  maxResults: 300,
  orderBy: 'startTime'
})
.then(response => {  ........etc