Umgang mit geöffneten URLs

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

Wenn ein Nutzer eine Datei auswählt und auf das Kontextmenü "Öffnen mit" klickt, wird er von Google Drive an die Open URL weitergeleitet, die Sie bei der Konfiguration einer Drive-Integration angegeben haben.

Wenn Sie bei der Konfiguration einer Drive-Integration das Kästchen „Importieren“ angeklickt haben, kann der Nutzer eine Kombination aus appspezifischen undGoogle Workspace -Dateien auswählen. App-spezifische Dateien werden bei der Konfiguration einer Drive-Integration in den Feldern „Standard Mime-Typen“ und „Standarddateierweiterungen“ definiert. Google Workspace-Dateien werden in den Feldern „Sekundäre Mime-Typen“ und „Sekundäre Dateierweiterungen“ definiert, wenn Sie eine Drive-Integration konfiguriert haben.

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

  • Für MIME-Typen, die im Feld „Standard Mime-Typen“ definiert sind, wird die „fileID“ an Ihre App übergeben. Informationen zum Umgang mit appspezifischen Dateien finden Sie unter Offene URL für ein App-spezifisches Dokument verarbeiten.

  • Bei MIME-Typen, die im Feld für die sekundären Mime-Typen definiert sind, wird in der Drive-UI ein Dialogfeld angezeigt, in dem der Nutzer gefragt wird, in welchen Dateityp dieGoogle Workspace -Datei konvertiert werden soll. Wenn Sie beispielsweise in der Drive-Benutzeroberfläche ein Google-Dokument auswählen und im Feld für den sekundären Mime-Typ vorgeschlagen wird, dass Ihre Anwendung Text/HTML, Text/Nur- oder Anwendung/PDF unterstützt, wird der Nutzer gefragt, ob er die Datei in HTML, Nur-Text oder PDF konvertieren möchte. Informationen zum Umgang mit Google Workspace-Dateien finden Sie unter Offene URL für ein Google Workspace -Dokument verwalten. Eine Liste der Google Workspace Dokumente, Conversion-Formate und entsprechenden MIME-Typen finden Sie unter Google Workspace Dokumente und entsprechende Export-MIME-Typen.

Umgang mit offenen URLs für App-spezifische Dokumente

Wie unter Drive-UI-Integration konfigurieren erwähnt, empfängt Ihre Anwendung Vorlagenvariablen, die Informationen zum Öffnen der Datei enthalten. Ihre Anwendung empfängt einen Standardsatz von Vorlagenvariablen innerhalb eines state-Parameters. Die standardmäßigen state-Informationen für eine anwendungsspezifische offene URL sind:

{
  "ids": ["0Bz0bd"],
  "resourceKeys":{"0Bz0bd":"AAshj23Ad1"},
  "action":"open",
  "userId":"103354693083460731603"
}

So verarbeiten Sie diese Informationen:

  1. Ermitteln Sie den Wert open im Parameter state, um zu prüfen, ob es sich um eine Anfrage zum Öffnen einer Datei handelt.

  2. Prüfen Sie die Berechtigungen, rufen Sie Dateimetadaten ab und laden Sie den Dateiinhalt mit der Methode files.get herunter.

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

Umgang mit offenen URLs für Google Workspace Dokumente

Wie unter „Drive-UI konfigurieren“ beschrieben, erhält Ihre Anwendung einen Standardsatz von Vorlagenvariablen innerhalb eines state-Parameters. Die standardmäßigen state-Informationen für eine anwendungsspezifische offene URL sind:

{
  "exportIds": ["0Bz0bd"],
  "resourceKeys":{"0Bz0bd":"AAshj23Ad1"},
  "action":"open",
  "userId":"103354693083460731603"
}

So verarbeiten Sie diese Informationen:

  1. Ermitteln Sie den Wert open im Parameter state, um zu prüfen, ob es sich um eine Anfrage zum Öffnen einer Datei handelt.

  2. Berechtigungen prüfen, Dateimetadaten abrufen und Mime-Typ ermitteln.

  3. Konvertieren Sie den Inhalt der Datei mit der Methode files.export. Das folgende Snippet zeigt, wie eine Datei als neuer Dateityp konvertiert wird.

    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
    from __future__ import print_function
    
    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;
        }
    
    }
  4. Konvertierte Dateien als schreibgeschützt anzeigen oder ein Dialogfeld anzeigen, über das der Nutzer die Datei als Datei des neuen Typs speichern kann.

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

„Öffnen mit“-Ereignisse verarbeiten

Drive-Apps sollten alle Ereignisse vom Typ „Öffnen 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 angeforderter Nutzer an.

Weitere Informationen

Neben dem Starten einer Anwendung von der Google Drive-Benutzeroberfläche können Anwendungen eine Dateiauswahl anzeigen, um Inhalte in der Anwendung selbst auszuwählen. Weitere Informationen finden Sie im Leitfaden zur Dateiauswahl.

Konvertierte Apps sollten schreibgeschützte Dateien als schreibgeschützt anzeigen oder Nutzern erlauben, sie als neue Dateien zu speichern.