Firebase 원격 구성 시작하기


Firebase 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 프로젝트에 추가합니다.

Unity 프로젝트에 Firebase를 추가할 때 Firebase Console 및 열려 있는 Unity 프로젝트 모두에서 작업을 수행해야 합니다. 예를 들어 Console에서 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 버전을 게시한 후 변경사항을 자동으로 가져옵니다.

실시간 업데이트는 Android 및 Apple 플랫폼용 Firebase Unity SDK v11.0.0 이상에서 지원됩니다.

  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을 게시하면 앱을 실행하고 변경사항을 리슨하는 기기가 완료 핸들러를 호출합니다.

다음 단계

아직 Remote Config 사용 사례를 살펴보지 않았다면 살펴보고 다음을 포함하여 주요 개념과 고급 전략 문서를 참조하세요.