튜토리얼: AdMob, Google 애널리틱스, Firebase를 사용하여 하이브리드 수익 창출 최적화

3단계: 특정 광고 환경을 표시하도록 Firebase Remote Config 설정



마지막 단계에서는 Google 애널리틱스 잠재고객에 대해 알아봤습니다. 이 단계에서는 '구매자' 잠재고객을 활용하는 불리언 제어 Remote Config 매개변수(ad_control_switch라고 함)를 만듭니다. 그런 다음 이 매개변수의 값을 기준으로 앱에 표시할 항목에 대한 논리를 앱 코드에 추가합니다.

Firebase Console에서 Remote Config 매개변수 및 조건 설정

  1. Firebase Console에서 Firebase 프로젝트를 엽니다.

  2. 왼쪽 창에서 참여 섹션을 펼치고 원격 구성을 선택합니다.

  3. 구성 만들기를 클릭합니다 (이전에 Remote Config를 사용한 경우 매개변수 추가).

  4. 매개변수 만들기 패널에서 다음 단계를 완료합니다.

    1. 매개변수 이름 필드에 ad_control_switch를 입력합니다.

    2. Data type 드롭다운 메뉴에서 불리언을 선택합니다.

    3. 새로 만들기를 클릭한 다음 새 조건 만들기를 선택합니다.

  5. 새 조건 정의 대화상자에서 다음 단계를 완료합니다.

    1. 이름 필드에 Purchasers Group (또는 조건을 쉽게 식별할 수 있는 다른 이름)을 입력합니다.

    2. Applies if...(다음과 같은 경우에 적용됨) 드롭다운 메뉴에서 User audience(s)(사용자 잠재고객)를 선택합니다.

    3. Select audiences(s)(잠재고객 선택) 드롭다운 메뉴에서 Purchasers(구매자)를 선택합니다.

    4. 조건 저장을 클릭합니다.

  6. 매개변수 만들기 패널로 돌아가 다음 단계를 완료합니다.

    1. 구매자 그룹으로 false를 선택합니다.

    2. 기본값에서 true를 선택합니다.

  7. 저장을 클릭한 다음 변경사항 게시를 클릭합니다.

이 구성은 사용자가 '구매자' 잠재고객에 속하는지(즉, 유료 사용자인지) 확인합니다.

  • 사용자가 '구매자' 잠재고객에 속하면 Remote Configad_control_switch 매개변수의 false 값을 반환합니다.

  • 사용자가 '구매자' 잠재고객에 속하지 않는 경우 Remote Configad_control_switch 매개변수의 true 값을 반환합니다.

다음 단계에서는 앱에서 Remote Config를 구현하여 이러한 매개변수 값을 처리합니다.

앱에 Remote Config SDK 추가

애플리케이션 코드에서 Remote Config를 사용하려면 먼저 앱의 코드베이스에 Remote Config SDK를 추가합니다. 앱에 이미 이 튜토리얼의 이전 단계에서 사용한 Google Mobile Ads (AdMob) SDK와 Firebase용 Google 애널리틱스 SDK가 있어야 합니다.

podfile에 Remote Config 포드를 추가하고 설치합니다.

pod 'Firebase/RemoteConfig'

Remote Config 라이브러리 종속 항목을 build.gradle 파일에 추가합니다.

implementation 'com.google.firebase:firebase-config:22.1.0'

Flutter 프로젝트의 루트에서 다음 명령어를 실행하여 Remote Config 플러그인을 설치합니다.

flutter pub add firebase_remote_config

최신 Firebase Unity SDK를 다운로드하여 설치한 후 프로젝트에 Remote Config 패키지를 추가합니다.
FirebaseRemoteConfig.unitypackage

Remote Config 인스턴스 구성

앱에서 Remote Config 매개변수 값을 사용할 수 있도록 클라이언트 앱 인스턴스의 새 값을 가져올 수 있도록 Remote Config 인스턴스를 구성합니다.

이 예에서 Remote Config는 1시간마다 새 매개변수 값을 확인하도록 구성되어 있습니다.

remoteConfig = RemoteConfig.remoteConfig()
let settings = RemoteConfigSettings()
settings.minimumFetchInterval = 3600
remoteConfig.configSettings = settings
remoteConfig = Firebase.remoteConfig
val configSettings = remoteConfigSettings {
    minimumFetchIntervalInSeconds = 3600
}
remoteConfig.setConfigSettingsAsync(configSettings)
mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
        .setMinimumFetchIntervalInSeconds(3600)
        .build();
mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
remoteConfig = FirebaseRemoteConfig.instance;
  final configSettings = FirebaseRemoteConfigSettings(
    minimumFetchInterval: Duration(hours: 1),
  );
  await remoteConfig.setConfigSettings(configSettings);

  // Use the `onConfigUpdated` callback to listen for changes to the config settings.
  remoteConfig.onConfigUpdated.listen((_) {
    print('Config settings confirmed');
  });
