当前位置: 首页 > 知识库问答 >
问题:

谁拥有服务号通过谷歌日历应用编程接口创建的日历,它们如何共享?

赵景曜
2023-03-14

假设我有一个谷歌帐户some.account@gmail.com,其中项目Project-1(在谷歌开发者控制台中配置为谷歌应用引擎应用程序)和一个服务号,其中包含属于它的电子邮件地址12..@developer.gserviceaccount.com

我知道如何使用这个服务帐户创建日历并以编程方式操作其条目:我使用Google API客户端库(Java版本,带有服务帐户的凭据)在我的Google App Engine应用程序中调用Google calendar API,它就是这么做的。然而,任何这样创建的日历似乎都明显属于服务账户,而不是我的谷歌账户。我通过以下观察得出结论:

  • 当我在谷歌日历UI中查看我的谷歌帐户日历时,没有一个以编程方式创建的日历显示在My Calendars下。
  • 当我试图通过发布其他日历|添加朋友的日历和服务号的电子邮件地址来访问这样的日历时,我可以发送请求,但它永远不会得到回复(大概是因为服务号的电子邮件地址不是真正的电子邮件地址)。
  • 当我以编程方式创建日历时,我不会设置CalendarListEntry#隐藏,因此默认的false应该适用。

所以我的问题是:如何在普通的Google calendar Web UI中访问通过Google calendar API(在我的例子中是Java客户端)编程创建的日历和日历条目。例如,服务帐户是否可以与其拥有的谷歌帐户共享其日历,或者我是否可以直接在UI中使用其服务帐户凭据操纵谷歌帐户的日历。

我意识到之前有一些关于同一主题的问题,但是到目前为止它们还没有帮助我解开这个谜。

共有3个答案

孔运珧
2023-03-14

我以为你必须用PRN参数创建日历(这几乎把你现有的谷歌账户地址欺骗到了日历的“所有者”身份上)

因此,使用prn参数将允许您使用服务帐户身份验证(例如)在您的姓名(谷歌地址)中添加事件。

如果发现使用prn参数的讨论

端木震博
2023-03-14

根据(过时的)文档,您必须调用。setServiceAccountUser(“user@example.com“,事件将显示在该用户的日历上。

https://developers.google.com/identity/protocols/OAuth2ServiceAccount#authorizingrequests

委派全域权限
如果您已委派对服务帐户的全域访问权限,并且希望模拟用户帐户,请使用Google Credential factory的setServiceAccountUser方法指定用户帐户的电子邮件地址。例如:

GoogleCredential credential = new GoogleCredential.Builder()
    .setTransport(httpTransport)
    .setJsonFactory(JSON_FACTORY)
    .setServiceAccountId(emailAddress)
    .setServiceAccountPrivateKeyFromP12File(new File("MyProject.p12"))
    .setServiceAccountScopes(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN))
    .setServiceAccountUser("user@example.com")
    .build();

它必须是谷歌办公套件域的服务号,并且您必须启用谷歌办公套件域范围的委托。

屠君墨
2023-03-14

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

你所尝试的:

  • 日历不会显示在您的帐户中,因为您无权访问它们,即使您是appengine管理员

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

 类似资料:
  • 我有一个应用程序使用s2s与谷歌日历API的连接。我需要在不同的用户日历中创建事件。若要使之成为可能,用户应转到日历的设置并将其日历共享到服务帐户。但我想为用户简化这一点 - 这样他们就不需要去他们的日历设置。我没有用于用户交互的界面 - 这是一个机器人。如何以其他方式访问用户的日历?

  • 我能够使用服务帐户和谷歌日历API在谷歌日历中创建一个事件,其中项目和服务帐户是在谷歌工作区管理员帐户中创建的,在同一个帐户中,我启用了域范围的委派属性。我还没有创建单独的日历,也没有授予访问服务帐户的权限。如果我在CreateDelegate()中使用我的工作区google帐户,则此事件将在'abc@myworkspace.com对于我添加的每个与会者,“日历”和“创建人”属性也是相同的。 所以

  • 我有两个google workspace帐户用于测试。帐户A有一个服务帐户,在帐户B中,我添加了用于域范围委派的服务帐户,该帐户具有读取/写入帐户B中日历所需的权限。 阅读活动和日历很有效。但是,当尝试使用帐户B中的资源日历中的服务帐户创建事件时,我遇到以下错误: 添加的权限: 如果我们在一个Google工作空间帐户中进行测试,它就可以工作。 这是密码

  • 接下来,我生成了自己的OAuth2客户机ID并使用它。这种方法很简单,直到我开始收到来自Google的“匿名使用过期”错误,一段时间后我意识到这是因为密钥没有启用只读日历范围。 我的下一个想法是公开日历,并使用静态API密钥,但日历是从一个名为Peak Pro的预订服务中同步的,该服务用参加活动的客户的姓名、电子邮件和电话号码填充日历描述。我不能公开揭露那些。 接下来,我被吸引到了CalDAV A

  • 是否有人有链接或可以提供Java谷歌应用程序引擎项目的代码,该项目只是与谷歌日历交互。假设从日历中获取活动。 Google Sample calendar-app engine-Sample在从HG检出后无法编译,我曾尝试搜索教程并创建自己的教程,只是运气好而已。 我已经设置了一个 API 访问项目来获取客户端机密.json。

  • 假设我被授予访问其他用户日历的权限。我可以在Google calendar web UI的“其他日历”下成功地查看该日历。 该日历可以通过Caldav访问吗?如果是,怎么做? 我的CalDAV客户端开始查看https://apidata.googleusercontent.com/CalDAV/v2,并通过oauth2进行身份验证。它遵循当前用户主体URL,并从那里到日历主页集。在calendar