Integrazione con il menu contestuale"Apri con " dell'interfaccia utente di Drive

Quando un utente seleziona un file e fa clic sulla voce di menu "Apri con " dell'interfaccia utente di Drive, Drive reindirizza l'utente all'URL di apertura dell'app definito in Configurare un'integrazione dell'interfaccia utente di Drive.

Se hai selezionato la casella "Importazione" quando hai configurato un'integrazione dell'interfaccia utente di Drive, l'utente può selezionare una combinazione di file specifici dell'app e di Google Workspace da aprire. Quando configuri un'integrazione dell'interfaccia utente di Drive, i file specifici dell'app vengono definiti nei campi "Tipi MIME predefiniti" ed "Estensioni file predefinite", mentre i file di Google Workspace vengono definiti nei campi "Tipi MIME secondari" ed "Estensioni file secondarie".

Per ogni file che l'utente vuole aprire, Drive confronta i tipi MIME con i tipi MIME predefiniti e secondari definiti:

  • Per i tipi MIME definiti nel campo "Tipi MIME predefiniti", l'ID file viene passato all'app. Per informazioni su come gestire i file specifici dell'app, vedi Gestire un URL di apertura per documenti specifici dell'app.

  • Per i tipi MIME definiti nel campo "Tipi MIME secondari", l'interfaccia utente di Drive mostra una finestra di dialogo che chiede all'utente il tipo di file in cui convertire il file di Google Workspace. Ad esempio, se selezioni un file di Documenti Google nell'interfaccia utente di Drive e il campo "Tipi MIME secondari" suggerisce che la tua app supporta text/plain o application/pdf, l'interfaccia utente di Drive chiede all'utente se vuole eseguire la conversione in testo normale o PDF.

    Per informazioni su come gestire i file di Google Workspace, vedi Gestire un URL di apertura per documenti di Google Workspace. Per un elenco dei documenti di Google Workspace e dei formati di conversione dei tipi MIME, vedi Esportare i tipi MIME per i documenti di Google Workspace documenti.

Gestire un URL di apertura per documenti specifici dell'app

Come indicato in Configurare un'integrazione dell'interfaccia utente di Drive , l'app riceve variabili modello con informazioni per l'apertura del file. L'app riceve un insieme predefinito di variabili modello all'interno di un state parametro. Le informazioni state predefinite per un URL di apertura specifico dell'app sono:

{
  "ids": ["ID"],
  "resourceKeys":{"RESOURCE_KEYS":"RESOURCE_KEYS"},
  "action":"open",
  "userId":"USER_ID"
}

Questo output include i seguenti valori:

  • ID: l'ID della cartella principale.
  • RESOURCE_KEYS: un dizionario JSON di ID file mappati alle rispettive chiavi risorsa.
  • open: l'azione eseguita. Il valore è open quando si utilizza un URL di apertura.
  • USER_ID: l'ID profilo che identifica in modo univoco l'utente.

L'app deve agire su questa richiesta seguendo questi passaggi:

  1. Verifica che il campo action abbia un valore open e che il campo ids sia presente.
  2. Utilizza il valore userId per creare una nuova sessione per l'utente. Per ulteriori informazioni sugli utenti che hanno eseguito l'accesso, vedi Utenti ed eventi nuovi.
  3. Utilizza il metodo files.get per controllare le autorizzazioni, recuperare i metadati dei file e scaricare i contenuti dei file utilizzando i valori ID.
  4. Se resourceKeys è stato impostato nella richiesta, imposta l'intestazione della richiesta X-Goog-Drive-Resource-Keys. Per ulteriori informazioni sulle chiavi risorsa, vedi Accedere ai file condivisi tramite link utilizzando le chiavi risorsa.

Il parametro state è codificato tramite URL, quindi l'app deve gestire i caratteri di escape e analizzarlo come JSON.

Gestire un URL di apertura per documenti di Google Workspace