var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
var configSettings = new ConfigSettings {
  MinimumFetchInternalInMilliseconds =
        (ulong)(new TimeSpan(1, 0, 0).TotalMilliseconds)
};
remoteConfig.SetConfigSettingsAsync(configSettings)
        .ContinueWithOnMainThread(task => {
          Debug.Log("Config settings confirmed");
}

Remote Config 가져오기 및 활성화

새 매개변수 값을 사용할 수 있도록 Remote Config 매개변수를 가져오고 활성화합니다.

이 호출은 비동기적이고 앱이 광고를 표시할지 여부를 알 수 있도록 Remote Config 값을 미리 가져와야 하므로, 앱의 로드 단계에서 최대한 빨리 이 호출을 실행해야 합니다.

remoteConfig.fetch() { (status, error) -> Void in
  if status == .success {
    print("Config fetched!")
    self.remoteConfig.activate() { (changed, error) in
      // ...
    }
  } else {
    print("Config not fetched")
    print("Error: \(error?.localizedDescription ?? "No error available.")")
  }
  self.loadAdUnit()
}
remoteConfig.fetchAndActivate()
        .addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {
                val updated = task.result
                Log.d(TAG, "Config params updated: $updated")
            } else {
                Log.d(TAG, "Config params failed to update")
            }
            loadAdUnit()
        }
mFirebaseRemoteConfig.fetchAndActivate()
        .addOnCompleteListener(this, new OnCompleteListener<Boolean>() {
            @Override
            public void onComplete(@NonNull Task<Boolean> task) {
                if (task.isSuccessful()) {
                    boolean updated = task.getResult();
                    Log.d(TAG, "Config params updated: " + updated);
                } else {
                    Log.d(TAG, "Config params failed to update");
                }
                loadAdUnit();
            }
        });
remoteConfig = FirebaseRemoteConfig.instance;

// Fetch and activate the latest Remote Config values.
final updated = await remoteConfig.fetchAndActivate();

// Check if the config params were updated successfully.
if (updated) {
  print('Config params updated');
} else {
  print('Config params failed to update');
}

// Load the ad unit.
_loadAdUnit();
remoteConfig.FetchAndActivateAsync().ContinueWithOnMainThread(task => {
  if (task.IsFaulted) {
    Debug.LogWarning("Config params failed to update");
  } else {
    Debug.Log("Config params updated: " + task.Result);
  }
  LoadAdUnit();
});

이제 이 단계에서 앞부분에 만든 Remote Config 매개변수를 앱에서 처리하도록 구성되었습니다.

Remote Config 매개변수 값 사용

loadAdUnit() 함수에서 미리 가져온 Remote Config 값을 사용하여 앱 인스턴스에서 다음 중 하나를 실행해야 하는지 확인합니다.

  • ad_control_switch 매개변수 값이 true로 확인되면 전면 광고를 표시합니다 (사용자가 유료 사용자가 아니기 때문).

  • ad_control_switch 매개변수 값이 false로 확인되면 광고를 표시하지 않습니다 (사용자가 유료 사용자이기 때문).

private func loadAdUnit() {
  let showAds = remoteConfig["ad_control_switch"].boolValue

  if showAds {
    // Load interstitial ad (implemented ad unit)
    // per AdMob instructions (the first step of this tutorial).
  } else {
    // Don't show ads.
  }
}
private fun loadAdUnit() {
  var showAds = remoteConfig.getBoolean(ad_control_switch)

  if (showAds) {
      // Load interstitial ad (implemented ad unit)
      // per AdMob instructions (the first step of this tutorial).
    } else {
      // Don't show ads.
    }
}
private void loadAdUnit() {
    boolean showAds =
      mFirebaseRemoteConfig.getBoolean(ad_control_switch);

    if (showAds) {
      // Load interstitial ad (implemented ad unit)
      // per AdMob instructions (the first step of this tutorial).
    } else {
      // Don't show ads.
    }
}
void _loadAdUnit() {
  bool showAds = remoteConfig.getBool(ad_control_switch);

  if (showAds) {
    // Load interstitial ad (implemented ad unit)
    // per AdMob instructions (the first step of this tutorial).
  } else {
    // Don't show ads.
  }
}
void LoadAdUnit() {
  bool showAds =
      remoteConfig.GetValue("ad_control_switch").BooleanValue;

  if (showAds) {
    // Load interstitial ad (implemented ad unit)
    // per AdMob instructions (the first step of this tutorial).
  } else {
    // Don't show ads.
  }
}

앱 출시

광고 표시 여부에 관한 로직은 코드베이스에 있으므로 이 로직이 포함된 새 버전의 앱을 출시해야 합니다.

이 튜토리얼의 단계를 따른 경우 앱에서 즉시 사용자에게 맞춤설정된 인앱 광고 환경을 게재하기 시작합니다. AdMob 계정과 Google 애널리틱스 대시보드 (Firebase 콘솔 또는 Google 애널리틱스 UI)에서 모두 광고 수익을 모니터링할 수 있습니다.


이제 모든 작업이 완료되었습니다. AdMob, Google 애널리틱스, Firebase를 사용하여 하이브리드 수익 창출을 최적화하기 위한 튜토리얼이 완료되었습니다.




2단계: Google 애널리틱스 설정하기