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

Wenn ein Nutzer eine Datei auswählt und auf das Menüelement „Mit“ in der Drive-Benutzeroberfläche klickt, wird er von Drive zur Open-URL der App weitergeleitet, die unter Drive-Benutzeroberfläche für die Integration konfigurieren definiert ist.

Wenn Sie beim Konfigurieren der Einbindung einer Drive-UI das Kästchen „Importieren“ angeklickt haben, kann der Nutzer eine Kombination aus anwendungsspezifischen und Google Workspace-Dateien zum Öffnen auswählen. Wenn Sie eine Drive-UI-Integration konfigurieren, werden appspezifische Dateien in den Feldern „Standard-MIME-Typen“ und „Standarddateiendung“ definiert, während Google Workspace-Dateien in den Feldern „Sekundäre MIME-Typen“ und „Sekundäre Dateiendung“ definiert werden.

Für jede Datei, die der Nutzer öffnen möchte, vergleicht Google 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 URL zum Öffnen für app-spezifische Dokumente verarbeiten.

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

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

Open-URL für appspezifische Dokumente verarbeiten

Wie unter Google Drive-UI-Integration konfigurieren erwähnt, erhält Ihre App Vorlagenvariablen mit Informationen, die Ihre App zum Öffnen der Datei benötigt. Ihre App empfängt einen Standardsatz von Vorlagenvariablen innerhalb eines state-Parameters. Die Standardinformationen für state für eine anwendungsspezifische Open-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 jeweiligen Ressourcenschlüsseln zugeordnet sind.
  • open: Die ausgeführte Aktion. Der Wert ist open, wenn eine Open-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 angemeldeten Nutzern finden Sie unter Nutzer und neue Ereignisse.
  3. Mit der Methode files.get kannst du Berechtigungen prüfen, Dateimetadaten abrufen und den Dateiinhalt mithilfe der ID-Werte herunterladen.
  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 Über Ressourcenschlüssel auf per Link freigegebene Dateien zugreifen.

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

Open-URL für Google Workspace-Dokumente verarbeiten

Wie im Hilfeartikel Drive-UI-Integration konfigurieren erwähnt, erhält Ihre App einen Standardsatz von Vorlagenvariablen in einem state-Parameter. Die Standardinformationen für state für eine Open-URL von Google Workspace 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 von Datei-IDs, die exportiert werden (wird nur beim Öffnen von integrierten Google-Dokumenten verwendet).
  • RESOURCE_KEYS: Ein JSON-Wörterbuch mit Datei-IDs, die ihren jeweiligen Ressourcenschlüsseln zugeordnet sind.
  • open: Die ausgeführte Aktion. Der Wert ist open, wenn eine Open-URL verwendet wird.
  • USER_ID: Die Profil-ID, mit der der Nutzer identifiziert wird.

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 open-Wert im Feld state als auch das Vorhandensein des Felds exportIds erkennen.

  2. Mit der Methode files.get kannst du Berechtigungen prüfen, Dateimetadaten abrufen und den MIME-Typ anhand der EXPORT_ID-Werte ermitteln.

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

  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 Über Ressourcenschlüssel 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 als schreibgeschützt anzeigen oder ein Dialogfeld anzeigen, in dem der Nutzer die Datei als neuen Dateityp speichern kann.

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

Nutzer und neue Ereignisse

Drive-Anwendungen sollten alle Ereignisse vom Typ „Offen mit“ 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.

Apps können nicht nur über die Google Drive-Benutzeroberfläche geöffnet werden, sondern auch eine Dateiauswahl anzeigen, über die Inhalte innerhalb einer App ausgewählt werden können. Weitere Informationen finden Sie unter Google-Auswahl.