ফায়ারবেস রিমোট কনফিগারেশনের মাধ্যমে আপনার ইউনিটি গেমকে ইন্সট্রুমেন্ট করুন

1. ভূমিকা

আপনি আপনার অ্যাপে কী-মান জোড়া, যা প্যারামিটার নামেও পরিচিত, সংজ্ঞায়িত করতে Firebase Remote Config ব্যবহার করতে পারেন এবং ক্লাউডে তাদের মান আপডেট করতে পারেন, যার ফলে আপনি অ্যাপ আপডেট বিতরণ না করেই আপনার অ্যাপের চেহারা এবং আচরণ পরিবর্তন করতে পারবেন।

আপনি এই নতুন কার্যকারিতাটি একটি নমুনা গেম, MechaHamster: Level Up with Firebase Edition- এ যুক্ত করবেন। এই নমুনা গেমটি ক্লাসিক Firebase গেম MechaHamster-এর একটি নতুন সংস্করণ যা এর বেশিরভাগ অন্তর্নির্মিত Firebase কার্যকারিতা সরিয়ে দেয়, যা আপনাকে তাদের জায়গায় Firebase-এর নতুন ব্যবহার বাস্তবায়নের সুযোগ দেয়।

আপনার অ্যাপটি যাতে ইচ্ছামতো আচরণ করে তা নিশ্চিত করার জন্য, আপনাকে নমুনা গেম কোডে মানগুলির জন্য ডিফল্ট কনফিগারেশন সেট করতে হবে এবং এই মানগুলি Firebase কনসোলে রিমোট কনফিগারেশনে সেট করা মান দ্বারা ওভাররাইড করা যেতে পারে।

তুমি কি শিখবে

  • ক্লাউডে রিমোট কনফিগ মান কীভাবে সেট করবেন এবং সেগুলি পুনরুদ্ধার করবেন
  • পুনরুদ্ধারকৃত মানগুলি স্বয়ংক্রিয়ভাবে ব্যবহার করার জন্য আপনার ইউনিটি সি# কোডটি কীভাবে ব্যবহার করবেন
  • যৌগিক মান/বস্তুকে JSON মান হিসেবে কীভাবে সংরক্ষণ, উপকরণ এবং ওভাররাইড করতে হয়
  • বিভিন্ন ব্যবহারকারী গোষ্ঠীর জন্য বিভিন্ন মান ভেরিয়েন্ট পরিবেশন করার জন্য রিমোট কনফিগ শর্তগুলি কীভাবে ব্যবহার করবেন

তোমার যা লাগবে

  • iOS এবং/অথবা Android বিল্ড সাপোর্ট সহ ইউনিটি 2019.1.0f1 বা উচ্চতর
  • গেমটি তৈরি এবং চালানোর জন্য একটি বাস্তব অ্যান্ড্রয়েড/আইওএস ডিভাইস অথবা একটি সিমুলেটর/এমুলেটর

2. আপনার উন্নয়ন পরিবেশ সেট আপ করুন

নিম্নলিখিত বিভাগগুলিতে বর্ণনা করা হয়েছে কিভাবে Level Up with Firebase কোড ডাউনলোড করবেন, Unity তে খুলবেন এবং একটি Firebase প্রকল্প যোগ করবেন। এই Level Up with Firebase নমুনা গেমটি আরও বেশ কয়েকটি Firebase + Unity কোডল্যাব দ্বারা ব্যবহৃত হয়, তাই আপনি ইতিমধ্যেই এই বিভাগের কাজগুলি সম্পন্ন করে থাকতে পারেন। যদি তাই হয়, তাহলে আপনি এই পদক্ষেপগুলি এড়িয়ে যেতে পারেন এবং নমুনা গেম কোডে Remote Config যোগ করতে Add Firebase SDKs for Unity-এ এগিয়ে যেতে পারেন।

কোডটি ডাউনলোড করুন

কমান্ড লাইন থেকে এই কোডল্যাবের GitHub রিপোজিটরিটি ক্লোন করুন:

git clone https://github.com/firebase/level-up-with-firebase

বিকল্পভাবে, যদি আপনার গিট ইনস্টল না থাকে, তাহলে আপনি রিপোজিটরিটি একটি জিপ ফাইল হিসেবে ডাউনলোড করতে পারেন।

ইউনিটি এডিটরে Firebase দিয়ে লেভেল আপ খুলুন

  1. ইউনিটি হাব চালু করুন এবং প্রজেক্টস ট্যাব থেকে, Open এর পাশের ড্রপ-ডাউন তীরটিতে ক্লিক করুন।
  2. "ডিস্ক থেকে প্রকল্প যোগ করুন" এ ক্লিক করুন।
  3. কোডটি ধারণকারী ডিরেক্টরিতে নেভিগেট করুন, এবং তারপর OK ক্লিক করুন।
  4. যদি অনুরোধ করা হয়, তাহলে ব্যবহার করার জন্য একটি ইউনিটি এডিটর সংস্করণ এবং আপনার লক্ষ্য প্ল্যাটফর্ম (অ্যান্ড্রয়েড বা iOS) নির্বাচন করুন।
  5. প্রকল্পের নাম, level-up-with-firebase এ ক্লিক করুন, এবং প্রকল্পটি ইউনিটি এডিটরে খুলবে।
  6. যদি আপনার এডিটর স্বয়ংক্রিয়ভাবে এটি না খোলে, তাহলে ইউনিটি এডিটরের প্রজেক্ট ট্যাবে Assets > Hamster-MainGameScene খুলুন।

ইউনিটি ইনস্টল এবং ব্যবহার সম্পর্কে আরও তথ্যের জন্য, ওয়ার্কিং ইন ইউনিটি দেখুন।

৩. আপনার ইউনিটি প্রজেক্টে ফায়ারবেস যোগ করুন

