Аутентификация с помощью Google Calendar API с использованием учетной записи сервера и .NET

Я использую Google Calendar API V3 с OAuth2 и .NET. моя аутентификация осуществляется по учетной записи службы, так как мне нужно запускать ее как службу без пользовательского интерфейса. Мне удалось, после долгих усилий, пройти аутентификацию с учетными данными, но по какой-то причине я не могу создать событие в своем календаре (и да, я поделился им с собой...).

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

я ищу некоторую помощь. Спасибо

    String serviceAccountEmail = "[email protected]";

            var certificate = new X509Certificate2(@"key.p12", "notasecret", X509KeyStorageFlags.MachineKeySet |X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
            ServiceAccountCredential credential = new ServiceAccountCredential(
               new ServiceAccountCredential.Initializer(serviceAccountEmail)
               {
                   Scopes = new[] { CalendarService.Scope.Calendar }
               }.FromCertificate(certificate));

            // Create the service.
            var service = new CalendarService(new BaseClientService.Initializer()
            {                    
                HttpClientInitializer = credential,
                ApplicationName = "Calendar API Sample",
            });

            Event e = new Event()
            {
                Summary = "Appointment1",
                Location = "42.138679, -88.045519",
                Start = new EventDateTime()
                {
                    DateTime = DateTime.Now,
                    TimeZone = "Asia/Jerusalem"
                },
                End = new EventDateTime()
                {
                    DateTime = DateTime.Now.AddDays(1),
                    TimeZone = "Asia/Jerusalem"
                },
            };

            Event createdEvent = service.Events.Insert(e, "primary").Execute();                

person eyalewin    schedule 12.05.2014    source источник
comment
Я также боролся с библиотекой Google .NET. API кажется хорошим, но у него есть несколько проблем: 1) кажется, что каждый выпуск полностью ломает последнюю версию и 2) нет хороших примеров приложений, просто фрагменты кода, которые разработчикам нужно собрать вместе.   -  person Craig    schedule 13.05.2014
comment
1. Были сломанные изменения, пока библиотека была БЕТА. Но теперь, когда мы достигли GA, не будет никаких несовместимых изменений. 2. В нашем репозитории есть несколько примеров: code.google.com/p/google-api-dotnet-client/source/. Помните, что это проект с открытым исходным кодом, поэтому будет здорово, если вы поделитесь образцом в будущем.   -  person peleyal    schedule 13.05.2014
comment
Не так много критических изменений с бета-версии, но много критических изменений с версии 1.2.   -  person Craig    schedule 15.05.2014


Ответы (2)


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

var list = service.CalendarList.List().Execute().Items;
service.Events.Insert(e, list[0].Id).Execute();

Это мое решение этой проблемы, я также согласен с Крейгом в том, что API плохо организован. (говорю это после работы с потрясающим API карт).

person eyalewin    schedule 14.05.2014

Возможно, попробуйте указать пользователя программно, а не делиться календарем с электронной почтой вашей служебной учетной записи? В моем приложении работало следующее:

ServiceAccountCredential credential = new ServiceAccountCredential(
    new ServiceAccountCredential.Initializer(serviceAccountEmail)
    {
        User = "[email protected]",
        Scopes = new[] { CalendarService.Scope.Calendar }
    }.FromCertificate(certificate));

// ... Define the event    

service.Events.Insert(e, "primary").Execute();
person tessafyi    schedule 11.07.2016