Google api 谷歌日历API don';t返回共享日历

Google api 谷歌日历API don';t返回共享日历,google-api,google-calendar-api,google-oauth,service-accounts,Google Api,Google Calendar Api,Google Oauth,Service Accounts,初步情况: 在我们的一项服务中,我们使用一个服务帐户来调用Google日历API 用户可以通过其技术电子邮件地址与此技术帐户共享其日历 (@.iam.gserviceaccount.com) 由于日历是共享的,我们可以通过API查询它们(CalendarList/List:) 这一切在几年内都运转良好,没有任何问题 当前问题: 正如我们最近发现的,新共享的日历不再通过API调用返回。过去共享的日历仍会返回(!) 我们知道PageToken并处理它们——这不会是一个问题。对于一个(测试)帐户

初步情况:

  • 在我们的一项服务中,我们使用一个服务帐户来调用Google日历API
  • 用户可以通过其技术电子邮件地址与此技术帐户共享其日历 (@.iam.gserviceaccount.com)
  • 由于日历是共享的,我们可以通过API查询它们(CalendarList/List:)
  • 这一切在几年内都运转良好,没有任何问题
当前问题:

  • 正如我们最近发现的,新共享的日历不再通过API调用返回。过去共享的日历仍会返回(!)
  • 我们知道PageToken并处理它们——这不会是一个问题。对于一个(测试)帐户,当前仅共享8个日历,我们无法获得更多
  • 在后端调用期间没有错误/警告
  • Google开发者控制台上没有错误/警告/配额问题
我们尚未收到谷歌关于日历API更改或我们帐户限制的任何警告/警报。此外,我还没有发现任何关于谷歌日历的公开问题/中断

有什么问题吗

我应该向谷歌报告吗?如果是,具体如何?我所能找到的只是一个“谷歌云平台免费试用疑难解答”,在这里(除了建议使用stackoverflow;])我所能做的“特定问题和技术支持”就是“开始聊天”,这会导致一个谷歌内部网站(moma)。还有什么我可以试试的吗

任何帮助都将不胜感激

更新: 官方文件中有间接的痕迹/暗示,谷歌已经改变了(自动)接受共享日历的行为-比较“共享现有日历”部分的当前版本和2019年8月版本:

更新2 感谢@DaImTo(需要谷歌账户),我已经成功地向谷歌报告了这个问题:

要点如下:

  • “由于最近的行为变化,任何帐户都必须明确地“接受”与他们共享的日历。”
  • 状态:无法修复(预期行为)
返回用户日历列表上的日历

这不一定是用户可以访问的所有日历。google calendar web应用程序的左下角将显示用户日历列表

当用户被授予访问新日历的权限时,他们会通过电子邮件接受访问权限。当他们这样做时,日历通常会添加到他们的calendarlist.list中。这种情况不会发生在服务帐户上,因为它无法检查电子邮件并接受只有其访问权限的邀请

如果要将日历添加到服务帐户日历列表中,则需要通过服务帐户插入日历。使用

我不知道你为什么认为这在过去是有效的,因为这个原因,我已经使用这个api很多年了,从来没有在服务帐户中使用日历列表

  • 用户将其日历与服务帐户2的电子邮件共享。执行CalendarList/List时,我们希望返回所有日历,包括步骤1中共享的日历。情况是,API调用只返回“早期共享”日历,而不是我们现在共享的日历。我希望我澄清了这些问题——如果没有,请提出具体问题,谢谢 没有方法可以返回用户有权访问的所有日历。TBH的反应将是巨大的考虑所有的公共日历在野外他们也将被退回。 使用服务帐户的提示。 服务帐户并不是为了让您向用户授予访问其日历的权限。服务帐户是为了让开发人员拥有一个静态日历,您可以在应用程序中使用该日历并将数据保存到该日历中

    如果您正在访问用户日历,那么您应该使用Oauth2并保存刷新令牌(如果您需要在用户脱机时访问他们的数据)

    报告问题 最近关于服务账户和谷歌日历有很多变化。我自己在过去几个月里也报告了一些问题。我建议你将其作为一个问题提交。将其链接到此处,我将查看是否可以找到该团队中的联系人,以便就这个问题进行ping。

    最近有一个变化 与用户/服务帐户共享日历后,此用户/服务帐户必须通过将共享日历添加到其日历列表中来“接受”共享


    这可以通过单击“添加此日历”从UI完成(对于用户而言),也可以通过该方法以编程方式完成(适用于用户和服务帐户)。

    还有一个解决方案

    1) 将日历添加到您的Google帐户

    2) 使用服务帐户电子邮件Id共享日历

    3) 在新创建的日历中转到设置和共享,找到日历Id

    4) 请点击此链接-

    这是用于在服务帐户中添加现有日历的示例PHP代码

    $calendarListEntry = new Google_Service_Calendar_CalendarListEntry();
    $calendarListEntry->setId("calendarId");
    
    $createdCalendarListEntry = $service->calendarList->insert($calendarListEntry);
    
    echo $createdCalendarListEntry->getSummary();
    

    5) 现在调用Calendar List API,您将在服务帐户日历列表中找到添加的日历id

    请证明此声明“正如我们最近发现的,新共享的日历不再通过API调用返回。过去共享的日历仍然会返回”请准确解释你的问题是什么,因为它是目前写的很难理解你的问题。好吧,我试着更清楚地表达。复制步骤:1。用户将其日历与服务帐户2的电子邮件共享。执行CalendarList/List时,我们希望返回所有日历,包括步骤1中共享的日历。情况是,API调用只返回“早期共享”日历,而不是我们现在共享的日历。我希望我澄清了这些问题——如果没有,请提出具体问题,谢谢!嗯,你