একটি ফায়ারবেস প্রকল্প তৈরি করুন

  1. আপনার গুগল অ্যাকাউন্ট ব্যবহার করে ফায়ারবেস কনসোলে সাইন ইন করুন।
  2. একটি নতুন প্রকল্প তৈরি করতে বোতামটি ক্লিক করুন, এবং তারপর একটি প্রকল্পের নাম লিখুন (উদাহরণস্বরূপ, LevelUpWithFirebase )।
  3. চালিয়ে যান ক্লিক করুন।
  4. যদি অনুরোধ করা হয়, তাহলে Firebase শর্তাবলী পর্যালোচনা করুন এবং গ্রহণ করুন, এবং তারপর Continue এ ক্লিক করুন।
  5. (ঐচ্ছিক) Firebase কনসোলে ("Gemini in Firebase" নামে পরিচিত) AI সহায়তা সক্ষম করুন।
  6. এই কোডল্যাবের জন্য, Firebase পণ্যগুলি সর্বোত্তমভাবে ব্যবহার করার জন্য আপনার Google Analytics প্রয়োজন, তাই Google Analytics বিকল্পের জন্য টগল চালু রাখুন। Google Analytics সেট আপ করতে অন-স্ক্রিন নির্দেশাবলী অনুসরণ করুন।
  7. Create project এ ক্লিক করুন, আপনার province করার জন্য অপেক্ষা করুন, এবং তারপর Continue এ ক্লিক করুন।

Firebase-এ আপনার অ্যাপ নিবন্ধন করুন

  1. Firebase কনসোলটি খুলুন এবং প্রকল্পের ওভারভিউ পৃষ্ঠার কেন্দ্র থেকে, সেটআপ ওয়ার্কফ্লো চালু করতে ইউনিটি আইকনে ক্লিক করুন অথবা, যদি আপনি ইতিমধ্যেই আপনার Firebase প্রকল্পে একটি অ্যাপ যোগ করে থাকেন, তাহলে প্ল্যাটফর্ম বিকল্পগুলি প্রদর্শন করতে অ্যাপ যোগ করুন এ ক্লিক করুন।
  2. অ্যাপল (iOS) এবং অ্যান্ড্রয়েড বিল্ড টার্গেট উভয়ই নিবন্ধন করতে নির্বাচন করুন।
  3. আপনার ইউনিটি প্রজেক্টের প্ল্যাটফর্ম-নির্দিষ্ট আইডি(গুলি) লিখুন। এই কোডল্যাবের জন্য, নিম্নলিখিতগুলি লিখুন:
  4. ঐচ্ছিকভাবে, আপনার ইউনিটি প্রকল্পের প্ল্যাটফর্ম-নির্দিষ্ট ডাকনাম(গুলি) লিখুন।
  5. রেজিস্টার অ্যাপে ক্লিক করুন এবং ডাউনলোড কনফিগারেশন ফাইল বিভাগে যান।
  6. আপনি যে বিল্ড টার্গেটটি প্রথমবার করেননি তার জন্য প্রক্রিয়াটি পুনরাবৃত্তি করুন।

ফায়ারবেস কনফিগারেশন ফাইল যোগ করুন

Register app এ ক্লিক করার পর, আপনাকে দুটি কনফিগারেশন ফাইল ডাউনলোড করতে বলা হবে (প্রতিটি বিল্ড টার্গেটের জন্য একটি কনফিগারেশন ফাইল)। Firebase এর সাথে সংযোগ স্থাপনের জন্য আপনার Unity প্রকল্পের এই ফাইলগুলিতে Firebase মেটাডেটা প্রয়োজন।

  1. উপলব্ধ উভয় কনফিগারেশন ফাইল ডাউনলোড করুন:
    • অ্যাপল (iOS)-এর জন্য : GoogleService-Info.plist ডাউনলোড করুন।
    • অ্যান্ড্রয়েডের জন্য : google-services.json ডাউনলোড করুন।
  2. আপনার ইউনিটি প্রজেক্টের প্রজেক্ট উইন্ডোটি খুলুন, তারপর উভয় কনফিগারেশন ফাইলই অ্যাসেটস ফোল্ডারে সরান।
  3. ফায়ারবেস কনসোলে ফিরে, সেটআপ ওয়ার্কফ্লোতে, পরবর্তী ক্লিক করুন এবং ইউনিটির জন্য ফায়ারবেস SDK যোগ করুন।

দ্রষ্টব্য: আপনি আপনার প্রোজেক্টের সাধারণ সেটিংস খুলে, আপনার অ্যাপস বিভাগে স্ক্রোল করে এবং তারপর পছন্দসই কনফিগারেশন ফাইলের জন্য ডাউনলোড বোতামে ক্লিক করে পরবর্তী সময়ে এই ফাইলগুলি পুনরায় ডাউনলোড করতে পারেন।

ইউনিটির জন্য ফায়ারবেস SDK যোগ করুন

  1. Firebase কনসোলে Firebase Unity SDK ডাউনলোড করুন -এ ক্লিক করুন।
  2. সুবিধাজনক কোথাও SDK আনজিপ করুন।
  3. আপনার ওপেন ইউনিটি প্রজেক্টে, Assets > Import Package > Custom Package এ নেভিগেট করুন।
  4. প্যাকেজ আমদানি করুন ডায়ালগে, আনজিপ করা SDK ধারণকারী ডিরেক্টরিতে যান, FirebaseAnalytics.unitypackage নির্বাচন করুন, এবং তারপর Open এ ক্লিক করুন।
  5. প্রদর্শিত ইমপোর্ট ইউনিটি প্যাকেজ ডায়ালগ থেকে, ইমপোর্ট এ ক্লিক করুন।
  6. নিম্নলিখিত দুটি প্যাকেজ আমদানি করতে পূর্ববর্তী পদক্ষেপগুলি পুনরাবৃত্তি করুন:
    • FirebaseRemoteConfig.unitypackage
    • FirebaseCrashlytics.unitypackage
      Crashlytics হল একটি হালকা, রিয়েলটাইম ক্র্যাশ রিপোর্টার যা আপনার অ্যাপের মান নষ্ট করে এমন স্থিতিশীলতার সমস্যাগুলি ট্র্যাক, অগ্রাধিকার এবং সমাধান করতে সাহায্য করে। যদি আপনি আগে এটি ব্যবহার না করে থাকেন, তাহলে Crashlytics Learning Pathway for Unity সম্পূর্ণ করার কথা বিবেচনা করুন।
  7. Firebase কনসোলে ফিরে যান এবং সেটআপ ওয়ার্কফ্লোতে, Next এ ক্লিক করুন।

