الدمج مع واجهة مستخدم Drive "؛الفتح باستخدام" قائمة السياق

عندما يختار مستخدم ملفًا وينقر على عنصر القائمة "فتح باستخدام" في واجهة مستخدم Drive، يعيد Drive توجيه المستخدم إلى عنوان URL لفتح هذا التطبيق المحدّد في ضبط عملية دمج واجهة مستخدم Drive.

إذا وضعت علامة في مربّع "الاستيراد" عند ضبط عملية دمج واجهة مستخدم Drive، يمكن للمستخدم اختيار مجموعة من ملفات Google Workspace الخاصة بالتطبيق لفتحها. عند ضبط عملية دمج واجهة مستخدم Drive، يتم تعريف الملفات الخاصة بالتطبيق في حقلَي "أنواع MIME التلقائية" و"امتدادات الملفات التلقائية"، في حين يتم تعريف ملفات Google Workspace في حقلَي "أنواع MIME الثانوية" و "امتدادات الملفات الثانوية".

لكل ملف يريد المستخدم فتحه، تتحقّق خدمة Drive من أنواع MIME وفقًا لأنواع MIME التلقائية والثانوية المحدَّدة:

  • بالنسبة إلى أنواع MIME المحدّدة في حقل "أنواع MIME التلقائية"، يتم تمرير معرّف الملف إلى تطبيقك. للحصول على معلومات عن كيفية معالجة الملفات الخاصة بالتطبيق، راجِع مقالة معالجة عنوان URL مفتوح للمستندات الخاصة بالتطبيق.

  • بالنسبة إلى أنواع MIME المحدّدة في حقل "أنواع MIME الثانوية"، تعرِض واجهة مستخدم Drive مربّع حوار يطلب من المستخدم نوع الملف الذي يريد تحويل ملف Google Workspace إليه. على سبيل المثال، إذا اخترت ملفًا في "مستندات Google" في واجهة مستخدم Drive وكان حقل "أنواع MIME الثانوية" يشير إلى أنّ تطبيقك متوافق مع text/plain أو application/pdf، تطلب واجهة مستخدم Drive من المستخدم تحديد ما إذا كان يريد التحويل إلى ملف نص عادي أو ملف بتنسيق PDF.

    للحصول على معلومات عن كيفية التعامل معملفّات Google Workspace، يُرجى الاطّلاع على مقالة التعامل مع عنوان URL مفتوح لمستندات Google Workspace. للحصول على قائمة بمستندات Google Workspace وتنسيقات تحويل أنواع MIME، يُرجى الاطّلاع على مقالة تصدير أنواع MIME لمستندات Google Workspace.

التعامل مع عنوان URL مفتوح للمستندات الخاصة بالتطبيق

كما هو موضّح في مقالة ضبط عملية دمج واجهة مستخدم Drive،تلقّى تطبيقك متغيّرات النماذج التي تتضمّن معلومات لفتح الملف. يتلقّى تطبيقك مجموعة تلقائية من متغيّرات النماذج ضمن مَعلمة state. إليك معلومات state التلقائية لعنوان URL لفتح تطبيق معيّن:

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

تتضمّن هذه النتائج القيم التالية:

  • ID: معرّف المجلد الرئيسي
  • RESOURCE_KEYS: قاموس JSON لمعرّفات الملفات المرتبطة بمفاتيح الموارد ذات الصلة
  • open: الإجراء الذي يتم تنفيذه تكون القيمة open عند استخدام عنوان URL مفتوح.
  • USER_ID: رقم تعريف الملف الشخصي الذي يحدّد المستخدم بشكل فريد.

