세션 만들기 및 관리

세션은 Picker API의 핵심으로, 사용자가 Google 포토 라이브러리에서 사진과 동영상을 안전하고 제어된 방식으로 선택할 수 있도록 지원합니다. 이 가이드에서는 앱에서 원활한 사진 선택을 지원하기 위해 세션을 만들고 관리하며 효과적으로 폴링하는 방법을 설명합니다.

시작하기 전에

  • 앱 구성: API를 사용 설정하고 인증을 설정합니다. 자세한 단계는 앱 구성을 참고하세요.
  • 흐름 이해: Picker API 시작하기에서 전체 사진 선택 프로세스를 간략하게 살펴봅니다.
  • 필요한 승인 범위 검토: 세션으로 작업하려면 photospicker.mediaitems.readonly 범위가 필요합니다. 범위에 관한 자세한 내용은 승인 범위를 참고하세요.

세션 수명 주기

Picker API는 세션을 만들고, 세션에 관한 정보를 검색하고, 세션을 삭제하는 메서드를 제공합니다. 사용자를 인증한 후 세션을 사용하여 사진 선택 수명 주기를 관리할 수 있습니다.

  1. 사용자가 미디어 항목을 선택할 수 있도록 세션을 만듭니다.
  2. 세션을 폴링하여 사용자가 미디어 항목 선택을 완료한 시점을 확인합니다.
  3. 미디어 항목을 나열하고 가져옵니다.
  4. 세션을 삭제하여 정리합니다.

세션 만들기

사용자가 Google 포토 앱에서 직접 사진을 안전하게 선택하고 애플리케이션에 다시 공유할 수 있도록 세션을 만듭니다.

sessions.create는 새 세션을 생성하고 사용자에게 표시할 수 있는 고유한 pickerUri를 반환합니다. 세션은 사용자가 미디어 항목을 선택하거나 세션이 타임아웃될 때까지 활성 상태로 유지됩니다. 웹 기반 애플리케이션의 경우 /autoclosepickerUri에 추가하여 사용자가 선택을 완료한 후 Google 포토 창이나 탭을 자동으로 닫을 수 있습니다. 자세한 내용은 사진 선택: 사용자에게 표시되는 항목을 참고하세요.

세션 제한

세션 제한에 유의하세요. Picker API는 책임감 있는 사용을 보장하고 악용을 방지하기 위해 만들 수 있는 세션 수에 한도를 적용합니다. 일반적인 상황에서는 이러한 한도에 도달할 가능성이 낮습니다. 하지만 문제를 방지하려면 세션을 추적하고 사전에 정리해야 합니다.

세션 폴링 및 모니터링

세션이 생성되면 sessions.get 엔드포인트를 주기적으로 폴링하여 세션의 상태를 가져옵니다. 사용자가 선택을 완료하면 응답의 mediaItemsSet 속성이 true를 반환합니다.

효율적인 폴링을 사용해야 합니다. sessions.get 응답에는 pollingConfig 객체가 포함됩니다. 다음 필드를 사용하여 불필요한 호출을 방지하고 원활한 사용자 환경을 만드세요.

  • pollInterval: 최적의 폴링 간격
  • timeoutIn: 제한 시간

자세한 내용은 예시 폴링 흐름을 참고하세요.

세션 삭제 및 정리

sessions.delete는 세션을 삭제합니다. 일반적으로 사용자가 미디어 선택을 완료한 후 또는 세션이 만료된 경우 정리하는 데 사용됩니다.

사용자가 미디어 항목을 선택하고 앱이 미디어 항목 바이트를 가져온 후 세션을 삭제하는 것이 좋습니다.

폴링 흐름 예시

세션을 만들고 폴링하는 예입니다. 사용자를 처음 인증한 후 새 세션을 만듭니다.

  1. 세션 생성: sessions.create를 호출하여 새 세션을 시작하고 pickerUri를 획득합니다.
  2. 사용자에게 pickerUri 제공: URL을 표시하거나 사용자가 스캔할 수 있는 QR 코드를 생성합니다. 사용자의 선택 환경 개요를 읽습니다.
  3. 세션 폴링:
    1. pollingConfig에서 권장하는 pollInterval을 사용합니다.
    2. mediaItemsSet가 참인지 확인합니다.
      1. true인 경우 선택한 미디어 항목을 나열합니다.
      2. false인 경우 timeoutIn에 도달할 때까지 폴링을 계속합니다.
    3. 제한 시간 및 취소를 원활하게 처리합니다.
GET https://photoslibrary.googleapis.com/v1/sessions/{sessionId}

응답 예시는 다음과 같습니다.

{
  "id": string,
  "pickerUri": string,
  "pollingConfig": {
    object (PollingConfig)
  },
  "mediaItemsSet": boolean
}

사용자에게 pickerUri를 표시한 다음 세션 폴링을 시작합니다.

대답에서 다음 사항을 확인합니다.

  • mediaItemsSet: 사용자가 미디어 항목 선택을 완료한 경우 true
  • pollingConfig.pollInterval: 다음 폴링 전에 대기해야 하는 권장 시간
  • pollingConfig.timeoutIn: 타임아웃되기 전에 대기할 총 시간

mediaItemsSet가 false이고 timeoutIn에 도달하지 않은 경우 pollInterval를 기다린 후 다시 폴링합니다.

mediaItemsSet이 true이면 선택한 미디어 항목을 나열합니다.

timeoutIn에 도달하면 타임아웃을 적절히 처리합니다.