Implementar suporte a drives compartilhados

Este documento descreve como implementar o suporte a drives compartilhados no app usando a API Google Drive.

Os drives compartilhados seguem modelos diferentes de organização, compartilhamento e propriedade do Meu Drive. Se o app criar e gerenciar arquivos em drives compartilhados, você precisará implementar o suporte a drives compartilhados nele. A complexidade da implementação depende da funcionalidade do app.

Para começar, inclua o parâmetro de consulta supportsAllDrives=true nas solicitações quando o app realizar as seguintes operações:

API Drive 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

API Drive 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

O parâmetro supportsAllDrives=true informa ao Google Drive que o app foi projetado para processar arquivos em drives compartilhados.

Os apps que leem ou modificam permissões, rastreiam mudanças ou pesquisam em vários corpora exigem recursos adicionais de drives compartilhados. O restante deste documento destaca outras mudanças necessárias para realizar essas tarefas.

Pesquisar conteúdo em um drive compartilhado

Use o list método no files recurso para encontrar arquivos de usuários em drives compartilhados. Para pesquisar um drive compartilhado, consulte Pesquisar drives compartilhados.

O método list contém os seguintes parâmetros de consulta específicos do drive compartilhado:

  • driveId: ID do drive compartilhado a ser pesquisado.

  • corpora: corpos de itens (arquivos ou documentos) a que a consulta se aplica. Os corpos aceitos são user, domain, drive e allDrives. Prefira user ou drive a allDrives para eficiência. Por padrão, os corpora são definidos como user.

  • includeItemsFromAllDrives: indica se os itens do Meu Drive e do drive compartilhado precisam ser incluídos nos resultados. Se não estiver presente ou definido como falso, os itens do drive compartilhado não serão retornados.

  • supportsAllDrives: indica se o aplicativo solicitante oferece suporte ao Meu Drive e ao drive compartilhado. Se for falso, os itens do drive compartilhado não serão incluídos na resposta.

Os seguintes modos de consulta são específicos para drives compartilhados:

includeItemsFromAllDrives corpora Descrição da consulta
true user Consulta arquivos que o usuário acessou, incluindo arquivos do drive compartilhado e do Meu Drive.
true domain Consulta arquivos compartilhados com o domínio, incluindo arquivos do drive compartilhado e do Meu Drive.
true drive Consulta todos os itens no drive compartilhado especificado. O driveId precisa ser especificado na solicitação.
true allDrives Consulta arquivos que o usuário acessou e todos os drives compartilhados em que ele é membro. Observação: a resposta pode incluir incompleteSearch:true, indicando que alguns corpora não foram pesquisados para esta solicitação.

Os exemplos de código a seguir mostram como pesquisar arquivos em todos os drives compartilhados e no Meu Drive:

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);

Java

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'

Substitua ACCESS_TOKEN pelo token OAuth 2.0 do seu app.

Acompanhar mudanças em um drive compartilhado

Use o list método no changes recurso para acompanhar as mudanças em um drive compartilhado. Para mais informações, consulte Acompanhar mudanças para usuários e drives compartilhados.

O método list contém os seguintes parâmetros de consulta específicos do drive compartilhado:

  • driveId: o drive compartilhado de que as mudanças são retornadas. Se especificado, os IDs de mudança se referem a mudanças nos itens dentro do drive compartilhado que fornece o estado atual de um arquivo. Para se referir a uma mudança específica do drive compartilhado, o ID do drive compartilhado e o ID da mudança precisam ser usados como identificadores.

  • includeItemsFromAllDrives: indica se os arquivos ou mudanças do drive compartilhado precisam ser incluídos na lista de mudanças.

  • supportsAllDrives: indica se o aplicativo solicitante oferece suporte a drives compartilhados. Se for falso, os itens do drive compartilhado, incluindo drives compartilhados e arquivos dentro de um drive compartilhado, não serão retornados.

Os seguintes modos de consulta são específicos para drives compartilhados:

includeItemsFromAllDrives driveId Descrição da consulta
true Não As mudanças refletem as mudanças nos arquivos dentro ou fora dos drives compartilhados que o usuário acessou, bem como as mudanças nos drives compartilhados em que o usuário é membro.
true Sim As mudanças refletem as mudanças no drive compartilhado especificado e nos itens dentro desse drive compartilhado.

Os exemplos de código a seguir mostram como acompanhar as mudanças em um drive compartilhado:

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;

Java

// 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'

Substitua:

  • SHARED_DRIVE_ID: o ID do drive compartilhado.
  • ACCESS_TOKEN: o token OAuth 2.0 do seu app.
  • START_PAGE_TOKEN: o token da página inicial do drive compartilhado.

Substitua SHARED_DRIVE_ID pelo ID do drive compartilhado.

Ativar o suporte a drives compartilhados na interface do Drive

Para acessar o conteúdo do drive compartilhado usando a interface do Drive, certifique-se de que você marcou a caixa Suporte a drives compartilhados na guia Integração da interface do Drive da API Google Drive no console do Google Cloud. Para mais informações, consulte Configurar uma integração da interface do Drive.

Usar o Google Picker com drives compartilhados

O Google Picker oferece suporte à seleção de itens em drives compartilhados. Para mais detalhes sobre como ativar o suporte a drives compartilhados e adicionar visualizações de drives compartilhados no Picker, consulte a API Google Picker.