Come indicato in Configurare un'integrazione dell'interfaccia utente di Drive, l'app riceve un insieme predefinito di variabili modello all'interno di un parametro state. Le informazioni state predefinite per un URL di apertura di Google Workspace sono:

{
  "exportIds": ["ID"],
  "resourceKeys":{"RESOURCE_KEYS":"RESOURCE_KEYS"},
  "action":"open",
  "userId":"USER_ID"
}

Questo output include i seguenti valori:

  • EXPORT_ID: un elenco separato da virgole degli ID file esportati. Utilizzato solo per l'apertura di file di Google Workspace.
  • RESOURCE_KEYS: un dizionario JSON di ID file mappati alle rispettive chiavi risorsa.
  • open: l'azione eseguita. Il valore è open quando si utilizza un URL di apertura.
  • USER_ID: l'ID profilo che identifica l'utente.

L'app deve agire su questa richiesta seguendo questi passaggi:

  1. Verifica che si tratti di una richiesta di apertura di un file rilevando sia il valore open nel campo state sia la presenza del campo exportIds.

  2. Utilizza il files.get metodo per controllare le autorizzazioni, recuperare i metadati dei file e determinare il tipo MIME utilizzando i EXPORT_ID valori.

  3. Converti i contenuti dei file utilizzando il files.export metodo. Il seguente esempio di codice mostra come esportare un documento di Google Workspace nel tipo MIME richiesto.

  4. Se resourceKey è stato impostato nella richiesta, imposta l'intestazione della richiesta X-Goog-Drive-Resource-Keys. Per ulteriori informazioni sulle chiavi risorsa, vedi Accedere ai file condivisi tramite link utilizzando le chiavi risorsa.

    Java

    drive/snippets/drive_v3/src/main/java/ExportPdf.java
    import com.google.api.client.googleapis.json.GoogleJsonResponseException;
    import com.google.api.client.http.HttpRequestInitializer;
    import com.google.api.client.http.javanet.NetHttpTransport;
    import com.google.api.client.json.gson.GsonFactory;
    import com.google.api.services.drive.Drive;
    import com.google.api.services.drive.DriveScopes;
    import com.google.auth.http.HttpCredentialsAdapter;
    import com.google.auth.oauth2.GoogleCredentials;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.Arrays;
    
    /* Class to demonstrate use-case of drive's export pdf. */
    public class ExportPdf {
    
      /**
       * Download a Document file in PDF format.
       *
       * @param realFileId file ID of any workspace document format file.
       * @return byte array stream if successful, {@code null} otherwise.
       * @throws IOException if service account credentials file not found.
       */
      public static ByteArrayOutputStream exportPdf(String realFileId) throws IOException {
        // Load pre-authorized user credentials from the environment.
        // TODO(developer) - See https://developers.google.com/identity for
        // guides on implementing OAuth2 for your application.
        GoogleCredentials credentials = GoogleCredentials.getApplicationDefault()
            .createScoped(Arrays.asList(DriveScopes.DRIVE_FILE));
        HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(
            credentials);
    
        // Build a new authorized API client service.
        Drive service = new Drive.Builder(new NetHttpTransport(),
            GsonFactory.getDefaultInstance(),
            requestInitializer)
            .setApplicationName("Drive samples")
            .build();
    
        OutputStream outputStream = new ByteArrayOutputStream();
        try {
          service.files().export(realFileId, "application/pdf")
              .executeMediaAndDownloadTo(outputStream);
    
          return (ByteArrayOutputStream) outputStream;
        } catch (GoogleJsonResponseException e) {
          // TODO(developer) - handle error appropriately
          System.err.println("Unable to export file: " + e.getDetails());
          throw e;
        }
      }
    }

    Python

    drive/snippets/drive-v3/file_snippet/export_pdf.py
    import io
    
    import google.auth
    from googleapiclient.discovery import build
    from googleapiclient.errors import HttpError
    from googleapiclient.http import MediaIoBaseDownload
    
    
    def export_pdf(real_file_id):
      """Download a Document file in PDF format.
      Args:
          real_file_id : file ID of any workspace document format file
      Returns : IO object with location
    
      Load pre-authorized user credentials from the environment.
      TODO(developer) - See https://developers.google.com/identity
      for guides on implementing OAuth2 for the application.
      """
      creds, _ = google.auth.default()
    
      try:
        # create drive api client
        service = build("drive", "v3", credentials=creds)
    
        file_id = real_file_id
    
        # pylint: disable=maybe-no-member
        request = service.files().export_media(
            fileId=file_id, mimeType="application/pdf"
        )
        file = io.BytesIO()
        downloader = MediaIoBaseDownload(file, request)
        done = False
        while done is False:
          status, done = downloader.next_chunk()
          print(f"Download {int(status.progress() * 100)}.")
    
      except HttpError as error:
        print(f"An error occurred: {error}")
        file = None
    
      return file.getvalue()
    
    
    if __name__ == "__main__":
      export_pdf(real_file_id="1zbp8wAyuImX91Jt9mI-CAX_1TqkBLDEDcr2WeXBbKUY")

    Node.js

    drive/snippets/drive_v3/file_snippets/export_pdf.js
    import {GoogleAuth} from 'google-auth-library';
    import {google} from 'googleapis';
    
    /**
     * Exports a Google Doc as a PDF.
     * @param {string} fileId The ID of the file to export.
     * @return {Promise<number>} The status of the export request.
     */
    async function exportPdf(fileId) {
      // Authenticate with Google and get an authorized client.
      // TODO (developer): Use an appropriate auth mechanism for your app.
      const auth = new GoogleAuth({
        scopes: 'https://www.googleapis.com/auth/drive',
      });
    
      // Create a new Drive API client (v3).
      const service = google.drive({version: 'v3', auth});
    
      // Export the file as a PDF.
      const result = await service.files.export({
        fileId,
        mimeType: 'application/pdf',
      });
    
      // Print the status of the export.
      console.log(result.status);
      return result.status;
    }

    PHP

    drive/snippets/drive_v3/src/DriveExportPdf.php
    <?php
    use Google\Client;
    use Google\Service\Drive;
    function exportPdf()
    {
        try {
            $client = new Client();
            $client->useApplicationDefaultCredentials();
            $client->addScope(Drive::DRIVE);
            $driveService = new Drive($client);
            $realFileId = readline("Enter File Id: ");
            $fileId = '1ZdR3L3qP4Bkq8noWLJHSr_iBau0DNT4Kli4SxNc2YEo';
            $fileId = $realFileId;
            $response = $driveService->files->export($fileId, 'application/pdf', array(
                'alt' => 'media'));
            $content = $response->getBody()->getContents();
            return $content;
    
        }  catch(Exception $e) {
             echo "Error Message: ".$e;
        }
    
    }

Visualizza i file convertiti come di sola lettura o presenta una finestra di dialogo che consente all'utente di salvare il file come nuovo tipo di file.

Il parametro state è codificato tramite URL, quindi l'app deve gestire i caratteri di escape e analizzarlo come JSON.

Utenti ed eventi nuovi

Le app di Drive devono trattare tutti gli eventi "Apri con" come potenziali accessi. Alcuni utenti potrebbero avere più account, quindi l'ID utente nel parametro state potrebbe non corrispondere alla sessione corrente. Se l'ID utente nel parametro state non corrisponde alla sessione corrente, termina la sessione corrente per l'app ed esegui l'accesso come utente richiesto.

Oltre ad aprire un'applicazione dall'interfaccia utente di Google Drive, le applicazioni possono visualizzare un selettore file per selezionare i contenuti dall'interno di un'app. Per ulteriori informazioni, vedi Google Picker.