2017-10-16 129 views
1

我正在使用帶有服務帳戶的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項目關聯的項目。 –

回答

4

這聽起來像你的應用程序都需要自己的日曆 - 所以創建一個(見Calendars.insert如何做到這一點編程)。

無論您是需要日曆爲整個應用程序,無論用戶(在這種情況下,你可能想使用的服務帳戶身份驗證,然後創建一個與服務帳戶關聯的單個日曆)或一個額外的日曆每個用戶(在這種情況下,您將使用用戶身份驗證並在其帳戶中創建另一個日曆)取決於您的應用程序需求。

值得注意的是,如果您在用戶的帳戶中創建日曆,幾乎可以肯定可以通過網絡用戶界面訪問它。同樣,這是否有問題取決於應用程序。