使用服务器帐户和.NET使用Google Calendar API进行身份验证

时间:2014-05-12 12:11:35

标签: google-calendar-api google-oauth google-api-dotnet-client

我正在使用Google Calendar API V3,OAuth2& 。净。 我的身份验证是通过服务帐户进行的,因为我需要将其作为服务运行,而无需用户界面。 经过很多努力来验证凭证后,我已经成功了,但出于某种原因,我不能在我的日历上创建一个事件(&是的,我与自己分享了它......)。

我发现了很多关于同样问题的问题,但是所有我都不知道或认为它会帮助我。

我寻求一些帮助。感谢

    String serviceAccountEmail = "XXX@developer.gserviceaccount.com";

            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();                

2 个答案:

答案 0 :(得分:0)

由于某种原因,Insert事件到“主”日历,没有完成这项工作。 相反,我编写了以下代码,它允许我编写事件。

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

这是我解决这个问题的方法,我同意Craig的观点,即API组织得不好。 (在使用令人惊叹的地图API之后说这个。)

答案 1 :(得分:0)

也许尝试以编程方式指定用户,而不是与您的服务帐户电子邮件共享日历?以下工作在我的申请中:

~/workspace ❯❯❯ ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin14]
~/workspace ❯❯❯ ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin14]
~/workspace ❯❯❯ rails new gitsee   
    Rails 5 requires Ruby 2.2.2 or newer.

    You're running
      ruby 2.0.0p481 (2014-05-08 revision 45883) [universal.x86_64-darwin14]

    Please upgrade to Ruby 2.2.2 or newer to continue.