ইউনিটি প্রকল্পে ফায়ারবেস SDK যোগ করার বিষয়ে আরও তথ্যের জন্য, অতিরিক্ত ইউনিটি ইনস্টলেশন বিকল্পগুলি দেখুন।

৪. রিমোট কনফিগ ডিফল্ট সেট করুন এবং নতুন মান আনুন

এই কোডল্যাবে, আপনি এমন অবজেক্ট আপডেট করবেন যা কোডে সংজ্ঞায়িত মান ব্যবহার করে অথবা ইউনিটি এডিটরে সিরিয়ালাইজ করা হয় রিমোট কনফিগের সাথে ইন্সট্রুমেন্টেড মান ব্যবহার করার জন্য। আপনি SetDefaultsAsync ব্যবহার করে প্রতিটি প্যারামিটারের জন্য ডিফল্ট মান কনফিগার করবেন যাতে আপনার অ্যাপটি রিমোট কনফিগ ব্যাকএন্ডের সাথে সংযোগ স্থাপনের আগে ইচ্ছামত আচরণ করে। আপনার অ্যাপটি রিমোট কনফিগ থেকে নতুন মান এনে এবং কোডে ব্যবহারযোগ্য করার জন্য সেগুলিকে সক্রিয় করে আপ-টু-ডেট থাকবে।

রিমোট কনফিগ থেকে নতুন মান আনতে, Assets/Hamster/Scripts/MainGame.cs ফাইলে ইতিমধ্যেই বেশ কিছু অবাস্তবায়িত পদ্ধতি রয়েছে যা সম্পূর্ণ করতে হবে।

  1. MainGame.cs এ নিম্নলিখিত using বিবৃতি যোগ করুন:
    using Firebase.Crashlytics;
    using Firebase.Extensions;
    using Firebase.RemoteConfig;
    
    Firebase.Extensions মডিউলে C# Tasks API- এর কিছু এক্সটেনশন রয়েছে যা কলব্যাকের মাধ্যমে প্রাথমিককরণ প্রক্রিয়া পরিচালনাকে সহজ করতে সাহায্য করবে।
  2. আপনার MainGame.cs Start() পদ্ধতিতে Firebase initialization যোগ করুন, বিদ্যমান InitializeCommonDataAndStartGame() পদ্ধতিটি বর্তমানে অবাস্তবায়িত পদ্ধতি, InitializeFirebaseAndStartGame() দিয়ে প্রতিস্থাপন করে:
    void Start()
    {
       Screen.SetResolution(Screen.width / 2, Screen.height / 2, true);
       InitializeFirebaseAndStartGame();
    }
    
  3. MainGame.cs এ, InitializeFirebaseAndStartGame() খুঁজুন। একটি অ্যাপ ভেরিয়েবল ঘোষণা করুন এবং পদ্ধতির বাস্তবায়নটি নিম্নরূপ ওভাররাইট করুন:
    public Firebase.FirebaseApp app = null;
    
    // Begins the firebase initialization process and afterwards, opens the main menu.
    private void InitializeFirebaseAndStartGame()
    {
       Firebase.FirebaseApp.CheckAndFixDependenciesAsync()
       .ContinueWithOnMainThread(
          previousTask =>
          {
             var dependencyStatus = previousTask.Result;
             if (dependencyStatus == Firebase.DependencyStatus.Available) {
             // Create and hold a reference to your FirebaseApp,
             app = Firebase.FirebaseApp.DefaultInstance;
             // Set the recommended Crashlytics uncaught exception behavior.
             Crashlytics.ReportUncaughtExceptionsAsFatal = true;
             SetRemoteConfigDefaults();
             } else {
             UnityEngine.Debug.LogError(
                $"Could not resolve all Firebase dependencies: {dependencyStatus}\n" +
                "Firebase Unity SDK is not safe to use here");
             }
          });
    }
    
  4. ফায়ারবেস ইনিশিয়ালাইজেশন সফল হলে SetRemoteConfigDefaults অ্যাপ-মধ্যস্থ ডিফল্ট মান সেট করার জন্য কল করে। অবাস্তবায়িত SetRemoteConfigDefaults পদ্ধতিটি নিম্নলিখিত পদ্ধতি দিয়ে প্রতিস্থাপন করুন:
    private void SetRemoteConfigDefaults()
    {
       var defaults = new System.Collections.Generic.Dictionary < string, object > ();
       defaults.Add(
          Hamster.MapObjects.AccelerationTile.AccelerationTileForceKey,
          Hamster.MapObjects.AccelerationTile.AccelerationTileForceDefault);
       defaults.Add(
          Hamster.States.MainMenu.SubtitleOverrideKey,
          Hamster.States.MainMenu.SubtitleOverrideDefault);
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       remoteConfig.SetDefaultsAsync(defaults).ContinueWithOnMainThread(
          previousTask =>
          {
             FetchRemoteConfig(InitializeCommonDataAndStartGame);
          }
       );
    }
    

৫. নতুন মান আনুন এবং সক্রিয় করুন (প্রয়োজন অনুসারে)

আমাদের এখন বিদ্যমান FetchRemoteConfig পদ্ধতিটি সম্পূর্ণ করতে হবে। এটি onFetchAndActivateSuccessful নামক একটি কলব্যাক প্যারামিটার ব্যবহার করে Remote Config এর পদ্ধতি FetchAsync (যা Remote Config থেকে নতুন মান আনে) এবং ActivateAsync (যা কোডে উপলব্ধ করার জন্য প্রাপ্ত মানগুলিকে সক্রিয় করে) এর সাথে কলগুলিকে চেইন করবে।

