الدمج مع قائمة سياقات "فتح باستخدام" في واجهة مستخدم 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 الثانوية" يشير إلى أنّ تطبيقك يتيح استخدام النص/العادي أو التطبيق/ملف 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. تأكّد من أنّ قيمة open في الحقل action وأنّ الحقل 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
    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;
      }
    }

    ‫2,999

    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.