เริ่มต้นใช้งานการกำหนดค่าระยะไกลใน Unity

เลือกแพลตฟอร์ม: iOS+ Android Web Flutter Unity C++


คุณสามารถใช้ Firebase Remote Config เพื่อกำหนดพารามิเตอร์ในแอปและ อัปเดตค่าในระบบคลาวด์ ซึ่งจะช่วยให้คุณปรับเปลี่ยนรูปลักษณ์และ ลักษณะการทำงานของแอปได้โดยไม่ต้องเผยแพร่การอัปเดตแอป

ไลบรารี Remote Config ใช้เพื่อจัดเก็บค่าพารามิเตอร์เริ่มต้นในแอป ดึงค่าพารามิเตอร์ที่อัปเดตจากแบ็กเอนด์ Remote Config และควบคุม เวลาที่จะทำให้ค่าที่ดึงมาพร้อมใช้งานในแอป ดูข้อมูลเพิ่มเติมได้ที่ กลยุทธ์การโหลด Remote Config

คู่มือนี้จะแนะนำขั้นตอนการเริ่มต้นใช้งานและแสดงโค้ดตัวอย่าง ซึ่งทั้งหมดนี้พร้อมให้โคลนหรือดาวน์โหลดจากที่เก็บ firebase/quickstart-unity ใน GitHub

ขั้นตอนที่ 1: เพิ่ม Remote Config ลงในแอป

คุณต้องดำเนินการต่อไปนี้ก่อนจึงจะใช้ Remote Config, ได้

  • ลงทะเบียนโปรเจ็กต์ Unity และกำหนดค่าให้ใช้ Firebase

    • หากโปรเจ็กต์ Unity ใช้ Firebase อยู่แล้ว แสดงว่าโปรเจ็กต์ได้ลงทะเบียนและกำหนดค่าสำหรับ Firebase แล้ว

    • หากไม่มีโปรเจ็กต์ Unity คุณสามารถดาวน์โหลด แอปตัวอย่างได้

  • เพิ่ม Firebase Unity SDK (โดยเฉพาะ FirebaseRemoteConfig.unitypackage) ลงใน โปรเจ็กต์ Unity

โปรดทราบว่าการเพิ่ม Firebase ลงในโปรเจ็กต์ Unity เกี่ยวข้องกับงานทั้งใน Firebaseคอนโซลและในโปรเจ็กต์ Unity ที่เปิดอยู่ (เช่น คุณดาวน์โหลดไฟล์การกำหนดค่า Firebase จากคอนโซล แล้วย้าย ไฟล์เหล่านั้นไปยังโปรเจ็กต์ Unity)

ขั้นตอนที่ 2: ตั้งค่าพารามิเตอร์เริ่มต้นในแอป

คุณสามารถตั้งค่าพารามิเตอร์เริ่มต้นในแอปในRemote Config ออบเจ็กต์ เพื่อให้แอปทำงานตามที่ต้องการก่อนที่จะเชื่อมต่อกับ Remote Configแบ็กเอนด์ และเพื่อให้ค่าเริ่มต้นพร้อมใช้งานหากไม่ได้ ตั้งค่าไว้ในแบ็กเอนด์

หากต้องการดำเนินการนี้ ให้สร้างพจนานุกรมสตริงและป้อนข้อมูลด้วยคู่คีย์-ค่าที่แสดงค่าเริ่มต้นที่ต้องการเพิ่ม หากกำหนดค่าพารามิเตอร์แบ็กเอนด์ Remote Configไว้แล้ว คุณสามารถดาวน์โหลดไฟล์ที่ มีคู่คีย์-ค่าเหล่านี้และใช้ไฟล์ดังกล่าวเพื่อสร้างพจนานุกรมสตริงได้ ดูข้อมูลเพิ่มเติมได้ที่ ดาวน์โหลด Remote Configค่าเริ่มต้นของเทมเพลต

(ระบบจะแปลงพร็อพเพอร์ตี้ที่ไม่ใช่สตริงเป็นประเภทของพร็อพเพอร์ตี้เมื่อมีการเรียก SetDefaultsAsync())