পূর্ববর্তী ধাপে আমরা যে স্টার্টআপ কোডটি যোগ করেছি তাতে FetchRemoteConfig InitializeCommonDataAndStartGame এর সাথে কলব্যাক হিসেবে কল করা হয়েছে যাতে সিকোয়েন্সের শেষে গেমটি শুরু করা যায়। আপনি FetchRemoteConfig এ বিকল্প কলব্যাক পাস করতে পারেন যাতে বিভিন্ন ফলাফল সহ ফেচ শুরু করা যায়। একটি উদাহরণ (যা আপনি পরে বাস্তবায়ন করবেন) হল এমন একটি পদ্ধতি পাস করা যা নতুন UI মেনু খোলে, যা রিমোট কনফিগ মানের উপর নির্ভর করে। এর ফলে মেনুগুলি কেবল সেই মানগুলি আনা এবং সক্রিয় করার পরেই খুলবে।

  1. নিচের কোডটি FetchRemoteConfig এ পেস্ট করুন:
    public void FetchRemoteConfig(System.Action onFetchAndActivateSuccessful)
    {
       if(app==null)
       {
          Debug.LogError($"Do not use Firebase until it is properly initialized by calling {nameof(InitializeFirebaseAndStartGame)}.");
          return;
       }
    
       Debug.Log("Fetching data...");
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       remoteConfig.FetchAsync(System.TimeSpan.Zero).ContinueWithOnMainThread(
          previousTask=>
          {
             if (!previousTask.IsCompleted)
             {
             Debug.LogError($"{nameof(remoteConfig.FetchAsync)} incomplete: Status '{previousTask.Status}'");
             return;
             }
             ActivateRetrievedRemoteConfigValues(onFetchAndActivateSuccessful);
          });
    }
    
  2. এরপর, ActivateRetrievedRemoteConfigValues ​​পদ্ধতিটি সম্পূর্ণ করুন, যা একটি পাস-ইন কলব্যাক, onFetchAndActivateSuccessful গ্রহণ করে। অ্যাক্টিভেশন শেষ হলে, নির্দিষ্ট কলব্যাকটি আহ্বান করা হবে:
    private void ActivateRetrievedRemoteConfigValues(System.Action onFetchAndActivateSuccessful)
    {
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       var info = remoteConfig.Info;
       if(info.LastFetchStatus == LastFetchStatus.Success)
       {
          remoteConfig.ActivateAsync().ContinueWithOnMainThread(
             previousTask =>
             {
             Debug.Log($"Remote data loaded and ready (last fetch time {info.FetchTime}).");
             onFetchAndActivateSuccessful();
             });
       }
    }
    

যখন SetRemoteConfigDefaults দ্বারা initialization প্রেক্ষাপট থেকে ডাউনস্ট্রিম কল করা হয়, তখন ActivateRetrievedRemoteConfigValues ​​মূল মেনু খুলে গেমটি শুরু করার জন্য পূর্ববর্তী সূচনা বিন্দু, InitializeCommonDataAndStartGame কে কল করে।

৬. একটি রিমোট কনফিগার লোডিং কৌশল সেট আপ করুন

অ্যাপ ব্যবহারের সময় অন্য সময়ে মান আনতে এবং সক্রিয় করতে, আপনাকে এই ফাংশনগুলিকে আবার কল করতে হবে এবং যদি কোনও বস্তু মানগুলি ক্যাশে করে থাকে, তবে তাদের আপডেট করার জন্য অবহিত করতে হবে। রিমোট কনফিগ মানগুলি পুনরায় আনার জন্য একটি কৌশল তৈরি করতে, কখন নতুন মানগুলির প্রয়োজন হবে এবং ব্যবহারের সময় পরিবর্তন এড়াতে কখন নতুন মানগুলি আনা এবং সক্রিয়করণ শুরু করতে হবে তা বিবেচনা করুন।

বর্তমানে বাস্তবায়িত হিসাবে, অ্যাপটি শুরু হওয়ার সাথে সাথে রিমোট কনফিগ মানগুলি আনা এবং সক্রিয় করা হয়। মেনু পরিবর্তনের সময় আনা লুকানো যেতে পারে এবং ট্রানজিশনের সময় ইন্টারঅ্যাকশন ব্লক করা যেতে পারে। এছাড়াও, এটি প্রায়শই নতুন মান পাওয়ার জন্য সবচেয়ে প্রাসঙ্গিক সময়, কারণ মেনু অবস্থার পরিবর্তন প্রায়শই প্লেয়ারটি "কোথায়" যাচ্ছে তা জানতে এবং একটি মান ব্যবহার করা হবে কিনা তা ভবিষ্যদ্বাণী করতে ব্যবহার করা যেতে পারে।

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

অ্যাপ স্টার্ট-আপের অংশ হিসেবে প্রাথমিক লোডের সাথে, প্রধান মেনু দিয়ে যাওয়া যেকোনো মেনু নেভিগেশন এইগুলির মধ্যে প্রথমটি দ্বারা পরিচালিত হবে, অন্যদিকে লেভেল সিলেক্ট মেনুর যেকোনো পুনঃপ্রবেশও রিফ্রেশের কারণ হবে। লেভেল সিলেক্ট মেনুতে প্রাথমিক প্রবেশ কোনও ব্যাপার নয় কারণ এটি শুধুমাত্র প্রধান মেনু থেকে অ্যাক্সেস করা যেতে পারে এবং তাই ইতিমধ্যেই কভার করা হয়েছে।

