Cloud Storage for Unity-এর মাধ্যমে ফাইল ডাউনলোড করা

Cloud Storage for Firebase আপনাকে Firebase-এর প্রদান ও ম্যানেজ করা Cloud Storage বাকেট থেকে দ্রুত ও সহজে ফাইল ডাউনলোড করতে দেয়।

রেফারেন্স তৈরি করা

কোনও ফাইল ডাউনলোড করতে, প্রথমে আপনি যে ফাইল ডাউনলোড করতে চান সেটির Cloud Storage রেফারেন্স তৈরি করুন।

আপনার Cloud Storage বালতির রুটে চাইল্ড পাথ যোগ করে আপনি রেফারেন্স তৈরি করতে পারেন অথবা আগে থেকে থাকা gs:// বা https:// URL থেকে রেফারেন্স তৈরি করতে পারেন যা 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. URL থেকে ডাউনলোড করা
  2. বাইট অ্যারেতে ডাউনলোড করা
  3. স্ট্রিমের মাধ্যমে ডাউনলোড করা
  4. লোকাল ফাইলে ডাউনলোড করা

আপনি কীভাবে গেমের ডেটা ব্যবহার করতে চান তার উপর নির্ভর করে ফাইল রিট্রিভ করার পদ্ধতি নির্ধারণ করা হবে।

URL থেকে ডাউনলোড করা

আপনি Unity-র WWW বা UnityWebRequest সহ কোনও URL ব্যবহার করতে চাইলে, আপনি GetDownloadUrlAsync() কল করে কোনও ফাইলের জন্য ডাউনলোড URL পেতে পারেন।

// 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!");
    }
});

স্ট্রিমের মাধ্যমে ডাউনলোড করা

স্ট্রিম সহ ফাইল ডাউনলোড করলে, সেটি লোড হওয়ার সাথে সাথেই ডেটা প্রসেস করতে পারবেন। এর ফলে ডাউনলোড করা কন্টেন্ট ম্যানেজ করার সময় আপনি সর্বাধিক নমনীয়তা পাবেন। Call GetStreamAsync() এবং প্রথম আর্গুমেন্ট হিসেবে আপনার নিজস্ব স্ট্রিম প্রসেসর পাস করুন। এই ডেলিগেটকে ব্যাকগ্রাউন্ড থ্রেডে কল করা হবে, যেখানে একটি স্ট্রিম থাকে যা আপনাকে লেটেন্সি ইনটেনসিভ অপারেশন বা ক্যালকুলেশন পারফর্ম করতে দেয়, যেমন ডিস্কে কন্টেন্ট সেভ করা।

// 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> ইন্টারফেস অনুসরণ করে। প্রগ্রেস টিকের জন্য কলব্যাক হিসেবে আপনার নিজস্ব Action<T> প্রদান করতে, আপনি StorageProgress ক্লাসের একটি ইনস্ট্যান্স ব্যবহার করতে পারেন।

// 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-এ সেভ করা ফাইলের জন্য আপনি মেটাডেটা পেতে ও আপডেট করতে পারবেন।