避免Google日历API在人物日历中添加实际事件?

问题描述:

我正在使用带有服务帐户的Google Calendar API。想法是我们想纯粹将它用作API后端,所以我们不必自己编写代码。这意味着我们做而不是希望它干涉(或至少使其可选!)与人民真正的日历。避免Google日历API在人物日历中添加实际事件?

如果我做出这样的POST:

 var resultingex = service.Calendars.Insert(new Calendar() 
     { 
      Summary = "Nice new calendar", 

     }).Execute(); 

     var eventIsNice = service.Events.Import(new Event() 
     { 
      Summary = "I'm a nice event", 
      Location = "Copenhagen, Denmark", 
      Start = new EventDateTime() { DateTime = DateTime.Now.AddMinutes(15) }, 
      End = new EventDateTime() { DateTime = DateTime.Now.AddMinutes(45) }, 
      Attendees = new List<EventAttendee>() { new EventAttendee() { Email = "[email protected]" } }, 


     }, resultingex.Id).Execute(); 

将添加到我的谷歌日历。这意味着我不能纯粹用它作为后端,因为它会调用我的真实日历。

所以我的问题是:如何添加只存在于我的应用程序上下文中的事件?

这就是我如何与服务进行身份验证:

  var credPath = "client_secret.json"; 

      var json = File.ReadAllText(credPath); 
      var cr = JsonConvert.DeserializeObject<PersonalServiceAccountCred>(json); // "personal" service account credential 

      // Create an explicit ServiceAccountCredential credential 
      var xCred = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(cr.client_email) 
      { 
       Scopes = new[] { 
        CalendarService.Scope.Calendar, 
        CalendarService.Scope.CalendarReadonly, 
     } 
      }.FromPrivateKey(cr.private_key)); 

      var service = new CalendarService(new BaseClientService.Initializer() 
      { 
       HttpClientInitializer = xCred, 
       ApplicationName = ApplicationName, 
      }); 
+0

这听起来像你应该创建一个单独的日历(不是一个用户,只是一个额外的日历)只是为你的应用程序。 –

+0

@JonSkeet你会推荐为我的系统中的每个用户(作为辅助日历)创建一个额外的日历,或者只是为我的主日历添加很多事件(对于我的所有用户)? –

+0

这真的取决于您的应用程序的需求。如果他们在逻辑上独立的日历,创建单独的日历。如果它们在逻辑上是一个(例如,所有用户都看到相同的一组事件),那么只需创建一个与您的GCP项目关联的项目。 –

这听起来像你的应用程序都需要自己的日历 - 所以创建一个(见Calendars.insert如何做到这一点编程)。

无论您是需要日历为整个应用程序,无论用户(在这种情况下,你可能想使用的服务帐户身份验证,然后创建一个与服务帐户关联的单个日历)或一个额外的日历每个用户(在这种情况下,您将使用用户身份验证并在其帐户中创建另一个日历)取决于您的应用程序需求。

值得注意的是,如果您在用户的帐户中创建日历,几乎可以肯定可以通过网络用户界面访问它。同样,这是否有问题取决于应用程序。