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

Wenn ein Nutzer eine Datei auswählt und auf der Drive-Benutzeroberfläche auf die Schaltfläche "Öffnen mit" klickt. Menüpunkt, Drive-Weiterleitungen, den Nutzer zu der Open-URL dieser App weiterleiten, die unter Drive-Benutzeroberfläche konfigurieren Integration.

Wenn Sie das Kästchen "Importieren" beim Konfigurieren einer Drive-Benutzeroberfläche kann der Nutzer eine Kombination aus App-spezifischen Google Workspace-Dateien, die geöffnet werden sollen. Wenn Sie eine Drive-Benutzeroberfläche konfigurieren App-spezifische Dateien werden unter "Standard-MIME-Typen" und „Standarddateierweiterungen“ und Google Workspace Dateien sind unter „Sekundäre MIME-Typen“ definiert und „Sekundäre Dateiendungen“ .

Für jede Datei, die der Nutzer öffnen möchte, prüft Google Drive den MIME-Wert mit den definierten Standard- und sekundären MIME-Typen vergleichen:

  • Für MIME-Typen, die unter „Standard-MIME-Typen“ definiert sind lautet die Datei-ID an Ihre App übergeben. Informationen zum Umgang mit appspezifischen Dateien Siehe Umgang mit einer geöffneten URL für anwendungsspezifische Dokumente.

  • Für MIME-Typen, die unter „Sekundäre MIME-Typen“ definiert sind wird im Feld Benutzeroberfläche von Drive mit einem Dialogfeld, in dem der Nutzer gefragt wird, welchen Dateityp er verwenden möchte konvertieren Sie die Google Workspace-Datei in. Wenn Sie beispielsweise ein für die Google Docs-Datei auf der Drive-Benutzeroberfläche und das sekundäre MIME- Typen“ schlägt vor, dass Ihre App Text-/Nur- oder Anwendung-/PDF-Dateien unterstützt. Benutzeroberfläche von Google Drive, in der der Nutzer gefragt wird, ob er in das Nur-Text-Format konvertieren möchte oder PDF.

    Informationen zum Umgang mit Google Workspace erhalten Sie unter Umgang mit einer geöffneten URL für Google Workspace-Dokumente. Eine Liste der Google Workspace-Dokumente und MIME-Typ-Konvertierungsformate finden Sie Siehe MIME-Typen für Google Workspace exportieren Dokumente.

„Open URL“ für anwendungsspezifische Dokumente verarbeiten

Wie im Abschnitt Drive-Benutzeroberfläche konfigurieren Integration, Ihre App erhält Vorlagenvariablen mit Informationen, die von Ihrer App geöffnet werden können in der Datei. Ihre Anwendung erhält einen Standardsatz von Vorlagenvariablen in einem state-Parameter. Die Die standardmäßigen state-Informationen für eine App-spezifische 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 ihre jeweiligen Ressourcenschlüssel.
  • open: Die ausgeführte Aktion. Der Wert ist open, wenn ein Open-Source-Creative verwendet wird. URL
  • USER_ID: Die Profil-ID, die den Nutzer eindeutig identifiziert.

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

  1. Vergewissern Sie sich, dass das Feld action den Wert open und das Feld ids präsent sind.
  2. Verwenden Sie den Wert userId, um eine neue Sitzung für den Nutzer zu erstellen. Weitere Informationen Informationen zu angemeldeten Nutzern finden Sie unter Nutzer und neue Ereignisse.
  3. Mit der Methode files.get können Sie dies prüfen. Berechtigungen, das Abrufen von Dateimetadaten und das Herunterladen des Dateiinhalts mithilfe ID-Werte.
  4. Wenn resourceKeys für die Anfrage festgelegt wurde, legen Sie den Parameter X-Goog-Drive-Resource-Keys-Anfrageheader. Weitere Informationen zu Ressourcenschlüssel, siehe Über die Ressource auf per Link freigegebene Dateien zugreifen Schlüssel.

Der Parameter state ist URL-codiert, deine App muss also das Escape-Zeichen und parsen Sie diese im JSON-Format.

„Open URL“ für Google Workspace-Dokumente verarbeiten

Wie im Abschnitt Drive-Benutzeroberfläche konfigurieren , erhält Ihre App einen Standardsatz von Vorlagenvariablen in einem state-Parameter festlegen. Die Standardinformationen für state für eine offene URL in Google Workspace ist:

{
  "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 (nur beim Öffnen von integrierten Google-Dokumenten verwendet).
  • RESOURCE_KEYS: Ein JSON-Wörterbuch mit Datei-IDs, die ihre jeweiligen Ressourcenschlüssel.
  • open: Die ausgeführte Aktion. Der Wert ist open, wenn ein Open-Source-Creative verwendet wird. URL
  • USER_ID: Die Profil-ID, die den Nutzer identifiziert.

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

  1. Bestätige, dass es sich um eine Anfrage zum Öffnen einer Datei handelt, indem sowohl das open Wert im Feld state und das Vorhandensein des Felds exportIds.

  2. Mit der Methode files.get können Sie dies prüfen. Berechtigungen abrufen, Dateimetadaten abrufen und den MIME-Typ mithilfe der Methode EXPORT_ID-Werte.

  3. Konvertieren Sie den Dateiinhalt mithilfe der files.export-Methode. Die folgenden wird gezeigt, wie Sie ein Google Workspace-Dokument angeforderter MIME-Typ.

  4. Wenn resourceKey für die Anfrage festgelegt wurde, legen Sie den Parameter X-Goog-Drive-Resource-Keys-Anfrageheader. Weitere Informationen zu Ressourcenschlüssel, siehe Über die Ressource auf per Link freigegebene Dateien zugreifen Schlüssel.

    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 einblenden, über das der Nutzer speichern Sie die Datei unter dem neuen Dateityp.

Der Parameter state ist URL-codiert, deine App muss also das Escape-Zeichen und parsen Sie diese im JSON-Format.

Nutzer und neue Ereignisse

Drive-Apps sollten alle „Geöffnet mit“ als potenzielle Ereignisse Anmeldungen. Einige Nutzer haben möglicherweise mehrere Konten. Daher ist die User-ID in der state. stimmt möglicherweise nicht mit der aktuellen Sitzung überein. Wenn die User-ID im state nicht mit der aktuellen Sitzung übereinstimmt, beenden Sie die aktuelle Sitzung für Ihre App und melden Sie sich als der gewünschte Nutzer an.

Neben dem Öffnen einer Anwendung über die Benutzeroberfläche von Google Drive können Anwendungen eine Dateiauswahl anzeigen, um Inhalte aus einer App auszuwählen Weitere Informationen findest du in der Google-Auswahl.