অ্যাপটিতে এটি সক্ষম করতে, প্রধান মেনুতে প্রাসঙ্গিক পদ্ধতিগুলি সম্পূর্ণ করুন এবং নির্বাচিত ফাইলগুলিকে স্তর করুন, যা FetchAsync এবং ActivateAsync সম্পূর্ণ না হওয়া পর্যন্ত UI প্রদর্শনকে ব্লক করবে:

  1. Assets/Hamster/Scripts/States/MainMenu.cs খুলুন এবং বিদ্যমান Resume পদ্ধতিটি নিম্নলিখিত দিয়ে প্রতিস্থাপন করুন:
    public override void Resume(StateExitValue results) {
       CommonData.mainGame.SelectAndPlayMusic(CommonData.prefabs.menuMusic, true);
       CommonData.mainGame.FetchRemoteConfig(InitializeUI);
    }
    
  2. ফাইলটি সংরক্ষণ করুন।
  3. Assets/Hamster/Scripts/States/BaseLevelSelect.cs খুলুন, বিদ্যমান Resume পদ্ধতিটি নিম্নলিখিত দিয়ে প্রতিস্থাপন করুন:
    public override void Resume(StateExitValue results) {
       CommonData.mainGame.FetchRemoteConfig(ShowUI);
    }
    
  4. ফাইলটি সংরক্ষণ করুন।

৭. ফেচ আচরণ ডিবাগ/যাচাই করুন

এই মুহুর্তে, একটি ডায়াগনস্টিক/বৈধতা পরীক্ষা করা উপকারী। নিম্নলিখিত পদ্ধতিটি আপনাকে আপনার অ্যাপটি ম্যানুয়ালি পরীক্ষা করার অনুমতি দেবে এবং এটি কীভাবে/কিনা রিমোট কনফিগ মানগুলি আনে এবং সক্রিয় করে তা পরীক্ষা করতে দেবে।

তথ্যগুলি আপনার সিমুলেটর, ডিভাইস বা এডিটর লগের অংশ হিসাবে মুদ্রিত হবে। iOS এর জন্য, আপনি Xcode এ ডিভাইস এবং সিমুলেটর লগ দেখতে পারেন। Android এর জন্য, adb logcat চালিয়ে লগগুলি দেখতে পারেন। যদি আপনি এডিটরে Play টিপে Unity তে কোডটি চালান, তাহলে Console ট্যাবে লগগুলি প্রদর্শিত হবে।

  1. অ্যাপটি পুনর্নির্মাণ করুন এবং চালান (এডিটরে, একটি ডিভাইস বা সিমুলেটর ব্যবহার করে)।
  2. গেমের মেইন মেনু প্রদর্শিত হওয়ার পর, আপনার গেমের লগ আউটপুট পর্যালোচনা করুন, যাতে Debug.Log in FetchRemoteConfig এবং ActivateRetrievedRemoteConfigValues ​​দ্বারা তৈরি লগ থাকা উচিত। এগুলিতে "ডেটা আনা হচ্ছে..." এবং "রিমোট ডেটা লোডেড এবং প্রস্তুত" বার্তাগুলি দেখানো উচিত। এই বার্তাগুলির শুরুতে টাইমস্ট্যাম্পগুলি লক্ষ্য করুন।
  3. গেমটিতে, লাইসেন্স টিপুন।
  4. ঠিক আছে টিপুন।
  5. গেমের প্রধান মেনু প্রদর্শিত হওয়ার জন্য অপেক্ষা করুন।
  6. আপনার গেমের লগ আউটপুট পর্যালোচনা করুন, যা আগের ধাপের মতোই হওয়া উচিত, নতুন টাইমস্ট্যাম্প দিয়ে (যে সিস্টেম ঘড়িতে আপনি গেমটি চালাচ্ছেন সেখানে সেট করা সময়ের সাথে মিল রেখে)।
  7. গেমটিতে, Play টিপুন।
  8. "লেটস রোল" টিপুন।
  9. কীবোর্ড তীরচিহ্ন ব্যবহার করে বলটিকে লক্ষ্যস্থলে নিয়ে যান, যা একটি লেভেল কমপ্লিট মেনু খুলবে।
  10. প্রেস লেভেল
  11. লেভেল সিলেক্ট মেনু লোড হওয়া পর্যন্ত অপেক্ষা করুন।
  12. আপনার গেমের লগ আউটপুট আবার পর্যালোচনা করুন। এটি আগের ধাপগুলির লগ বার্তাগুলির সাথে মিলিত হওয়া উচিত, নতুন টাইমস্ট্যাম্পগুলির সাথে (আপনি যেখানে গেমটি চালাচ্ছেন সেই সিস্টেম ঘড়িতে সেট করা সময়ের সাথে মিলিত হওয়া)।

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

যদি মেনু লোড করার প্রাথমিক লগগুলি দেখা যায়, কিন্তু পরবর্তীগুলির মধ্যে একটিতে না দেখা যায়, তাহলে Assets/Hamster/Scripts/States/MainMenu.cs এবং Assets/Hamster/Scripts/States/BaseLevelSelect.csResume পদ্ধতিগুলি অনুসন্ধান/পুনরায় বাস্তবায়ন করুন।

৮. আপনার কোডটি ইন্সট্রুমেন্ট করুন

এখন যেহেতু আপনি SetDefaultsAsync() তে ইন-অ্যাপ প্যারামিটার মান কনফিগার করেছেন এবং FetchAsync() এবং ActivateAsync() এর সাথে সবচেয়ে হালনাগাদ সংস্করণগুলি উপলব্ধ করেছেন, আপনি কোডে সেই মানগুলি উল্লেখ করবেন এবং ব্যবহার করবেন।

