Мое приложение работает на основе аутентификации учетной записи 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, созданные вручную непосредственно в сети, не перечислены.