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

Wenn ein Nutzer eine Datei auswählt und in der Drive-UI auf den Menüpunkt „Öffnen mit“ klickt, wird er an die Open-URL dieser App weitergeleitet, die unter Drive-UI-Integration konfigurieren definiert wurde.

Wenn Sie beim Konfigurieren einer Integration in die Drive-UI das Kästchen „Importieren“ angeklickt haben, kann der Nutzer eine Kombination aus app-spezifischen und Google Workspace-Dateien zum Öffnen auswählen. Wenn Sie eine Drive-UI-Integration konfigurieren, werden app-spezifische Dateien in den Feldern „Standard-MIME-Typen“ und „Standard-Dateierweiterungen“ definiert. Google Workspace-Dateien hingegen werden in den Feldern „Sekundäre MIME-Typen“ und „Sekundäre Dateierweiterungen“ definiert.

Für jede Datei, die der Nutzer öffnen möchte, gleicht Drive die MIME-Typen mit den von Ihnen definierten standardmäßigen und sekundären MIME-Typen ab:

  • Für MIME-Typen, die im Feld "Standard-MIME-Typen" definiert sind, wird die Datei-ID an Ihre Anwendung übergeben. Informationen zum Umgang mit anwendungsspezifischen Dateien finden Sie unter Eine offene URL für anwendungsspezifische Dokumente verarbeiten.

  • Für MIME-Typen, die im Feld "Sekundäre MIME-Typen" definiert sind, wird in der Drive-UI ein Dialogfeld angezeigt, in dem der Nutzer gefragt wird, in welchen Dateityp die Google Workspace-Datei konvertiert werden soll. Wenn Sie beispielsweise eine Google Docs-Datei in der Drive-Benutzeroberfläche auswählen und das Feld „Sekundäre MIME-Typen“ darauf hindeutet, dass Ihre App „Nur Text“ oder „Anwendung/PDF“ unterstützt, wird der Nutzer in der Drive-Benutzeroberfläche gefragt, ob er in Nur-Text- oder PDF-Dateien konvertieren möchte.

    Informationen zum Umgang mit Google Workspace-Dateien finden Sie unter Mit einer offenen URL für Google Workspace-Dokumente umgehen. Eine Liste der Google Workspace-Dokumente und der Konvertierungsformate für MIME-Typen finden Sie unter MIME-Typen für Google Workspace-Dokumente exportieren.

Eine offene URL für app-spezifische Dokumente verarbeiten

Wie unter Integration der Drive-UI konfigurieren beschrieben, erhält Ihre App Vorlagenvariablen mit Informationen, die sie zum Öffnen der Datei benötigt. Ihre Anwendung erhält einen Standardsatz von Vorlagenvariablen innerhalb eines state-Parameters. Die standardmäßigen state-Informationen für eine app-spezifische Open-URL sehen so aus:

{
  "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 den jeweiligen Ressourcenschlüsseln zugeordnet sind.
  • open: Die ausgeführte Aktion. Bei Verwendung einer Open-URL ist der Wert open.
  • 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. Erstellen Sie mit dem Wert userId eine neue Sitzung für den Nutzer. Weitere Informationen zu angemeldeten Nutzern finden Sie unter Nutzer und neue Ereignisse.
  3. Verwenden Sie die Methode files.get, um Berechtigungen zu prüfen, Dateimetadaten abzurufen und den Dateiinhalt mithilfe der ID-Werte herunterzuladen.
  4. Wenn resourceKeys für die Anfrage festgelegt wurde, legen Sie den Anfrageheader X-Goog-Drive-Resource-Keys fest. Weitere Informationen zu Ressourcenschlüsseln finden Sie unter Mit Ressourcenschlüsseln auf per Link freigegebene Dateien zugreifen.

Der Parameter state ist URL-codiert. Daher muss Ihre Anwendung die Escape-Zeichen verarbeiten und als JSON parsen.

Offene URL für Google Workspace-Dokumente verarbeiten

Wie unter Integration der Drive-UI konfigurieren beschrieben, erhält Ihre Anwendung einen Standardsatz von Vorlagenvariablen innerhalb eines state-Parameters. Die Standard-state-Informationen für eine in Google Workspace geöffnete Open-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 zu exportierenden Datei-IDs (wird nur zum Öffnen integrierter Google-Dokumente verwendet).
  • RESOURCE_KEYS: Ein JSON-Wörterbuch mit Datei-IDs, die den jeweiligen Ressourcenschlüsseln zugeordnet sind.
  • open: Die ausgeführte Aktion. Bei Verwendung einer Open-URL ist der Wert open.
  • 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. Dazu erkennen Sie sowohl den Wert open im Feld state als auch das Vorhandensein des Felds exportIds.

  2. Verwenden Sie die Methode files.get, um Berechtigungen zu prüfen, Dateimetadaten abzurufen und den MIME-Typ mithilfe der EXPORT_ID-Werte zu ermitteln.

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

  4. Wenn resourceKey für die Anfrage festgelegt wurde, legen Sie den Anfrageheader X-Goog-Drive-Resource-Keys fest. Weitere Informationen zu Ressourcenschlüsseln finden Sie unter Mit Ressourcenschlüsseln auf per Link freigegebene Dateien zugreifen.

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

Konvertierte Dateien schreibgeschützt anzeigen oder ein Dialogfeld einblenden, in dem der Nutzer die Datei als neuen Dateityp speichern kann.

Der Parameter state ist URL-codiert. Daher muss Ihre Anwendung die Escape-Zeichen verarbeiten und als JSON parsen.

Nutzer und neue Ereignisse

Drive-Anwendungen 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 Anwendung und melden Sie sich als der angeforderte Nutzer an.

Neben dem Öffnen einer Anwendung über die Google Drive-UI können Anwendungen eine Dateiauswahl anzeigen lassen, um Inhalte aus einer Anwendung auszuwählen. Weitere Informationen finden Sie in der Google-Auswahl.