রিমোট কনফিগ ব্যাকএন্ডে মান সেট করার পরে, সেগুলি আনুন এবং সক্রিয় করুন ( অথবা উভয়ই একবারে করুন ), সেই মানগুলি আপনার অ্যাপে উপলব্ধ হবে। এই মানগুলি ব্যবহার করতে, GetValue(string key ) কল করুন এবং একটি প্যারামিটার কী একটি আর্গুমেন্ট হিসাবে নির্বাচন করুন। এটি একটি ConfigValue ফেরত দেয়, যার বিভিন্ন সমর্থিত প্রকারের মান অ্যাক্সেস করার বৈশিষ্ট্য রয়েছে: string , bool , long , double । এই প্রকল্পে এবং বেশিরভাগ গেমিং ব্যবহারের ক্ষেত্রে, আপনাকে শেষ দুটি প্রকারকে আরও ইডিওম্যাটিক int এবং float এ কাস্ট করতে হবে। এই রূপান্তরগুলি সমস্যা সৃষ্টি না করে তা নিশ্চিত করার জন্য, নিশ্চিত করুন যে রিমোট কনফিগ-এ সেট করা প্রাথমিক মানগুলি আপনার অ্যাপ কোডে আপনি যে ধরণের ব্যবহার করবেন তার বৈধ পরিসরের মধ্যে রয়েছে।

  1. নিম্নলিখিত ফাইলগুলির উপরে using Firebase.RemoteConfig; রিমোট কনফিগ আমদানি করুন:
    • Assets/Hamster/Scripts/States/MainMenu.cs
    • Assets/Hamster/Scripts/MapObjects/AccelerationTile.cs
  2. AccelerationTile.cs এর Start পদ্ধতিটি প্রতিস্থাপন করুন:
    private void Start() {
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       Acceleration = (float)remoteConfig.GetValue(AccelerationTileForceKey).DoubleValue;
    }
    
    এই পরিবর্তনের মাধ্যমে, ত্বরণ টাইল দ্বারা প্রদত্ত বলের পরিমাণ রিমোট কনফিগ থেকে প্রাপ্ত বলের পরিমাণের সাথে পরিবর্তিত হবে।
  3. MainMenu.cs এর InitializeUI পদ্ধতির মূল অংশ সম্পাদনা করুন:
    private void InitializeUI() {
       if (menuComponent == null) {
          menuComponent = SpawnUI<Menus.MainMenuGUI>(StringConstants.PrefabMainMenu);
       }
    
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       var subtitleOverride = JsonUtility.FromJson<Menus.MainMenuGUI.SubtitleOverride>(
          remoteConfig.GetValue(SubtitleOverrideKey).StringValue);
       // Only sets values if all fields of the override are non-default.
       if(subtitleOverride != null && subtitleOverride.IsValidOverride())
       {
          menuComponent.MenuSubtitleText.text = subtitleOverride.text;
          menuComponent.MenuSubtitleText.fontSize = subtitleOverride.fontSize;
          menuComponent.MenuSubtitleText.color = subtitleOverride.textColor;
       }
       ShowUI();
    }
    
    এখানে, subtitleOverride প্রধান মেনু স্ক্রিনে সাবটাইটেল পরিবর্তন করতে সেট করা আছে যদি ক্লাউডে এর সমস্ত ক্ষেত্র তাদের ধরণের ডিফল্ট মান ব্যতীত অন্য মান হিসাবে সেট করা থাকে।

9. দূরবর্তীভাবে প্যারামিটার মান সেট করুন

