공유 드라이브 지원 구현

이 문서에서는 Google Drive API를 사용하여 앱에서 공유 드라이브 지원을 구현하는 방법을 설명합니다.

공유 드라이브는 내 드라이브와 다른 조직, 공유, 소유권 모델을 따릅니다. 앱에서 공유 드라이브의 파일을 만들고 관리하려면 앱에서 공유 드라이브 지원을 구현해야 합니다. 구현의 복잡성은 앱의 기능에 따라 다릅니다.

시작하려면 앱이 다음 작업을 실행할 때 요청에 supportsAllDrives=true 쿼리 매개변수를 포함해야 합니다.

Drive API v3

  • files.get
  • files.list
  • files.create
  • files.update
  • files.copy
  • files.delete
  • changes.list
  • changes.getStartPageToken
  • permissions.list
  • permissions.get
  • permissions.create
  • permissions.update
  • permissions.delete

Drive API v2

  • files.get
  • files.list
  • files.insert
  • files.update
  • files.patch
  • files.copy
  • files.trash
  • files.untrash
  • files.delete
  • files.touch
  • children.insert
  • parents.insert
  • changes.list
  • changes.getStartPageToken
  • changes.get
  • permissions.list
  • permissions.get
  • permissions.insert
  • permissions.update
  • permissions.patch
  • permissions.delete

supportsAllDrives=true 매개변수는 앱이 공유 드라이브의 파일을 처리하도록 설계되었음을 Google Drive에 알립니다.

권한을 읽거나 수정하고, 변경사항을 추적하거나, 여러 말뭉치를 검색하는 앱에는 추가 공유 드라이브 기능이 필요합니다. 이 문서의 나머지 부분에서는 이러한 작업을 실행하는 데 필요한 추가 변경사항을 중점적으로 설명합니다.

공유 드라이브에서 콘텐츠 검색

list 메서드를 files 리소스에 사용하여 공유 드라이브에서 사용자 파일을 찾습니다. 공유 드라이브를 검색하려면 공유 드라이브 검색을 참고하세요.

list 메서드에는 다음과 같은 공유 드라이브 관련 쿼리 매개변수가 포함되어 있습니다.

  • driveId: 검색할 공유 드라이브의 ID입니다.

  • corpora: 쿼리가 적용되는 항목 (파일 또는 문서)의 본문입니다. 지원되는 본문은 user, domain, drive, allDrives입니다. 효율성을 위해 allDrives 대신 user 또는 drive를 사용하는 것이 좋습니다. 기본적으로 말뭉치는 user로 설정됩니다.

  • includeItemsFromAllDrives: 내 드라이브 항목과 공유 드라이브 항목을 모두 결과에 포함할지 여부입니다. 없거나 false로 설정된 경우 공유 드라이브 항목이 반환되지 않습니다.

  • supportsAllDrives: 요청 애플리케이션이 내 드라이브와 공유 드라이브를 모두 지원하는지 여부입니다. false인 경우 공유 드라이브 항목이 응답에 포함되지 않습니다.

다음 쿼리 모드는 공유 드라이브에만 해당됩니다.

includeItemsFromAllDrives corpora 쿼리 설명
true user 공유 드라이브 파일과 내 드라이브 파일을 모두 포함하여 사용자가 액세스한 파일을 쿼리합니다.
true domain 공유 드라이브 파일과 내 드라이브 파일을 모두 포함하여 도메인에 공유된 파일을 쿼리합니다.
true drive 지정된 공유 드라이브의 모든 항목을 쿼리합니다. 요청에 driveId를 지정해야 합니다.
true allDrives 사용자가 액세스한 파일과 사용자가 멤버인 모든 공유 드라이브를 쿼리합니다. 응답에 incompleteSearch:true가 포함될 수 있습니다. 이는 이 요청에 대해 일부 말뭉치가 검색되지 않았음을 나타냅니다.

다음 코드 샘플은 모든 공유 드라이브와 내 드라이브에서 파일을 검색하는 방법을 보여줍니다.

Python

files = []
page_token = None
while True:
    response = drive_service.files().list(
        q="mimeType='application/vnd.google-apps.folder'",
        spaces='drive',
        corpora='allDrives',
        supportsAllDrives=True,
        includeItemsFromAllDrives=True,
        fields='nextPageToken, files(id, name)',
        pageToken=page_token
    ).execute()
    files.extend(response.get('files', []))
    page_token = response.get('nextPageToken', None)
    if not page_token:
        break

Node.js

let files = [];
let pageToken = null;
do {
  const response = await drive_service.files.list({
    q: "mimeType='application/vnd.google-apps.folder'",
    spaces: 'drive',
    corpora: 'allDrives',
    supportsAllDrives: true,
    includeItemsFromAllDrives: true,
    fields: 'nextPageToken, files(id, name)',
    pageToken: pageToken
  });
  files = files.concat(response.data.files);
  pageToken = response.data.nextPageToken;
} while (pageToken);

자바

List<File> files = new ArrayList<>();
String pageToken = null;
do {
  FileList result = driveService.files().list()
      .setQ("mimeType='application/vnd.google-apps.folder'")
      .setSpaces("drive")
      .setCorpora("allDrives")
      .setSupportsAllDrives(true)
      .setIncludeItemsFromAllDrives(true)
      .setFields("nextPageToken, files(id, name)")
      .setPageToken(pageToken)
      .execute();
  files.addAll(result.getFiles());
  pageToken = result.getNextPageToken();
} while (pageToken != null);

curl