يجب أن يتّخذ تطبيقك إجراءً بشأن هذا الطلب باتّباع الخطوات التالية:

  1. تأكّد من أنّ حقل action يحتوي على القيمة open وأنّ حقل ids متوفّر.
  2. استخدِم القيمة userId لإنشاء جلسة جديدة للمستخدم. لمزيد من المعلومات عن المستخدِمين الذين سجّلوا الدخول، اطّلِع على المستخدِمون والأحداث الجديدة.
  3. استخدِم طريقة files.get للتحقق من الأذونات واسترجاع البيانات الوصفية للملفات وتنزيل محتوى الملف باستخدام قيم ID.
  4. إذا تم ضبط resourceKeys على الطلب، اضبط عنوان الطلب X-Goog-Drive-Resource-Keys. لمزيد من المعلومات حول مفاتيح الموارد، راجع الوصول إلى الملفات التي تمت مشاركتها باستخدام رابط باستخدام مفاتيح الموارد.

يتم ترميز المَعلمة state باستخدام عنوان URL، لذا يجب أن يتعامل تطبيقك مع أحرف الهروب ويحلّلها كملف JSON.

التعامل مع عنوان URL مفتوح لمستندات Google Workspace

كما هو موضّح في مقالة إعداد عملية دمج واجهة مستخدم Drive، يتلقّى تطبيقك مجموعة تلقائية من متغيّرات النماذج ضمن مَعلمة state. معلومات state التلقائية لعنوان URL المفتوح في Google Workspace هي:

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

تتضمّن هذه النتائج القيم التالية:

  • EXPORT_ID: قائمة مفصولة بفواصل بمعرّفات الملفات التي يتم تصديرها (لا تُستخدم إلا عند فتح مستندات Google المضمّنة).
  • RESOURCE_KEYS: قاموس JSON لمعرّفات الملفات المرتبطة بمفاتيح الموارد ذات الصلة
  • open: الإجراء الذي يتم تنفيذه تكون القيمة open عند استخدام عنوان URL مفتوح.
  • USER_ID: رقم تعريف الملف الشخصي الذي يحدّد المستخدم.

يجب أن يتّخذ تطبيقك إجراءً بشأن هذا الطلب باتّباع الخطوات التالية:

  1. تأكَّد من أنّ هذا طلب لفتح ملف من خلال رصد كلّ من قيمة open في حقل state ووجود حقل exportIds.

  2. استخدِم الطريقة files.get للتحقّق من الأذونات وجلب البيانات الوصفية للملف وتحديد نوع MIME باستخدام قيم EXPORT_ID.

  3. حوِّل محتوى الملف باستخدام الطريقة files.export. يعرض نموذج الرمز البرمجي التالي كيفية تصدير مستند Google Workspace إلى نوع MIME المطلوب.

  4. إذا تم ضبط resourceKey على الطلب، اضبط عنوان الطلب X-Goog-Drive-Resource-Keys. لمزيد من المعلومات عن مفاتيح الموارد، يُرجى الاطّلاع على مقالة الوصول إلى الملفات التي تمت مشاركتها باستخدام رابط باستخدام مفاتيح الموارد.

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

عرض الملفات المحوَّلة كملف للقراءة فقط أو عرض مربّع حوار يتيح للمستخدم حفظ الملف كنوع الملف الجديد

يتم ترميز المَعلمة state باستخدام عنوان URL، لذا يجب أن يتعامل تطبيقك مع أحرف الهروب ويحلّلها كملف JSON.

المستخدمون والأحداث الجديدة

يجب أن تتعامل تطبيقات Drive مع جميع أحداث "فتح باستخدام" باعتبارها عمليات تسجيل دخول محتملة. قد يكون لدى بعض المستخدمين حسابات متعدّدة، لذا قد لا يتطابق معرّف المستخدم في المَعلمة state مع الجلسة الحالية. إذا لم يتطابق معرّف المستخدم في المَعلمة state مع الجلسة الحالية، عليك إنهاء الجلسة الحالية لتطبيقك وتسجيل الدخول بصفتك المستخدم المطلوب.

بالإضافة إلى فتح تطبيق من واجهة مستخدم Google Drive، يمكن للتطبيقات عرض منتقي الملفات لاختيار المحتوى من داخل أحد التطبيقات. لمزيد من المعلومات، يُرجى الاطّلاع على أداة اختيار Google.