এখন আপনার অ্যাপটি সম্পূর্ণরূপে ইন্সট্রুমেন্টেড, আপনি রিমোট কনফিগ সার্ভারে প্যারামিটার এবং মান কনফিগার করতে প্রস্তুত। এই কোডল্যাবে, আমরা Firebase কনসোল ব্যবহার করে এটি সেট আপ করব।

  1. Firebase কনসোলে , আপনার প্রকল্পটি খুলুন।
  2. রিমোট কনফিগ ড্যাশবোর্ড দেখতে মেনু থেকে রিমোট কনফিগ নির্বাচন করুন।
  3. আপনার অ্যাপে সংজ্ঞায়িত এবং পরবর্তী টেবিলে তালিকাভুক্ত প্রতিটি প্যারামিটারের জন্য, Add parameter এ ক্লিক করুন, প্যারামিটারের নাম (কী) পেস্ট করুন, টেবিলে তালিকাভুক্ত ডেটা টাইপ নির্বাচন করুন, Use in-app default অক্ষম করুন এবং নতুন ডিফল্ট মান পেস্ট করুন:

    প্যারামিটারের নাম (কী)

    ডেটা টাইপ

    ডিফল্ট মান

    ত্বরণ_টাইল_বল

    সংখ্যা

    ১০০

    সাবটাইটেল_ওভাররাইড

    JSON সম্পর্কে

    {"text":"We overwrote the subtitle","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}

    Remote Config Parameter editor with\nacceleration_tile_force populated
  4. আপনার পরিবর্তনগুলি সংরক্ষণ করতে সংরক্ষণ করুন ক্লিক করুন।
  5. নতুন কনফিগারেশন প্রকাশ করতে এবং আপনার গেমে নতুন মানগুলি উপলব্ধ করতে প্রকাশ করুন- এ ক্লিক করুন।
  6. এই রিমোট প্যারামিটারগুলি সেট করার পরে আপনার অ্যাপটি আবার চালান এবং লক্ষ্য করুন কিভাবে তারা মূল ডিফল্টগুলিকে ওভাররাইড করে। Mechahamster main screen with Debug\nMenu enabled

১০. ভেরিয়েন্ট পরিবেশন করার জন্য রিমোট কনফিগ শর্ত ব্যবহার করুন

ব্যবহারকারীরা কোন ভাষায় কথা বলেন, কোথায় থাকেন, দিনের সময়, অথবা তারা কোন প্ল্যাটফর্ম ব্যবহার করেন তার উপর ভিত্তি করে আপনি তাদের জন্য অ্যাপের অভিজ্ঞতা প্রদান করতে চাইতে পারেন। রিমোট কনফিগ শর্তাবলী আপনাকে ব্যবহারকারীদের বিভিন্ন মান (যাকে ভেরিয়েন্ট বলা হয়) পরিবেশন করার জন্য পৃথকভাবে বা সংমিশ্রণে এই এবং অন্যান্য বৈশিষ্ট্যগুলি ব্যবহার করার ক্ষমতা দেয়।

কন্ডিশনের একটি সাধারণ ব্যবহার হল iOS এবং Android প্ল্যাটফর্মের মধ্যে কন্টেন্ট পরিবর্তন করা। কোন প্ল্যাটফর্মটি ব্যবহৃত হচ্ছে তার উপর নির্ভর করে subtitle_override এর জন্য একটি ভিন্ন মান পরিবেশন করে এমন একটি কন্ডিশন বাস্তবায়ন করতে নীচের পদক্ষেপগুলি অনুসরণ করুন।

  1. Firebase কনসোলে আপনার প্রোজেক্টের Remote Config ট্যাবটি খুলুন।
  2. subtitle_override.
  3. নীচের বাম কোণে, নতুন যোগ করুন ক্লিক করুন।
  4. প্রদর্শিত ড্রপ-ডাউনে, শর্তসাপেক্ষ মানের উপর কার্সার রাখুন এবং নতুন শর্ত তৈরি করুন ক্লিক করুন। Remote Config parameter editor:\nConditional value option
  5. যখন অনুরোধ করা হবে, তখন শর্তটির নাম দিন "iOS" যদি আপনি iOS টার্গেট করেন, অথবা "ios Android" যদি আপনি Android টার্গেট করেন। যদি আপনি উভয়কেই টার্গেট করেন, তাহলে এখানে কেবল একটি বেছে নিন এবং বাকি কোডল্যাবের জন্য এটি ব্যবহার করুন। Using the Define a new condition\ndialog to define an iOS-specific condition
  6. Applies if... এর অধীনে, Select... ড্রপ-ডাউনে ক্লিক করুন এবং Platform নির্বাচন করুন। তারপর, উপযুক্ত প্ল্যাটফর্মটি নির্বাচন করুন। Using the Define a new condition\neditor to select the iOS platform
  7. শর্ত তৈরি করতে শর্ত তৈরি করুন ক্লিক করুন। সম্পাদনা প্যারামিটার ডায়ালগটি পুনরায় প্রদর্শিত হবে এবং আপনি এখন একটি মান সেট করতে পারেন:
    • যদি আপনি অ্যান্ড্রয়েডকে টার্গেট করেন, তাহলে মানটি এতে সেট করুন:
      {"text":"Level Up Android Version","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}
      
    • যদি আপনি iOS টার্গেট করেন, তাহলে মানটি এতে সেট করুন:
      {"text":"Level Up iOS Version","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}
      
  8. আপনার পরিবর্তনগুলি সংরক্ষণ করতে সংরক্ষণ করুন ক্লিক করুন।
  9. নতুন কনফিগারেশন প্রকাশ করতে এবং আপনার গেমে নতুন মানগুলি উপলব্ধ করতে প্রকাশ করুন- এ ক্লিক করুন।

যদি আপনি গেমটি আবার তৈরি করে চালান, তাহলে আপনি গেমটির সাবটাইটেলটি তার প্ল্যাটফর্ম-নির্দিষ্ট ভেরিয়েন্ট দিয়ে প্রতিস্থাপন করতে দেখবেন।

১১. রিয়েল-টাইম আপডেট পেতে রিমোট কনফিগারেশন কনফিগার করুন

রিমোট কনফিগ এখন রিয়েল-টাইমে রিমোট কনফিগ টেমপ্লেটের আপডেট শুনতে এবং পরিচালনা করতে পারে। অ্যাপগুলি কনফিগারেশন পরিবর্তন এবং আপডেট হওয়া মানগুলি শুনতে নতুন রিয়েল-টাইম রিমোট কনফিগ API-তে সাবস্ক্রাইব করতে পারে।

কিভাবে এটা কাজ করে

আপডেট শোনার জন্য, আপনার অ্যাপকে এমন একটি পদ্ধতি প্রয়োগ করতে হবে যা OnConfigUpdateListener ইভেন্টে সাবস্ক্রাইব করে। এক বা একাধিক কনফিগারেশন আপডেট লিসেনারের সাবস্ক্রাইব করার সময়, নতুন রিমোট কনফিগ টেমপ্লেটগুলি স্বয়ংক্রিয়ভাবে আনা হবে, সাবস্ক্রাইব করা হ্যান্ডলারগুলিকে ডাকা হবে এবং প্রতিক্রিয়া হিসাবে যুক্তি সম্পাদন করতে ব্যবহার করা যেতে পারে, যেমন নতুন মানগুলি সক্রিয় করা এবং বাকি অ্যাপ্লিকেশনের জন্য সেগুলি উপলব্ধ করা।

রিয়েল-টাইম রিমোট কনফিগারেশন বাস্তবায়ন করুন

গেমটিতে এটি কীভাবে কাজ করে তা বোঝাতে, আপনার কোডে নিম্নলিখিত পরিবর্তনগুলি করুন।

একটি কনফিগ আপডেট হ্যান্ডলার তৈরি করুন

কনফিগ আপডেট ইভেন্ট ব্যবহারের প্রথম ধাপ হল এমন একটি পদ্ধতি তৈরি করা যা এটি শোনার জন্য সক্ষম। Assets/Hamster/Scripts/MainGame.cs এ নিম্নলিখিত পদ্ধতিটি রাখুন:

   void ActivateValuesOnConfigUpdate( object sender, ConfigUpdateEventArgs args)
   {
      if (args.Error != RemoteConfigError.None) {
         Debug.Log($"Error occurred while listening: {args.Error}");
         return;
      }

      Debug.Log("Updated keys: " + string.Join(", ", args.UpdatedKeys));
      // Activate all fetched values and then logs.
      var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
      remoteConfig.ActivateAsync().ContinueWithOnMainThread(
         task => {
            Debug.Log($"Keys from {nameof(ActivateValuesOnConfigUpdate)} activated.");
         });
   }

এই পদ্ধতিটি নতুন মানগুলি সক্রিয় করার সময় আপডেট হওয়া কীগুলির একটি তালিকা এবং লগে একটি সাফল্যের বার্তা প্রিন্ট করবে।

আপডেট ইভেন্টে সাবস্ক্রাইব করুন

ইভেন্টটি কল করার সময় ActivateValuesOnConfigUpdate সক্রিয় করার জন্য, ইভেন্টটিতে সাবস্ক্রাইব করুন। Assets/Hamster/Scripts/MainGame.csInitializeCommonDataAndStartGame() পদ্ধতিটি নিম্নলিখিতটি দিয়ে প্রতিস্থাপন করুন:

   void InitializeCommonDataAndStartGame()
   {
      CommonData.prefabs = FindObjectOfType<PrefabList>();
      CommonData.mainCamera = FindObjectOfType<CameraController>();
      CommonData.mainGame = this;

      Screen.orientation = ScreenOrientation.LandscapeLeft;

      musicPlayer = CommonData.mainCamera.GetComponentInChildren<AudioSource>();

      CommonData.gameWorld = FindObjectOfType<GameWorld>();

      // Set up volume settings.
      MusicVolume = PlayerPrefs.GetInt(StringConstants.MusicVolume, MaxVolumeValue);
      // Set the music to ignore the listeners volume, which is used for sound effects.
      CommonData.mainCamera.GetComponentInChildren<AudioSource>().ignoreListenerVolume = true;
      SoundFxVolume = PlayerPrefs.GetInt(StringConstants.SoundFxVolume, MaxVolumeValue);

      // Subscribes to on config update after first initial fetch and activate
      FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener += ActivateValuesOnConfigUpdate;

      stateManager.PushState(new States.MainMenu());
   }

নতুন লাইন ( += ActivateValuesOnConfigUpdate; দিয়ে শেষ) ইভেন্ট হ্যান্ডলারকে ইভেন্টে সাবস্ক্রাইব করে।

হ্যান্ডলারের মালিকানাধীন বস্তুটি ধ্বংস হয়ে গেলে আনসাবস্ক্রাইব করুন

নাল রেফারেন্স ত্রুটি প্রতিরোধ করার জন্য, যেসব পদ্ধতিতে ইভেন্ট সাবস্ক্রাইব করা হয়েছে, সেইসব বস্তুকে ধ্বংস হয়ে গেলে অবশ্যই সেই পদ্ধতিটি আনসাবস্ক্রাইব করতে হবে। Assets/Hamster/Scripts/MainGame.cs এ নিম্নলিখিত পদ্ধতিটি যোগ করুন:

   private void OnDestroy() 
   {
      FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener -= ActivateValuesOnConfigUpdate;
   }

নতুন কার্যকারিতা পরীক্ষা করুন

নতুন কার্যকারিতা যাচাই করতে, আপনার তৈরি অ্যাপটি ব্যবহার করে দেখুন। নিম্নলিখিত পদ্ধতির জন্য আপনাকে লগটি পড়তে হবে এবং একটি আসল ডিভাইস ব্যবহার করে ডিবাগ করতে হবে

acceleration_tile_force পরিবর্তন করুন এবং পর্যবেক্ষণ করুন

আপনার অ্যাপটি শুরু করার পরে, Firebase কনসোলের রিমোট কনফিগ বিভাগে :

  1. acceleration_tile_force এর পাশের সম্পাদনা বোতামটি টিপুন।

dc602d4db54e50a4.png সম্পর্কে

  1. মানটি '120' এ পরিবর্তন করুন এবং সংরক্ষণ করুন টিপুন।

fcbc1df848f88009.png সম্পর্কে

  1. পরিবর্তন প্রকাশ করুন বোতামে ক্লিক করুন।

3785c1e00e7a6359.png সম্পর্কে

  1. লগটি পরীক্ষা করুন।
  2. যদি আপনি "শুনতে গিয়ে ত্রুটি ঘটেছে" দিয়ে শুরু হয় এমন একটি লগ বার্তা দেখতে পান, তাহলে বাকি অংশটি পড়ুন এবং এটি যে ত্রুটি বার্তাটি প্রিন্ট করে তা দিয়ে ডিবাগ করার চেষ্টা করুন।
  3. যদি আপনি "আপডেট করা কী" দিয়ে শুরু হওয়া একটি লগ দেখতে পান, তাহলে আপনার অ্যাপটি পরিবর্তিত মানগুলি পেয়েছে।
  4. যদি আপনি এর কোনটিই না দেখেন, তাহলে আপনার বাকি লগগুলি দেখুন এবং তারপর Create a Config Update handler থেকে নির্দেশাবলী পুনরায় পর্যালোচনা করুন, পুনরায় পরীক্ষা করুন এবং কিছু ভুল আছে কিনা তা নির্ধারণ করতে লগগুলি পুনরায় পরীক্ষা করুন।

১২. অভিনন্দন!

আপনি রিমোট কনফিগ ব্যবহার করে গেমের মধ্যে থাকা মানগুলিকে দূরবর্তীভাবে নিয়ন্ত্রণ করেছেন, আপনার অ্যাপে সেগুলি এনে এবং বিভিন্ন ভেরিয়েন্ট পরিবেশন করার জন্য শর্তাবলী ব্যবহার করে!

আমরা যা কভার করেছি

  • রিমোট কনফিগ মান কীভাবে সেট এবং পুনরুদ্ধার করবেন
  • পুনরুদ্ধারকৃত মানগুলি ব্যবহার করার জন্য আপনার ইউনিটি সি# কোডটি কীভাবে ব্যবহার করবেন
  • যৌগিক মান/বস্তুকে JSON মান হিসেবে কীভাবে সংরক্ষণ, উপকরণ এবং ওভাররাইড করতে হয়
  • বিভিন্ন মান ভেরিয়েন্ট পরিবেশন করার জন্য রিমোট কনফিগ শর্তগুলি কীভাবে ব্যবহার করবেন

পরবর্তী পদক্ষেপ

একাধিক মান (শর্ত বা স্থানের কারণে) সহ একটি প্যারামিটার ব্যবহার করলে কোন অ্যাপ ইনস্ট্যান্স কোন মানগুলি অর্জন করে তার যুক্তি আরও ভালভাবে বুঝতে প্যারামিটার মান অগ্রাধিকার সম্পর্কে পড়ুন।