curl -X GET \
  'https://www.googleapis.com/drive/v3/files?corpora=allDrives&includeItemsFromAllDrives=true&supportsAllDrives=true&fields=nextPageToken%2Cfiles(id%2Cname)' \
  -H 'Authorization: Bearer ACCESS_TOKEN' \
  -H 'Accept: application/json'

ACCESS_TOKEN을 앱의 OAuth 2.0 토큰으로 바꿉니다.

공유 드라이브의 변경사항 추적

list 리소스의 changes 메서드를 사용하여 공유 드라이브의 변경사항을 추적합니다. 자세한 내용은 사용자 및 공유 드라이브의 변경사항 추적을 참고하세요.

list 메서드에는 다음과 같은 공유 드라이브 관련 쿼리 매개변수가 포함되어 있습니다.

  • driveId: 변경사항이 반환되는 공유 드라이브입니다. 지정된 경우 변경 ID는 파일의 현재 상태를 제공하는 공유 드라이브 내 항목의 변경사항을 나타냅니다. 특정 공유 드라이브 변경사항을 참조하려면 공유 드라이브 ID와 변경 ID를 모두 식별자로 사용해야 합니다.

  • includeItemsFromAllDrives: 공유 드라이브 파일 또는 변경사항을 변경사항 목록에 포함할지 여부입니다.

  • supportsAllDrives: 요청 애플리케이션이 공유 드라이브를 지원하는지 여부입니다. false인 경우 공유 드라이브와 공유 드라이브 내 파일을 모두 포함한 공유 드라이브 항목이 반환되지 않습니다.

다음 쿼리 모드는 공유 드라이브에만 해당됩니다.

includeItemsFromAllDrives driveId 쿼리 설명
true 아니요 변경사항은 사용자가 액세스한 공유 드라이브 내부 또는 외부의 파일 변경사항과 사용자가 멤버인 공유 드라이브의 변경사항을 반영합니다.
true 변경사항은 지정된 특정 공유 드라이브와 해당 공유 드라이브 내 항목의 변경사항을 반영합니다.

다음 코드 샘플은 공유 드라이브의 변경사항을 추적하는 방법을 보여줍니다.

Python

# 1. Get the start page token for the shared drive.
response = drive_service.changes().getStartPageToken(
    supportsAllDrives=True,
    driveId='SHARED_DRIVE_ID'
).execute()
start_page_token = response.get('startPageToken')

# 2. List changes starting from the page token.
response = drive_service.changes().list(
    pageToken=start_page_token,
    supportsAllDrives=True,
    includeItemsFromAllDrives=True,
    driveId='SHARED_DRIVE_ID'
).execute()
changes = response.get('changes', [])

Node.js

// 1. Get the start page token for the shared drive.
const tokenResponse = await drive_service.changes.getStartPageToken({
  supportsAllDrives: true,
  driveId: 'SHARED_DRIVE_ID'
});
const startPageToken = tokenResponse.data.startPageToken;

// 2. List changes starting from the page token.
const response = await drive_service.changes.list({
  pageToken: startPageToken,
  supportsAllDrives: true,
  includeItemsFromAllDrives: true,
  driveId: 'SHARED_DRIVE_ID'
});
const changes = response.data.changes;

자바

// 1. Get the start page token for the shared drive.
StartPageToken tokenResult = driveService.changes().getStartPageToken()
    .setSupportsAllDrives(true)
    .setDriveId("SHARED_DRIVE_ID")
    .execute();
String startPageToken = tokenResult.getStartPageToken();

// 2. List changes starting from the page token.
ChangeList changesResult = driveService.changes().list(startPageToken)
    .setSupportsAllDrives(true)
    .setIncludeItemsFromAllDrives(true)
    .setDriveId("SHARED_DRIVE_ID")
    .execute();
List<Change> changes = changesResult.getChanges();

curl

# 1. Get the start page token for the shared drive.
curl -X GET \
  'https://www.googleapis.com/drive/v3/changes/startPageToken?supportsAllDrives=true&driveId=SHARED_DRIVE_ID' \
  -H 'Authorization: Bearer ACCESS_TOKEN' \
  -H 'Accept: application/json'

# 2. List changes starting from the page token.
curl -X GET \
  'https://www.googleapis.com/drive/v3/changes?pageToken=START_PAGE_TOKEN&supportsAllDrives=true&includeItemsFromAllDrives=true&driveId=SHARED_DRIVE_ID' \
  -H 'Authorization: Bearer ACCESS_TOKEN' \
  -H 'Accept: application/json'

다음을 바꿉니다.

  • SHARED_DRIVE_ID: 공유 드라이브의 ID입니다.
  • ACCESS_TOKEN: 앱의 OAuth 2.0 토큰입니다.
  • START_PAGE_TOKEN: 공유 드라이브의 시작 페이지 토큰입니다.

SHARED_DRIVE_ID를 공유 드라이브의 ID로 바꿉니다.

Drive UI에서 공유 드라이브 지원 사용 설정

Drive UI를 사용하여 공유 드라이브 콘텐츠에 액세스하려면 Google Cloud 콘솔의 Google Drive API에 있는 Drive UI 통합 탭에서 공유 드라이브 지원 체크박스를 선택했는지 확인하세요. 자세한 내용은 Drive UI 통합 구성을 참고하세요.

공유 드라이브에서 Google Picker 사용

Google Picker는 공유 드라이브에서 항목 선택을 지원합니다. 공유 드라이브 지원을 사용 설정하고 선택 도구에 공유 드라이브 뷰를 추가하는 방법에 관한 자세한 내용은 Google Picker API를 참고하세요.