Integrasikan dengan menu konteks "Buka dengan" UI Drive

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

Jika Anda mencentang kotak "Mengimpor" saat mengonfigurasi integrasi UI Drive, pengguna dapat memilih kombinasi file khusus aplikasi dan Google Workspace untuk dibuka. Saat Anda mengonfigurasi integrasi UI Drive, file khusus aplikasi ditentukan di kolom "Jenis MIME default" dan "Ekstensi file default", sedangkan file Google Workspace ditentukan di kolom "Jenis MIME sekunder" dan "Ekstensi file sekunder".

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

  • Untuk jenis MIME yang ditentukan di kolom "Jenis MIME default", ID file akan 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 di kolom "Jenis MIME sekunder", UI Drive akan menampilkan dialog yang meminta pengguna untuk memilih jenis file yang akan dikonversi menjadi file Google Workspace. Misalnya, jika Anda memilih file Google Dokumen di UI Drive dan kolom "Jenis MIME Sekunder" menyarankan bahwa aplikasi Anda mendukung text/plain atau application/pdf, UI Drive akan menanyakan kepada pengguna apakah mereka ingin mengonversi ke Teks Biasa atau PDF.

    Untuk informasi tentang cara menangani file 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 dokumen Google Workspace.

Menangani URL Terbuka untuk dokumen khusus aplikasi

Seperti yang disebutkan dalam Mengonfigurasi integrasi UI Drive, aplikasi Anda menerima variabel template dengan informasi agar aplikasi dapat membuka file. Aplikasi Anda menerima kumpulan variabel template default dalam parameter state. Informasi state default untuk URL Buka 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 ID file yang dipetakan ke kunci resource masing-masing.
  • open: Tindakan yang sedang dilakukan. Nilainya adalah open saat menggunakan URL Terbuka.
  • USER_ID: ID profil yang mengidentifikasi pengguna secara unik.

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

  1. Verifikasi bahwa kolom action memiliki nilai open dan kolom ids ada.
  2. Gunakan nilai userId untuk membuat sesi baru bagi pengguna. Untuk informasi selengkapnya tentang pengguna yang login, lihat Pengguna & peristiwa baru.
  3. Gunakan metode files.get untuk memeriksa izin, mengambil metadata file, dan mendownload konten file menggunakan nilai ID.
  4. Jika resourceKeys ditetapkan pada permintaan, tetapkan header permintaan X-Goog-Drive-Resource-Keys. Untuk informasi selengkapnya tentang kunci resource, lihat Mengakses file yang dibagikan link menggunakan kunci resource.

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

Menangani URL Terbuka untuk dokumen Google Workspace

Seperti yang disebutkan dalam Mengonfigurasi integrasi UI Drive, aplikasi Anda menerima kumpulan variabel template default 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 ID file yang dipetakan ke kunci resource masing-masing.
  • open: Tindakan yang sedang dilakukan. Nilainya adalah open saat menggunakan URL Terbuka.
  • 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 nilai open di kolom state dan keberadaan kolom exportIds.

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

  3. Konversikan konten file menggunakan metode files.export. Contoh kode berikut menunjukkan cara mengekspor dokumen Google Workspace ke jenis MIME yang diminta.

  4. Jika resourceKey ditetapkan pada permintaan, tetapkan header permintaan X-Goog-Drive-Resource-Keys. Untuk informasi selengkapnya tentang kunci resource, lihat Mengakses file yang dibagikan link menggunakan kunci 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;
        }
    
    }

Menampilkan file yang dikonversi sebagai hanya baca atau menampilkan dialog yang memungkinkan pengguna menyimpan file sebagai jenis file baru.

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

Pengguna & peristiwa baru

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

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