System.Collections.Generic.Dictionary<string, object> defaults =
  new System.Collections.Generic.Dictionary<string, object>();

// These are the values that are used if we haven't fetched data from the
// server
// yet, or if we ask for values that the server doesn't have:
defaults.Add("config_test_string", "default local string");
defaults.Add("config_test_int", 1);
defaults.Add("config_test_float", 1.0);
defaults.Add("config_test_bool", false);

Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.SetDefaultsAsync(defaults)
  .ContinueWithOnMainThread(task => {

ขั้นตอนที่ 3: รับค่าพารามิเตอร์สำหรับใช้ในแอป

ตอนนี้คุณสามารถรับค่าพารามิเตอร์จากออบเจ็กต์ Remote Config ได้แล้ว หากคุณตั้งค่า ในแบ็กเอนด์ Remote Config ดึงค่าเหล่านั้นมา แล้วเปิดใช้งาน ค่าเหล่านั้นจะพร้อมใช้งานในแอป ไม่เช่นนั้น คุณจะได้รับค่าพารามิเตอร์ในแอป ที่กำหนดค่าโดยใช้ SetDefaultsAsync()

หากต้องการรับค่าเหล่านี้ ให้ใช้ GetValue(), โดยระบุคีย์พารามิเตอร์เป็นอาร์กิวเมนต์ ซึ่งจะแสดงผล ConfigValue, ที่มีพร็อพเพอร์ตี้สำหรับแปลงค่าเป็นประเภทพื้นฐานต่างๆ

ขั้นตอนที่ 4: ตั้งค่าพารามิเตอร์

  1. เปิดโปรเจ็กต์ใน Firebase console
  2. เลือก Remote Config จากเมนูเพื่อดูแดชบอร์ดRemote Config
  3. กำหนดพารามิเตอร์ที่มีชื่อเดียวกับพารามิเตอร์ที่คุณกำหนดไว้ในแอป สำหรับพารามิเตอร์แต่ละรายการ คุณสามารถตั้งค่าเริ่มต้น (ซึ่งจะลบล้างค่าเริ่มต้นในแอปในที่สุด) และค่าตามเงื่อนไข ดูข้อมูลเพิ่มเติมได้ที่ Remote Config พารามิเตอร์และเงื่อนไข

ขั้นตอนที่ 5: ดึงข้อมูลและเปิดใช้งานค่า (ตามความจำเป็น)

หากต้องการดึงค่าพารามิเตอร์จากแบ็กเอนด์ Remote Config ให้เรียกใช้เมธอด FetchAsync() ระบบจะดึงค่าที่คุณตั้งไว้ในแบ็กเอนด์และแคชไว้ใน Remote Config ออบเจ็กต์

// Start a fetch request.
// FetchAsync only fetches new data if the current data is older than the provided
// timespan.  Otherwise it assumes the data is "recent enough", and does nothing.
// By default the timespan is 12 hours, and for production apps, this is a good
// number. For this example though, it's set to a timespan of zero, so that
// changes in the console will always show up immediately.
public Task FetchDataAsync() {
  DebugLog("Fetching data...");
  System.Threading.Tasks.Task fetchTask =
  Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.FetchAsync(
      TimeSpan.Zero);
  return fetchTask.ContinueWithOnMainThread(FetchComplete);
}

ในโค้ดก่อนหน้า FetchComplete เป็นเมธอดที่มีลายเซ็นตรงกับ พารามิเตอร์ของการโอเวอร์โหลดรายการใดรายการหนึ่งของ ContinueWithOnMainThread()

ในโค้ดตัวอย่างต่อไปนี้ เมธอด FetchComplete จะรับงานก่อนหน้า (fetchTask) ซึ่งช่วยให้ FetchComplete ระบุได้ว่างานเสร็จสมบูรณ์หรือไม่ จากนั้นโค้ดจะใช้ Info.LastFetchStatus เพื่อระบุว่างานเสร็จสมบูรณ์ ด้วย หรือไม่ หากเป็นเช่นนั้น ระบบจะเปิดใช้งานค่าพารามิเตอร์ Remote Config โดยใช้ ActivateAsync()

private void FetchComplete(Task fetchTask) {
  if (!fetchTask.IsCompleted) {
    Debug.LogError("Retrieval hasn't finished.");
    return;
  }

  var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
  var info = remoteConfig.Info;
  if(info.LastFetchStatus != LastFetchStatus.Success) {
    Debug.LogError($"{nameof(FetchComplete)} was unsuccessful\n{nameof(info.LastFetchStatus)}: {info.LastFetchStatus}");
    return;
  }

  // Fetch successful. Parameter values must be activated to use.
  remoteConfig.ActivateAsync()
    .ContinueWithOnMainThread(
      task => {
        Debug.Log($"Remote data loaded and ready for use. Last fetch time {info.FetchTime}.");
    });
}

ระบบจะแคชค่าที่ดึงมาโดยใช้ FetchAsync() ไว้ในเครื่องเมื่อการดึงข้อมูลเสร็จสมบูรณ์ แต่จะไม่ทำให้ค่าพร้อมใช้งานจนกว่าจะมีการเรียกใช้ ActivateAsync() ซึ่งช่วยให้คุณมั่นใจได้ว่าจะไม่มีการใช้ค่าใหม่ระหว่างการคำนวณหรือในเวลาอื่นๆ ที่อาจทำให้เกิดปัญหาหรือลักษณะการทำงานที่ผิดปกติ

ขั้นตอนที่ 6: รับฟังการอัปเดตแบบเรียลไทม์

หลังจากดึงค่าพารามิเตอร์แล้ว คุณสามารถใช้ Remote Config แบบเรียลไทม์เพื่อ รับฟังการอัปเดตจากแบ็กเอนด์ Remote Config ได้ แบบเรียลไทม์ Remote Configจะส่งสัญญาณไปยังอุปกรณ์ที่เชื่อมต่อเมื่อมีการอัปเดต และ ดึงการเปลี่ยนแปลงโดยอัตโนมัติหลังจากที่คุณเผยแพร่Remote Config เวอร์ชันใหม่

Firebase Unity SDK เวอร์ชัน 11.0.0 ขึ้นไปรองรับการอัปเดตแบบเรียลไทม์สำหรับ แพลตฟอร์ม Android และ Apple

  1. ในแอป ให้เพิ่ม OnConfigUpdateListener เพื่อเริ่มรับฟังการอัปเดตและดึงค่าพารามิเตอร์ใหม่หรือที่อัปเดตโดยอัตโนมัติ จากนั้นสร้าง ConfigUpdateListenerEventHandler เพื่อประมวลผลเหตุการณ์การอัปเดต ตัวอย่างต่อไปนี้จะรับฟังการอัปเดตและใช้ค่าที่ดึงมาใหม่เพื่อแสดงข้อความต้อนรับที่อัปเดต
// Invoke the listener.
void Start()
{
  Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener
    += ConfigUpdateListenerEventHandler;
}

// Handle real-time Remote Config events.
void ConfigUpdateListenerEventHandler(
   object sender, Firebase.RemoteConfig.ConfigUpdateEventArgs args) {
  if (args.Error != Firebase.RemoteConfig.RemoteConfigError.None) {
    Debug.Log(String.Format("Error occurred while listening: {0}", args.Error));
    return;
  }

  Debug.Log("Updated keys: " + string.Join(", ", args.UpdatedKeys));
  // Activate all fetched values and then display a welcome message.
  remoteConfig.ActivateAsync().ContinueWithOnMainThread(
    task => {
        DisplayWelcomeMessage();
    });
}

// Stop the listener.
void OnDestroy() {
    Firebase.RemoteConfig.FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener
      -= ConfigUpdateListenerEventHandler;
}

ในครั้งถัดไปที่คุณเผยแพร่ Remote Config เวอร์ชันใหม่ อุปกรณ์ที่ เรียกใช้แอปและรับฟังการเปลี่ยนแปลงจะเรียกใช้ตัวแฮนเดิลการดำเนินการให้เสร็จสมบูรณ์