Integrasikan dengan menu konteks "Buka dengan" UI Drive

Saat pengguna memilih file dan mengklik "Buka dengan" di UI Drive item menu, pengalihan Drive pengguna ke aplikasi tersebut Buka URL yang ditentukan di Mengonfigurasi UI Drive integrasi.

Jika Anda mencentang kotak "Mengimpor" saat Anda mengonfigurasi UI Drive integrasi, pengguna dapat memilih kombinasi dari solusi spesifik per aplikasi dan File Google Workspace yang akan dibuka. Saat Anda mengonfigurasi UI Drive dalam integrasi, file khusus aplikasi didefinisikan dalam "Jenis MIME default" dan "Ekstensi file default" sedangkan Google Workspace file ditentukan dalam "Jenis MIME sekunder" dan "Ekstensi file sekunder" kolom.

Untuk setiap file yang ingin dibuka pengguna, Drive akan memeriksa MIME terhadap jenis MIME default dan sekunder yang telah ditentukan:

  • Untuk jenis MIME yang ditentukan dalam "Default MIME types" , ID filenya adalah diteruskan ke aplikasi Anda. Untuk informasi tentang cara menangani file khusus aplikasi, lihat Menangani URL Terbuka untuk dokumen khusus aplikasi.

  • Untuk jenis MIME yang ditentukan dalam "Jenis MIME sekunder" bidang, UI Drive menampilkan dialog yang menanyakan jenis file kepada pengguna menjadi target konversi file Google Workspace. Misalnya, jika Anda memilih File Google Dokumen di UI Drive dan "MIME Sekunder "jenis" menunjukkan bahwa aplikasi Anda mendukung teks/polos atau aplikasi/pdf, UI Drive menanyakan kepada pengguna apakah mereka ingin mengonversi ke Teks Biasa atau PDF.

    Untuk mengetahui informasi cara menangani Google Workspace lihat Menangani URL Terbuka untuk dokumen Google Workspace. Untuk mengetahui daftar dokumen Google Workspace dan format konversi jenis MIME, lihat Mengekspor jenis MIME untuk Google Workspace dokumen.

Menangani Open URL untuk dokumen khusus aplikasi

Seperti yang disebutkan dalam Mengonfigurasi UI Drive integrasi, aplikasi Anda menerima variabel template dengan informasi untuk membuka aplikasi file tersebut. Aplikasi Anda menerima kumpulan variabel template default dalam parameter state. Tujuan informasi state default untuk Open URL khusus aplikasi adalah:

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

Output ini mencakup nilai-nilai berikut:

  • ID: ID folder induk.
  • RESOURCE_KEYS: Kamus JSON untuk ID file yang dipetakan ke kunci resource-nya masing-masing.
  • open: Tindakan yang sedang dilakukan. Nilainya adalah open saat menggunakan metode Open .
  • USER_ID: ID profil yang mengidentifikasi pengguna secara unik.

Aplikasi Anda harus menindaklanjuti permintaan ini dengan mengikuti langkah-langkah berikut:

  1. Pastikan kolom action memiliki nilai open dan kolom ids adalah saat ini.
  2. Gunakan nilai userId untuk membuat sesi baru bagi pengguna. Untuk selengkapnya informasi tentang pengguna yang login, lihat Pengguna & acara baru.
  3. Gunakan metode files.get untuk memeriksa izin akses, mengambil metadata file, dan mengunduh isi file menggunakan nilai ID.
  4. Jika resourceKeys ditetapkan pada permintaan, setel Header permintaan X-Goog-Drive-Resource-Keys. Untuk mengetahui informasi selengkapnya tentang kunci resource, lihat Mengakses file yang dibagikan dengan link menggunakan resource .

Parameter state dienkode ke URL sehingga aplikasi Anda harus menangani escape karakter dan mengurainya sebagai JSON.

Menangani URL Terbuka untuk dokumen Google Workspace

Seperti yang disebutkan dalam Mengonfigurasi UI Drive integrasi, aplikasi Anda akan menerima kumpulan default variabel template dalam parameter state. Informasi state default untuk URL Terbuka Google Workspace adalah:

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

Output ini mencakup nilai-nilai berikut:

  • EXPORT_ID: Daftar ID file yang dipisahkan koma yang diekspor (hanya digunakan saat membuka dokumen Google bawaan).
  • RESOURCE_KEYS: Kamus JSON untuk ID file yang dipetakan ke kunci resource-nya masing-masing.
  • open: Tindakan yang sedang dilakukan. Nilainya adalah open saat menggunakan metode Open .
  • USER_ID: ID profil yang mengidentifikasi pengguna.

Aplikasi Anda harus menindaklanjuti permintaan ini dengan mengikuti langkah-langkah berikut:

  1. Verifikasi bahwa ini adalah permintaan untuk membuka file dengan mendeteksi open di kolom state dan adanya kolom exportIds.

  2. Gunakan metode files.get untuk memeriksa izin akses, mengambil metadata file, dan menentukan jenis MIME menggunakan Nilai EXPORT_ID.

  3. Konversi konten file menggunakan Metode files.export. Hal berikut contoh kode menunjukkan cara mengekspor dokumen Google Workspace ke jenis MIME yang diminta.

  4. Jika resourceKey ditetapkan pada permintaan, setel Header permintaan X-Goog-Drive-Resource-Keys. Untuk mengetahui informasi selengkapnya tentang kunci resource, lihat Mengakses file yang dibagikan dengan link menggunakan resource .

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

Tampilkan file yang dikonversi sebagai hanya baca atau tampilkan dialog yang memungkinkan pengguna simpan {i>file<i} sebagai tipe file yang baru.

Parameter state dienkode ke URL sehingga aplikasi Anda harus menangani escape karakter dan mengurainya sebagai JSON.

Pengguna & acara baru

Aplikasi Drive harus memperlakukan semua "buka dengan" peristiwa sebagai potensi login. Beberapa pengguna mungkin memiliki beberapa akun, jadi ID pengguna di state mungkin tidak cocok dengan sesi saat ini. Jika ID pengguna di state tidak cocok dengan sesi saat ini, akhiri sesi saat ini untuk aplikasi dan masuk sebagai pengguna yang diminta.

Selain membuka aplikasi dari UI Google Drive, aplikasi dapat menampilkan pemilih file untuk memilih konten dari dalam aplikasi. Untuk selengkapnya informasi, lihat Alat Pilih Google.