Drive-UI über das Kontextmenü „Öffnen mit“ integrieren

Wenn ein Nutzer eine Datei auswählt und im Drive-UI auf „Öffnen mit“ klickt, wird er zu der URL weitergeleitet, die in „Drive-UI-Integration konfigurieren“ für diese App definiert ist.

Wenn Sie beim Konfigurieren einer Drive-UI-Integration das Kästchen „Importieren“ angekreuzt haben, kann der Nutzer eine Kombination aus app-spezifischen und Google Workspace-Dateien auswählen, um sie zu öffnen. Beim Konfigurieren einer Drive-UI-Integration werden app-spezifische Dateien in den Feldern „Standard-MIME-Typen“ und „Standard-Dateierweiterungen“ definiert, Google Workspace-Dateien in den Feldern „Sekundäre MIME-Typen“ und „Sekundäre Dateierweiterungen“.

Für jede Datei, die der Nutzer öffnen möchte, vergleicht Drive die MIME-Typen mit den von Ihnen definierten Standard- und sekundären MIME-Typen:

  • Bei MIME-Typen, die im Feld "Standard-MIME-Typen" definiert sind, wird die Datei-ID an Ihre App übergeben. Informationen zum Umgang mit app-spezifischen Dateien finden Sie unter Öffnungs-URL für app-spezifische Dokumente verarbeiten.

  • Bei MIME-Typen, die im Feld „Sekundäre MIME-Typen“ definiert sind, wird im Drive-UI ein Dialogfeld angezeigt, in dem der Nutzer gefragt wird, in welchen Dateityp die Google Workspace-Datei konvertiert werden soll. Wenn Sie beispielsweise im Drive-UI eine Google Docs-Datei auswählen und im Feld „Sekundäre MIME-Typen“ angegeben ist, dass Ihre App die MIME-Typen „text/plain“ oder „application/pdf“ unterstützt, wird der Nutzer im Drive-UI gefragt, ob er die Datei in Nur-Text oder PDF konvertieren möchte.

    Informationen zum Umgang mit Google Workspace Dateien finden Sie unter Öffnungs-URL für Google Workspace-Dokumente verarbeiten. Eine Liste der Google Workspace-Dokumente und der Formate für die MIME-Typ-Konvertierung finden Sie unter MIME-Typen für Google Workspace-Dokumente exportieren.

Öffnungs-URL für app-spezifische Dokumente verarbeiten

Wie unter Drive-UI-Integration konfigurieren, beschrieben, erhält Ihre App Vorlagenvariablen mit Informationen, die zum Öffnen der Datei erforderlich sind. Ihre App erhält einen Standardsatz von Vorlagenvariablen innerhalb eines state-Parameters. Die Standardinformationen für state für eine app-spezifische Öffnungs-URL sind:

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

Diese Ausgabe enthält die folgenden Werte:

  • ID: Die ID des übergeordneten Ordners.
  • RESOURCE_KEYS: Ein JSON-Wörterbuch mit Datei-IDs, die ihren entsprechenden Ressourcenschlüsseln zugeordnet sind.
  • open: Die ausgeführte Aktion. Der Wert ist open, wenn eine Öffnungs-URL verwendet wird.
  • USER_ID: Die Profil-ID, die den Nutzer eindeutig identifiziert.

Ihre App muss auf diese Anfrage reagieren. Gehen Sie dazu so vor:

  1. Prüfen Sie, ob das Feld action den Wert open hat und das Feld ids vorhanden ist.
  2. Verwenden Sie den Wert userId, um eine neue Sitzung für den Nutzer zu erstellen. Weitere Informationen zu angemelden Nutzern finden Sie unter Nutzer und neue Ereignisse.
  3. Verwenden Sie die files.get-Methode, um Berechtigungen zu prüfen, Dateimetadaten abzurufen und den Dateiinhalt mit den ID-Werten herunterzuladen.
  4. Wenn resourceKeys in der Anfrage festgelegt wurde, legen Sie den Anfrageheader X-Goog-Drive-Resource-Keys fest. Weitere Informationen zu Ressourcenschlüsseln finden Sie unter Zugriff auf über Links freigegebene Dateien mit Ressourcenschlüsseln.

Der Parameter state ist URL-codiert. Ihre App muss daher die Escapezeichen verarbeiten und ihn als JSON parsen.

Öffnungs-URL für Google Workspace-Dokumente verarbeiten

Wie unter Drive-UI-Integration konfigurieren beschrieben, erhält Ihre App einen Standardsatz von Vorlagenvariablen innerhalb eines state-Parameters. Die Standardinformationen für state für eine Google Workspace-Öffnungs-URL sind:

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

Diese Ausgabe enthält die folgenden Werte:

  • EXPORT_ID: Eine durch Kommas getrennte Liste der Datei-IDs, die exportiert werden. Wird nur beim Öffnen von Google Workspace-Dateien verwendet.
  • RESOURCE_KEYS: Ein JSON-Wörterbuch mit Datei-IDs, die ihren entsprechenden Ressourcenschlüsseln zugeordnet sind.
  • open: Die ausgeführte Aktion. Der Wert ist open, wenn eine Öffnungs-URL verwendet wird.
  • USER_ID: Die Profil-ID, die den Nutzer identifiziert.

Ihre App muss auf diese Anfrage reagieren. Gehen Sie dazu so vor:

  1. Prüfen Sie, ob es sich um eine Anfrage zum Öffnen einer Datei handelt, indem Sie sowohl den Wert open im Feld state als auch das Vorhandensein des Felds exportIds erkennen.

  2. Verwenden Sie die files.get-Methode, um Berechtigungen zu prüfen, Dateimetadaten abzurufen und den MIME-Typ mit den EXPORT_ID-Werten zu bestimmen.

  3. Konvertieren Sie den Dateiinhalt mit der files.export Methode. Das folgende Codebeispiel zeigt, wie Sie ein Google Workspace-Dokument in den angeforderten MIME-Typ exportieren.

  4. Wenn resourceKey in der Anfrage festgelegt wurde, legen Sie den Anfrageheader X-Goog-Drive-Resource-Keys fest. Weitere Informationen zu Ressourcenschlüsseln finden Sie unter Zugriff auf über Links freigegebene Dateien mit Ressourcenschlüsseln.

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

Zeigen Sie konvertierte Dateien als schreibgeschützt an oder präsentieren Sie ein Dialogfeld, in dem der Nutzer die Datei als neuen Dateityp speichern kann.

Der Parameter state ist URL-codiert. Ihre App muss daher die Escapezeichen verarbeiten und ihn als JSON parsen.

Nutzer und neue Ereignisse

Drive-Apps sollten alle „Öffnen mit“-Ereignisse als potenzielle Anmeldungen behandeln. Einige Nutzer haben möglicherweise mehrere Konten. Daher stimmt die Nutzer-ID im Parameter state möglicherweise nicht mit der aktuellen Sitzung überein. Wenn die Nutzer-ID im Parameter state nicht mit der aktuellen Sitzung übereinstimmt, beenden Sie die aktuelle Sitzung für Ihre App und melden Sie sich als angeforderter Nutzer an.

Neben dem Öffnen einer Anwendung über das Google Drive-UI können Anwendungen auch eine Dateiauswahl anzeigen, um Inhalte aus einer App auszuwählen. Weitere Informationen finden Sie unter Google Picker.