الدمج مع واجهة مستخدم 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 الثانوية" يقترح أن تطبيقك يتوافق مع النص/العادي أو 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.