Cloud Storage for Firebase מאפשר לכם להוריד במהירות ובקלות קבצים ממאגר (bucket) של Cloud Storage שסופק ומנוהל על ידי Firebase.
יצירת קובץ עזר
כדי להוריד קובץ, קודם צריך ליצור הפניה Cloud Storage לקובץ שרוצים להוריד.
כדי ליצור הפניה, אפשר להוסיף נתיבי צאצא לשורש של קטגוריית Cloud Storage, או ליצור הפניה מכתובת URL קיימת של Cloud Storage או של https://
שמפנה לאובייקט ב-Cloud Storage.gs://
// 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 בארבע דרכים:
- הורדה מכתובת URL
- הורדה למערך בייטים
- הורדה באמצעות Stream
- הורדה לקובץ מקומי
השיטה שבה תשתמשו כדי לאחזר את הקבצים תהיה תלויה באופן שבו תרצו להשתמש בנתונים במשחק.
הורדה מכתובת URL
אם רוצים להשתמש בכתובת 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."); } });
טיפול בשגיאות
יכולות להיות כמה סיבות לשגיאות בהורדה, כולל העובדה שהקובץ לא קיים או שאין למשתמש הרשאה לגשת לקובץ הרצוי. מידע נוסף על שגיאות זמין בקטע Handle Errors במסמכים.
השלבים הבאים
אפשר גם לקבל ולעדכן מטא-נתונים של קבצים שמאוחסנים ב-Cloud Storage.