2

내 애플리케이션에서 Google 캘린더 API를 사용하고 있습니다. 몇 명의 사용자는 물론 내 계정의 클라이언트 ID와 클라이언트 암호도 생성했습니다. 응용 프로그램을 실행할 때 브라우저에 로그인하지 않은 경우 내 Gmail 계정에 로그인해야합니다. 일단 내 Gmail 계정에 로그인하면 성공적으로 내 캘린더에서 이벤트를 가져올 수/생성/업데이트/삭제할 수 있습니다..net google calendar api : 누구나 이벤트를 만들거나 업데이트/삭제할 수 있습니다.

현재 캘린더 ID가 Gmail 계정으로 로그인되어 있지만 다른 캘린더 ID의 일정을 가져올 수 있지만 다른 사용자의 캘린더 ID로 일정을 만들거나 업데이트/삭제할 수 없습니다.

내 요구 사항은 내 Gmail ID에 로그인되어 있으며 [email protected]이라고 말하면서 캘린더 ID [email protected]에 대한 일정을 가져올 수 있지만 일정에 대한 일정을 만들거나 업데이트하거나 삭제할 수는 없습니다 id [email protected]

인터넷에서 많은 연구를했지만 아무것도 찾지 못했습니다. 내 지식에 따라 권한 + 액세스 토큰을 요청에 전달해야합니다. 나는 이것을 시도했지만 작동하지 않았다.

이 요구 사항을 달성하기 위해 무엇을 제안하십시오.

calID = Convert.ToString(Session["CalenderId"]); 
     userSecret = Convert.ToString(Session["UserSecret"]); 

     if (!string.IsNullOrEmpty(calID) && !string.IsNullOrEmpty(userSecret)) 
     { 
      using (var stream = 
       new FileStream(userSecret, FileMode.Open, FileAccess.Read)) 
      { 
       string credPath = System.Environment.GetFolderPath(
        System.Environment.SpecialFolder.Personal); 
       credPath = Path.Combine(credPath, ".credentials/calendar-dotnet-quickstart.json/" + calID); 

       credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
        GoogleClientSecrets.Load(stream).Secrets, 
        Scopes, 
        "user", 
        CancellationToken.None, 
        new FileDataStore(credPath, true)).Result; 
       // Response.Write("Credential file saved to: " + credPath); 
      } 

      // Create Google Calendar API service. 
      var service = new CalendarService(new BaseClientService.Initializer() 
      { 
       HttpClientInitializer = credential, 
       ApplicationName = ApplicationName, 

      }); 

희망 사항을 잘 알고 계실 것입니다. 가장 빠른 응답을 기다리고 있습니다. 감사합니다.

답변

1

인증은 사용자베이스에 따라 다릅니다. GoogleWebAuthorizationBroker.AuthorizeAsync를 실행하고 [email protected]으로 로그인하는 '사용자'를 저장하면 [email protected]의 캘린더에 액세스 할 수 있습니다.

GoogleWebAuthorizationBroker.AuthorizeAsync를 사용하여 다시 로그인하고 [email protected]을 사용하여 'User2'를 저장하면 [email protected]의 캘린더에 액세스 할 수 있습니다.

[email protected]에서 [email protected]으로 캘린더를 공유하면 업데이트해야합니다.

테스트되지 않은 샘플 코드 : 답장을

AclRule body; 
body.Role = "writer"; 
body.Scope.Type = "user"; 
body.Scope.Value = "[email protected]"; 
service.Acl.Insert(body, calendarId).Execute(); 
+0

감사합니다. –

+0

캘린더 ID를 어떻게 공유해야하는지 알려 주시겠습니까? 아니면 작업 예제 링크를 줄 수 있습니까? –

+0

예를 들어 보지 않았지만 https://developers.google.com/google-apps/calendar/v3/reference/acl/insert # auth 참고 : scope는 캘린더를 공유하려는 사용자 이메일 주소입니다. – DaImTo