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

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

Se hai selezionato la casella di controllo "Importazione" quando hai configurato una UI di Drive. integrazione, l'utente può selezionare una combinazione di opzioni specifiche dell'app e File di Google Workspace da aprire. Quando configuri una UI di Drive i file specifici delle app sono definiti nella sezione "Tipi MIME predefiniti" e "Estensioni di file predefinite" mentre Google Workspace sono definiti nella sezione "Tipi MIME secondari" ed "Estensioni file secondarie" campi.

Per ogni file che l'utente vuole aprire, Drive controlla lo stato MIME rispetto ai tipi MIME predefiniti e secondari definiti:

  • Per i tipi MIME definiti in "Tipi MIME predefiniti" , l'ID del file è passati all'app. Per informazioni su come gestire file specifici delle app, consulta Gestire un URL di apertura per i documenti specifici dell'app.

  • Per i tipi MIME definiti in "Tipi MIME secondari" il campo La UI di Drive mostra una finestra di dialogo che chiede all'utente quale tipo di file deve converti il file di Google Workspace. Ad esempio, se selezioni un File di Documenti Google nella UI di Drive e "MIME secondario tipi" suggerisce che la tua app supporta testo/normale o applicazione/pdf, il La UI di Drive chiede all'utente se vuole effettuare la conversione in testo normale o PDF.

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

Gestire un URL di apertura per i documenti specifici dell'app

Come accennato in Configurare una UI di Drive integrazione, la tua app riceve variabili di modello con informazioni per l'apertura dell'app del file. La tua app riceve un insieme predefinito di variabili del modello in un parametro state. La Le informazioni predefinite di state 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 a e le rispettive chiavi delle risorse.
  • open: l'azione eseguita. Il valore è open quando viene utilizzato un modello URL.
  • USER_ID: l'ID profilo che identifica in modo univoco l'utente.

L'app deve rispondere a questa richiesta seguendo questa procedura:

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

Il parametro state è codificato nell'URL, quindi la tua app deve gestire il carattere di escape e analizzarlo come JSON.

Gestire un URL di apertura per i documenti di Google Workspace

Come accennato in Configurare una UI di Drive integrazione, la tua app riceve un insieme predefinito all'interno di un parametro state. Le informazioni predefinite per state per un URL aperto di Google Workspace è:

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

Questo output include i seguenti valori:

  • EXPORT_ID: un elenco di ID file separati da virgole esportati (utilizzati solo all'apertura dei documenti Google integrati).
  • RESOURCE_KEYS: un dizionario JSON di ID file mappati a e le rispettive chiavi delle risorse.
  • open: l'azione eseguita. Il valore è open quando viene utilizzato un modello URL.
  • USER_ID: l'ID profilo che identifica l'utente.

L'app deve rispondere a questa richiesta seguendo questa procedura:

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

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

  3. Converti il contenuto del file utilizzando files.export. Le seguenti l'esempio di codice mostra come esportare un documento di Google Workspace tipo MIME richiesto.

  4. Se nella richiesta era impostato il valore resourceKey, imposta il valore Intestazione della richiesta X-Goog-Drive-Resource-Keys. Per ulteriori informazioni e chiavi delle risorse, consulta Accedere a file condivisi tramite link utilizzando le risorse. chiave.

    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
    /**
     * Download a Document file in PDF format
     * @param{string} fileId file ID
     * @return{obj} file status
     * */
    async function exportPdf(fileId) {
      const {GoogleAuth} = require('google-auth-library');
      const {google} = require('googleapis');
    
      // Get credentials and build service
      // TODO (developer) - Use appropriate auth mechanism for your app
      const auth = new GoogleAuth({
        scopes: 'https://www.googleapis.com/auth/drive',
      });
      const service = google.drive({version: 'v3', auth});
    
      try {
        const result = await service.files.export({
          fileId: fileId,
          mimeType: 'application/pdf',
        });
        console.log(result.status);
        return result;
      } catch (err) {
        // TODO(developer) - Handle error
        throw err;
      }
    }

    PHP

    drive/snippets/drive_v3/src/DriveExportPdf.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 in 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 nell'URL, quindi la tua app deve gestire il carattere di escape e analizzarlo come JSON.

Utenti e nuovi eventi

Le app di Drive devono considerare tutti gli elementi "apri con" eventi come potenziali accessi. Alcuni utenti potrebbero avere più account, quindi l'ID utente indicato in state potrebbe non corrispondere alla sessione corrente. Se l'ID utente in state non corrisponde alla sessione corrente, termina la sessione corrente per e accedi con l'account dell'utente richiesto.

Oltre ad aprire un'applicazione dall'interfaccia utente di Google Drive, le applicazioni possono mostrare un selettore file per selezionare contenuti dall'interno di un'app. Per ulteriori informazioni informazioni, consulta il selettore Google.