שילוב עם ממשק המשתמש של Drive's "פתיחה באמצעות" תפריט ההקשר

כשמשתמש בוחר קובץ ולוחץ על 'פתיחה באמצעות' בממשק המשתמש של Drive אפשרות בתפריט, הפניות אוטומטיות ב-Drive המשתמש לכתובת ה-URL לפתיחה של האפליקציה, שמוגדרת בהגדרת ממשק משתמש של Drive שילוב.

אם סימנתם את האפשרות "ייבוא" תיבה כשהגדרתם ממשק משתמש של Drive של השילוב, המשתמש יכול לבחור שילוב של קבצים מ-Google Workspace לפתיחה. כשמגדירים את ממשק המשתמש של Drive שילוב, קבצים ספציפיים לאפליקציה מוגדרים ב'סוגי MIME המוגדרים כברירת מחדל'. וגם 'סיומות הקבצים שמוגדרות כברירת מחדל' שדות, ואילו Google Workspace קבצים מוגדרים ב'סוגי MIME משניים' ו'סיומות קבצים משניות' .

Drive בודק את ה-MIME עבור כל קובץ שהמשתמש רוצה לפתוח סוגי ה-MIME המוגדרים כברירת המחדל והמשניים:

  • לסוגי MIME שמוגדרים ב'סוגי MIME המוגדרים כברירת מחדל'. השדה הזה, מזהה הקובץ הוא שהועברה לאפליקציה שלך. למידע על אופן הטיפול בקבצים ספציפיים לאפליקציה: למידע נוסף, ניתן לעיין במאמר טיפול בכתובת URL פתוחה במסמכים ספציפיים לאפליקציה.

  • לסוגי MIME שהוגדרו ב'סוגי MIME משניים' השדה הזה, בממשק המשתמש של Drive מוצגת תיבת דו-שיח שבה המשתמש נשאל על סוג הקובץ ממירים את הקובץ של Google Workspace לקובץ. לדוגמה, אם בחרת קובץ Google Docs בממשק המשתמש של 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. מוודאים שהשדה action מכיל את הערך open ושהשדה ids הוא כיום.
  2. כדי ליצור סשן חדש למשתמש, צריך להשתמש בערך userId. לקבלת מידע נוסף מידע על משתמשים מחוברים, ראו משתמשים אירועים חדשים.
  3. משתמשים בשיטה files.get כדי לבדוק הרשאות, לאחזר מטא נתונים של קבצים ולהוריד את תוכן הקובץ באמצעות את הערכים מסוג ID.
  4. אם בבקשה הוגדר הערך resourceKeys, יש להגדיר את כותרת הבקשה X-Goog-Drive-Resource-Keys. מידע נוסף על מפתחות משאבים, ראו גישה לקבצים ששותפו באמצעות קישור באמצעות משאב .

הפרמטר state מקודד בכתובת URL, ולכן האפליקציה חייבת לטפל בתו בריחה (escape) ולנתח אותו כקובץ 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, ולכן האפליקציה חייבת לטפל בתו בריחה (escape) ולנתח אותו כקובץ JSON.

משתמשים ו אירועים חדשים

אפליקציות Drive צריכות להתייחס לכל הפריטים מסוג 'פתיחה באמצעות' אירועים פוטנציאליים מחוברים לחשבון. למשתמשים מסוימים עשויים להיות מספר חשבונות, לכן מזהה המשתמש בstate ייתכן שהפרמטר לא תואם לסשן הנוכחי. אם מזהה המשתמש בקובץ state הפרמטר לא תואם לסשן הנוכחי, צריך לסיים את הסשן הנוכחי באפליקציה ולהיכנס בתור המשתמש המבוקש.

נוסף לפתיחת אפליקציה מממשק המשתמש של Google Drive, האפליקציות יכולות להציג בוחר קבצים כדי לבחור תוכן מתוך האפליקציה. לקבלת מידע נוסף מידע נוסף, ראו בורר Google.