Не удается прочитать записи пользователей из Календаря Google, зарегистрированного как учетная запись службы - PullRequest
0 голосов
/ 24 января 2019

Мое приложение работает на основе аутентификации учетной записи Servivce очень хорошо. Можно читать, удалять, вставлять записи в Календарь Google. Все записи видны на веб-сайте календаря и могут управлять ими из приложения, а также вручную на веб-сайте.

Но если я вручную добавлю новое событие в календарь на веб-сайте, это событие для приложения будет невидимым. Не могу управлять ими программно. Календарь, конечно, используется совместно с учетной записью службы Google - добавлен адрес электронной почты учетной записи службы в Календаре -> Настройки-> Общая: Изменить настройки.

Одно и то же приложение, использующее OAuth 2.0, хорошо работает как с записями, добавленными вручную, так и программно.

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

string [] scopes = новая строка [] { CalendarService.Scope.Calendar};

        var certificate = new X509Certificate2(@"My Project-xxxxxxxxx.p12", "notasecret", X509KeyStorageFlags.Exportable);

        ServiceAccountCredential credentials = new ServiceAccountCredential(
             new ServiceAccountCredential.Initializer("XXXX@XXX-XXXX.iam.gserviceaccount.com")
             {
                 Scopes = scopes                                          
             }.FromCertificate(certificate));

        var service = new CalendarService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credentials,
            ApplicationName = ApplicationName,
        });
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        // Define parameters of request.
        EventsResource.ListRequest request = service.Events.List("primary");
        request.TimeMin = DateTime.Now;
        request.ShowDeleted = false;
        request.SingleEvents = true;
        request.MaxResults = 10;
        request.OrderBy = EventsResource.ListRequest.OrderByEnum.StartTime;

        // List events.
        Events events = request.Execute();
        Console.WriteLine("Upcoming events:");
        if (events.Items != null && events.Items.Count > 0)
        {
            foreach (var eventItem in events.Items)
            {
                string when = eventItem.Start.DateTime.ToString();
                if (String.IsNullOrEmpty(when))
                {
                    when = eventItem.Start.Date;
                }
                //Console.WriteLine("{0} {1} {2} {3} ({4})", eventItem.Status, eventItem.Summary, eventItem.Location, eventItem.Description, when);
                Console.WriteLine(" Id: {0} Start: {1} End: {2} Status: {3} Summary: {4} Location: {5} description: {6} HtmlLink: {7}",
                    eventItem.Id + '\n',
                    eventItem.Start.DateTime.ToString() + '\n',
                    eventItem.End.DateTime.ToString() + '\n',
                    eventItem.Status + '\n',
                    eventItem.Summary + '\n',
                    eventItem.Location + '\n',
                    eventItem.Description + '\n',
                    eventItem.HtmlLink);
            }
        }
        else
        {
            Console.WriteLine("No upcoming events found.");
        }

Таким образом я проверяю список календаря:

 var calendars = service.CalendarList.List().Execute().Items;
            foreach (CalendarListEntry entry in calendars)
                Console.WriteLine(entry.Summary + " - " + entry.Id);

Есть только один.

Например, есть 5 событий на веб-сайте календаря, в тот же день, список приложений только 3, если они созданы из приложения, 2, созданные вручную непосредственно в сети, не перечислены.

1 Ответ

0 голосов
/ 24 января 2019

Я нашел решение.Вместо использования «основного» в качестве основного идентификатора календаря я использовал идентификатор календаря, указанный сервисом.Это решило мою проблему.

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