Implementare il supporto dei Drive condivisi

Questo documento descrive come implementare il supporto dei Drive condivisi nella tua app utilizzando l'API Google Drive.

I Drive condivisi seguono modelli di organizzazione, condivisione e proprietà diversi da Il mio Drive. Se la tua app deve creare e gestire file sui Drive condivisi, devi implementare il supporto dei Drive condivisi nella tua app. La complessità dell'implementazione dipende dalla funzionalità della tua app.

Per iniziare, devi includere il parametro di query supportsAllDrives=true nelle richieste quando la tua app esegue le seguenti operazioni:

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

Il parametro supportsAllDrives=true informa Google Drive che la tua app è progettata per gestire i file sui Drive condivisi.

Le app che leggono o modificano le autorizzazioni, tengono traccia delle modifiche o eseguono ricerche in più corpora richiedono funzionalità aggiuntive per i Drive condivisi. Il resto di questo documento evidenzia le modifiche aggiuntive necessarie per eseguire queste attività.

Cercare contenuti su un Drive condiviso

Utilizza il list metodo nella files risorsa per trovare i file utente nei Drive condivisi. Per cercare un Drive condiviso, vedi Cercare Drive condivisi.

Il metodo list contiene i seguenti parametri di query specifici per i Drive condivisi:

  • driveId: ID del Drive condiviso in cui eseguire la ricerca.

  • corpora: corpi di elementi (file o documenti) a cui si applica la query. I corpi supportati sono user, domain, drive e allDrives. Per una maggiore efficienza, preferisci user o drive a allDrives. Per impostazione predefinita, corpora è impostato su user.

  • includeItemsFromAllDrives: indica se gli elementi di Il mio Drive e dei Drive condivisi devono essere inclusi nei risultati. Se non è presente o è impostato su false, gli elementi dei Drive condivisi non vengono restituiti.

  • supportsAllDrives: indica se l'applicazione richiedente supporta sia Il mio Drive sia i Drive condivisi. Se è impostato su false, gli elementi dei Drive condivisi non vengono inclusi nella risposta.

Le seguenti modalità di query sono specifiche per i Drive condivisi:

includeItemsFromAllDrives corpora Descrizione query
true user Esegue query sui file a cui l'utente ha avuto accesso, inclusi i file dei Drive condivisi e di Il mio Drive.
true domain Esegue query sui file condivisi con il dominio, inclusi i file dei Drive condivisi e di Il mio Drive.
true drive Esegue query su tutti gli elementi del Drive condiviso specificato. L'elemento driveId deve essere specificato nella richiesta.
true allDrives Esegue query sui file a cui l'utente ha avuto accesso e su tutti i Drive condivisi di cui è membro. Tieni presente che la risposta potrebbe includere incompleteSearch:true, il che indica che alcuni corpora non sono stati cercati per questa richiesta.

I seguenti esempi di codice mostrano come cercare file su tutti i Drive condivisi e su Il mio 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'

Sostituisci ACCESS_TOKEN con il token OAuth 2.0 della tua app.

Tenere traccia delle modifiche su un Drive condiviso

Utilizza il list metodo nella risorsa changes per tenere traccia delle modifiche su un Drive condiviso. Per saperne di più, vedi Tenere traccia delle modifiche per utenti e Drive condivisi.

Il metodo list contiene i seguenti parametri di query specifici per i Drive condivisi:

  • driveId: il Drive condiviso da cui vengono restituite le modifiche. Se specificati, gli ID delle modifiche si riferiscono alle modifiche apportate agli elementi all'interno del Drive condiviso che fornisce lo stato attuale di un file. Per fare riferimento a una modifica specifica del Drive condiviso, è necessario utilizzare sia l'ID del Drive condiviso sia l'ID della modifica come identificatore.

  • includeItemsFromAllDrives: indica se i file o le modifiche dei Drive condivisi devono essere inclusi nell'elenco delle modifiche.

  • supportsAllDrives: indica se l'applicazione richiedente supporta i Drive condivisi. Se è impostato su false, gli elementi dei Drive condivisi, inclusi i Drive condivisi e i file all'interno di un Drive condiviso, non vengono restituiti.

Le seguenti modalità di query sono specifiche per i Drive condivisi:

includeItemsFromAllDrives driveId Descrizione query
true No Le modifiche riflettono le modifiche apportate ai file all'interno o all'esterno dei Drive condivisi a cui l'utente ha avuto accesso, nonché le modifiche ai Drive condivisi di cui l'utente è membro.
true Le modifiche riflettono le modifiche apportate al Drive condiviso specificato e agli elementi al suo interno.

I seguenti esempi di codice mostrano come tenere traccia delle modifiche su un Drive condiviso:

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'

Sostituisci quanto segue:

  • SHARED_DRIVE_ID: l'ID del Drive condiviso.
  • ACCESS_TOKEN: il token OAuth 2.0 della tua app.
  • START_PAGE_TOKEN: il token della pagina iniziale per il Drive condiviso.

Sostituisci SHARED_DRIVE_ID con l'ID del Drive condiviso.

Attivare il supporto dei Drive condivisi nell'interfaccia utente di Drive

Per accedere ai contenuti dei Drive condivisi utilizzando l'interfaccia utente di Drive, assicurati di aver selezionato la casella Supporto dei Drive condivisi nella scheda Integrazione dell'interfaccia utente di Drive dell'API Google Drive nella console Google Cloud. Per saperne di più, vedi Configurare un'integrazione dell'interfaccia utente di Drive.

Utilizzare Google Picker con i Drive condivisi

Il Google Picker supporta la selezione di elementi nei Drive condivisi. Per informazioni dettagliate sull'attivazione del supporto dei Drive condivisi e sull'aggiunta di visualizzazioni dei Drive condivisi nel selettore, vedi l'API Google Picker.