谁拥有服务帐户通过Google Calendar API创建的日历,以及如何共享这些日历?

Dru*_*rux 21 google-app-engine google-calendar-api google-account service-accounts

假设我有一个some.account@gmail.com带有项目的Google帐户project-1(在Google Developer Console中配置为Google App Engine应用程序)和一个包含12..@developer.gserviceaccount.com属于它的电子邮件地址的服务帐户.

我知道如何使用此服务帐户创建日历并以编程方式操作其条目:我使用Google API客户端库(Java版本,带有服务帐户凭据)在我的Google App Engine应用程序中调用Google Calendar API只是.但是,任何此类创建的日历似乎都由服务帐户明确拥有,而不是由我的Google帐户使用.我从以下观察中得出结论:

  • 当我在Google日历用户界面中查看我的Google帐户的日历时,所有以编程方式创建的日历都不会显示在日历下My calendars.
  • 当我尝试通过发出Other calendars| 来访问这样的日历 Add a friend´s calendar使用服务帐户的电子邮件地址,我可以发送请求,但它永远不会得到答复(可能是因为服务帐户的电子邮件地址不是"真实的"电子邮件地址).
  • 当我以编程方式创建日历时,我没有设置CalendarListEntry#hidden,因此应该应用默认值false.

所以我的问题是:如何在普通的Google Calendar Web UI中访问使用Google Calendar API(以及我的案例中的Java客户端)以编程方式创建的日历和日历条目.例如,服务帐户可以与其拥有的Google帐户共享其日历,还是可以使用UI中的服务帐户凭据直接操作Google帐户的日历.

我意识到在同一主题上有一些先前的问题,但到目前为止它们并没有帮助我解开这个谜团.

kom*_*oma 20

您必须以编程方式共享服务帐户创建的日历.日历归服务帐户所有.

你试过的:

  • 即使您是appengine管理员,日历也不会显示在您的帐户中,因为您无权访问它们.
  • 输入服务帐户的电子邮件地址不会在UI中显示日历,因为服务帐户的电子邮件地址不是日历的电子邮件地址.一个服务帐户可以创建多个日历.

以编程方式与您的帐户共享日历,记录日历唯一ID,然后在UI中输入.

  • +1所以我应该在Google Calendar API中使用[Acl:insert](https://developers.google.com/google-apps/calendar/v3/reference/acl/insert)并将`role`设置为`writer` ,`scope.type`到`user`,`scope.value`到`some.account @ gmail.com`? (6认同)
  • 是的,如果你想要充分的自由,让自己成为最简单的主人. (3认同)