API Календаря Google не возвращает общие календари - PullRequest
1 голос
/ 03 февраля 2020

Исходная ситуация:

  • В одной из наших служб мы используем служебную учетную запись для вызова API Календаря Google.
  • Пользователь может поделиться своими календарями с этой технической учетной записью через свою техническую адрес электронной почты (@ .iam.gserviceaccount.com).
  • Поскольку календари используются совместно, мы можем запросить их через API (CalendarList / List: https://developers.google.com/calendar/v3/reference/calendarList/list)
  • Все это работало нормально в течение нескольких лет без проблем.

Текущая проблема:

  • Как мы недавно обнаружили, новые общие календари больше не возвращаются через вызов API. Календари, которыми обменивались в прошлом, все еще возвращаются (!)
  • Мы знаем о PageTokens и обрабатываем их - это не может быть проблемой. В случае одной (тестовой) учетной записи в настоящее время используется только 8 календарей, и мы не можем получить больше.
  • Нет ошибок / предупреждений при вызове на стороне сервера
  • Нет ошибок / предупреждений / quota проблема в консоли разработчика Google

Мы не получили никаких предупреждений / предупреждений от Google об изменениях API Календаря или ограничениях наших аккаунтов. Также я не обнаружил общеизвестных проблем / отключений в Календаре Google.

В чем может быть проблема?

Должен ли я сообщить об этом в Google? Если да, то как именно? Все, что я мог найти, это «Устранение неполадок пробной версии Google Cloud Platform», где (кроме предложения использовать stackoverflow;]) все, что я могу сделать с «конкретным c вопросом и технической поддержкой», это «запустить чат» , что приводит к внутреннему сайту Google (moma). Есть ли что-нибудь еще, что я мог бы попробовать?

Любая помощь будет высоко ценится!

ОБНОВЛЕНИЕ: Там как косвенный след / подсказка в официальных документах, что Google изменил это поведение (автоматически) принятия общих календарей - сравните текущую версию раздела «Поделиться существующим календарем» и августовскую версию 2019 года:

ОБНОВЛЕНИЕ 2 Мне удалось сообщить об этой проблеме в Google спасибо @DaImTo (требуется учетная запись Google): https://issuetracker.google.com/issues/148804709

Дело в следующем:

  • "Из-за недавнего изменения поведения, любой учетная запись должна явно "принять" календарь, который был им предоставлен. "
  • Статус: не исправляется (намеренное поведение)

Ответы [ 3 ]

4 голосов
/ 03 февраля 2020

Произошло недавнее изменение

После того, как вы поделились календарем с учетной записью пользователя / службы, эта учетная запись пользователя / службы должна «принять» общий доступ, добавив общий календарь в свой список календарей.

Это можно сделать (в случае пользователя) из пользовательского интерфейса, нажав «Добавить этот календарь», или программно (работает как для пользователей, так и для учетных записей служб) с помощью метода CalendarList: insert .

1 голос
/ 03 февраля 2020

CalendarList.List Возвращает календари в списке календарей пользователя.

Это не обязательно все календари, к которым у пользователя есть доступ. Список пользователей в календаре отображается в левой нижней части веб-приложения Google Calendar

enter image description here

Когда пользователю предоставляется доступ к новому календарю, который он принимает доступ по электронной почте. Когда они это делают, календарь обычно добавляется в их calendarlist.list. Этого не происходит с учетной записью службы, поскольку у нее нет возможности проверить электронную почту и принять приглашение, к которому у него есть доступ.

Если вы хотите, чтобы календари были добавлены в список календарей учетных записей служб, вам потребуется вставить их через сервисную учетную запись. использование calendarlist.insert

Я не уверен, почему вы думаете, что это работало в прошлом, я использовал этот API в течение многих лет и никогда не беспокоился об использовании calenadarlist с учетными записями служб по этой самой причине.

  1. Пользователь делится своим календарем с электронной почтой учетной записи службы 2. При выполнении CalendarList / List мы ожидаем вернуть все календари, включая тот, который был опубликован на шаге 1 Ситуация такова, что вызов API возвращает только «ранее открытые» календари, но не тот, которым мы делимся сейчас. Надеюсь, я уточнил все - если нет, пожалуйста, задайте конкретные c вопросы, спасибо!

Не существует метода, который возвращал бы все календари, к которым у пользователя есть доступ. TBH ответ будет огромным, учитывая, что все публичные c календари там, в дикой природе, они также будут возвращены.

Совет по использованию учетных записей sercice.

учетные записи служб не предназначены для того, чтобы вы выдавали пользователям разрешение на предоставление им доступа к своим календарям. Сервисные учетные записи предназначены для вас, чтобы разработчик имел календарь stati c, который вы можете использовать в своем приложении, и сохранять в нем данные.

Если вы обращаетесь к календарю пользователей, вам следует использовать Oauth2 и сохранить маркер refre sh, если вам нужен доступ к их данным, когда они не подключены к сети.

Сообщить о проблеме

В последнее время было много изменений в учетных записях служб и календаре Google. Я сам сообщал о проблемах с серверами в течение последних нескольких месяцев выпуск форума Я предлагаю вам представить это как проблему. Ссылка здесь, и я посмотрю, смогу ли я найти свой контакт в этой команде, чтобы пинговать о проблеме.

0 голосов
/ 17 марта 2020

Еще одним решением этой проблемы является

1) Добавить календарь в свою учетную запись Google

2) Поделиться календарем с учетной записью службы Id электронной почты

3) Go, чтобы Настройки и Общий доступ во вновь созданном календаре и найдите Calendar Id

4) Перейдите по этой ссылке - https://developers.google.com/calendar/v3/reference/calendarList/insert

Это пример PHP Код для добавления существующего календаря в учетную запись службы

$calendarListEntry = new Google_Service_Calendar_CalendarListEntry();
$calendarListEntry->setId("calendarId");

$createdCalendarListEntry = $service->calendarList->insert($calendarListEntry);

echo $createdCalendarListEntry->getSummary();

5) Теперь вызовите API Списка календаря, и вы найдете добавленный идентификатор календаря в Списке календаря учетной записи службы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...