הורד קבצים עם Cloud Storage for Unity

Cloud Storage for Firebase מאפשר לך להוריד במהירות ובקלות קבצים מ- Cloud Storage שסופק ומנוהל על ידי Firebase.

צור הפניה

כדי להוריד קובץ, תחילה צור הפניה ל-Cloud Storage לקובץ שברצונך להוריד.

אתה יכול ליצור הפניה על ידי הוספת נתיבים צאצאים לשורש של דלי Cloud Storage שלך, או שאתה יכול ליצור הפניה מכתובת URL קיימת של gs:// או https:// המפנה לאובייקט ב-Cloud Storage.

// Create a reference with an initial file path and name
StorageReference pathReference =
    storage.GetReference("images/stars.jpg");

// Create a reference from a Google Cloud Storage URI
StorageReference gsReference =
    storage.GetReferenceFromUrl("gs://bucket/images/stars.jpg");

// Create a reference from an HTTPS URL
// Note that in the URL, characters are URL escaped!
StorageReference httpsReference =
    storage.GetReferenceFromUrl("https://firebasestorage.googleapis.com/b/bucket/o/images%20stars.jpg");

להוריד קבצים

ברגע שיש לך הפניה, תוכל להוריד קבצים מ-Cloud Storage בארבע דרכים:

  1. הורד מכתובת אתר
  2. הורד למערך בתים
  3. הורד עם זרם
  4. הורד לקובץ מקומי

השיטה שבה תשתמש כדי לאחזר את הקבצים שלך תהיה תלויה באופן שבו אתה רוצה לצרוך את הנתונים במשחק שלך.

הורד מכתובת אתר

אם ברצונך להשתמש ב-URL עם WWW או UnityWebRequest של Unity, תוכל לקבל כתובת URL להורדה עבור קובץ על ידי קריאה ל- GetDownloadUrlAsync() .

// Fetch the download URL
reference.GetDownloadUrlAsync().ContinueWithOnMainThread(task => {
    if (!task.IsFaulted && !task.IsCanceled) {
        Debug.Log("Download URL: " + task.Result);
        // ... now download the file via WWW or UnityWebRequest.
    }
});

הורד למערך בתים

אתה יכול להוריד את הקובץ למאגר בתים בזיכרון באמצעות שיטת GetBytesAsync() . שיטה זו תטען את כל התוכן של הקובץ שלך לזיכרון. אם תבקש קובץ גדול מהזיכרון הזמין של האפליקציה שלך, האפליקציה שלך תתרסק. כדי להגן מפני בעיות זיכרון, הקפד להגדיר את הגודל המקסימלי למשהו שאתה יודע שהאפליקציה שלך יכולה להתמודד, או השתמש בשיטת הורדה אחרת.

// Download in memory with a maximum allowed size of 1MB (1 * 1024 * 1024 bytes)
const long maxAllowedSize = 1 * 1024 * 1024;
reference.GetBytesAsync(maxAllowedSize).ContinueWithOnMainThread(task => {
    if (task.IsFaulted || task.IsCanceled) {
        Debug.LogException(task.Exception);
        // Uh-oh, an error occurred!
    }
    else {
        byte[] fileContents = task.Result;
        Debug.Log("Finished downloading!");
    }
});

הורד דרך זרם

הורדת הקובץ באמצעות Stream מאפשרת לך לעבד את הנתונים כשהם נטענים. זה נותן לך גמישות מרבית בעת התמודדות עם ההורדה שלך. התקשר ל- GetStreamAsync() והעביר את מעבד הזרם שלך כארגומנט הראשון. הנציג הזה יקרא על שרשור רקע עם Stream המאפשר לך לבצע פעולות או חישובים עתירי חביון כמו אחסון התוכן בדיסק.

// Download via a Stream
reference.GetStreamAsync(stream => {
    // Do something with the stream here.
    //
    // This code runs on a background thread which reduces the impact
    // to your framerate.
    //
    // If you want to do something on the main thread, you can do that in the
    // progress eventhandler (second argument) or ContinueWith to execute it
    // at task completion.
}, null, CancellationToken.None);

GetStreamAsync() לוקח ארגומנטים אופציונליים אחרי מעבד הזרם המאפשר לך לבטל את הפעולה או לקבל הודעה על התקדמות.

הורד לקובץ מקומי

שיטת GetFileAsync() מורידה קובץ ישירות למכשיר מקומי. השתמש בזה אם המשתמשים שלך רוצים לקבל גישה לקובץ במצב לא מקוון או לשתף את הקובץ באפליקציה אחרת.

// Create local filesystem URL
string localUrl = "file:///local/images/island.jpg";

// Download to the local filesystem
reference.GetFileAsync(localUrl).ContinueWithOnMainThread(task => {
    if (!task.IsFaulted && !task.IsCanceled) {
        Debug.Log("File downloaded.");
    }
});

ניתן לצרף מאזינים להורדות על מנת לעקוב אחר התקדמות ההורדה. המאזין עוקב אחר ממשק System.IProgress<T> הסטנדרטי. אתה יכול להשתמש במופע של המחלקה StorageProgress , כדי לספק Action<T> משלך כקריאה חוזרת לתקתק התקדמות.

// Create local filesystem URL
string localUrl = "file:///local/images/island.jpg";

// Start downloading a file
Task task = reference.GetFileAsync(localFile,
    new StorageProgress<DownloadState>(state => {
        // called periodically during the download
        Debug.Log(String.Format(
            "Progress: {0} of {1} bytes transferred.",
            state.BytesTransferred,
            state.TotalByteCount
        ));
    }), CancellationToken.None);

task.ContinueWithOnMainThread(resultTask => {
    if (!resultTask.IsFaulted && !resultTask.IsCanceled) {
        Debug.Log("Download finished.");
    }
});

טיפול בשגיאות

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

הצעדים הבאים

אתה יכול גם לקבל ולעדכן מטא נתונים עבור קבצים המאוחסנים ב-Cloud Storage.