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

3단계: 특정 광고 경험을 표시하도록 Firebase 원격 구성 설정


소개: AdMob, Google Analytics, Firebase를 사용하여 하이브리드 수익 창출 최적화
1단계: AdMob을 사용하여 디스플레이용 새 광고 단위 만들기
2단계: Google Analytics 설정

3단계: 특정 광고 경험을 표시하도록 Firebase 원격 구성 설정


마지막 단계에서는 Google Analytics 잠재고객에 대해 배웠습니다. 이 단계에서는 '구매자' 잠재고객을 활용하는 원격 구성 부울 제어 매개변수( ad_control_switch 라고 함)를 생성합니다. 그런 다음 해당 매개변수의 값에 따라 앱이 표시해야 하는 내용에 대한 논리를 앱 코드에 추가합니다.

Firebase 콘솔에서 원격 구성 매개변수 및 조건 설정

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

  2. 왼쪽 창에서 참여 섹션을 확장한 다음 원격 구성을 선택합니다.

  3. 구성 만들기 (또는 이전에 원격 구성을 사용한 적이 있는 경우 매개 변수 추가 )를 클릭합니다.

  4. 매개변수 생성 패널에서 다음 단계를 완료합니다.

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

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

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

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

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

    2. 다음 경우에 적용... 드롭다운 메뉴에서 사용자 대상을 선택합니다.

    3. 대상 선택 드롭다운 메뉴에서 구매자 를 선택합니다.

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

  6. 매개변수 생성 패널로 돌아가서 다음 단계를 완료하세요.

    1. 구매자 그룹 에 대해 false 를 선택합니다.

    2. 기본값 으로 true를 선택합니다.

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

이 구성은 사용자가 "구매자" 대상에 있는지(즉, 유료 사용자인지) 확인합니다.

  • 사용자가 "구매자" 대상에 속하면 원격 구성은 ad_control_switch 매개변수에 대해 false 값을 반환합니다.

  • 사용자가 "구매자" 대상에 속하지 않는 경우 원격 구성은 ad_control_switch 매개변수에 대해 true 값을 반환합니다.

다음 단계에서는 이러한 매개변수 값을 처리하기 위해 앱에 원격 구성을 구현합니다.

앱에 원격 구성 SDK 추가

애플리케이션 코드에서 원격 구성을 사용하기 전에 앱의 코드베이스에 원격 구성 SDK를 추가하세요. 앱에는 이 튜토리얼의 이전 단계에서 다룬 Google 모바일 광고(AdMob) SDK와 Firebase용 Google Analytics SDK가 이미 있어야 합니다.

빠른

Podfile에 원격 구성 Pod를 추가하고 설치합니다.

pod 'Firebase/RemoteConfig'

기계적 인조 인간

build.gradle 파일에 원격 구성 라이브러리 종속성을 추가합니다.

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

실룩 거리다

Flutter 프로젝트 루트에서 다음 명령어를 실행하여 원격 구성 플러그인을 설치하세요.

flutter pub add firebase_remote_config

단일성

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

원격 구성 인스턴스 구성

앱이 원격 구성 매개변수 값을 사용할 수 있도록 하려면 클라이언트 앱 인스턴스에 대한 새 값을 가져올 수 있도록 원격 구성 인스턴스를 구성하세요.

이 예시에서는 원격 구성이 1시간에 한 번씩 새 매개변수 값을 확인하도록 구성되었습니다.

빠른

remoteConfig = RemoteConfig.remoteConfig()
let settings = RemoteConfigSettings()
settings.minimumFetchInterval = 3600
remoteConfig.configSettings = settings

Kotlin+KTX

remoteConfig = Firebase.remoteConfig
val configSettings = remoteConfigSettings {
    minimumFetchIntervalInSeconds = 3600
}
remoteConfig.setConfigSettingsAsync(configSettings)

Java

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

원격 구성 가져오기 및 활성화

새 매개변수 값을 사용할 수 있도록 원격 구성 매개변수를 가져와 활성화합니다.

이 호출은 비동기식이며 앱에서 광고 표시 여부를 알 수 있도록 미리 가져온 원격 구성 값이 필요하기 때문에 앱 로드 단계에서 가능한 한 빨리 이 호출을 수행하는 것이 좋습니다.

빠른

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()
}

Kotlin+KTX

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()
        }

Java

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();
});

이제 이 단계의 앞부분에서 생성한 원격 구성 매개변수를 처리하도록 앱이 구성되었습니다.

원격 구성 매개변수 값 사용

loadAdUnit() 함수에서 미리 가져온 원격 구성 값을 사용하여 앱 인스턴스가 다음 중 하나를 수행해야 하는지 결정합니다.

  • 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.
  }
}

Kotlin+KTX

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.
    }
}

Java

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 Analytics 대시보드(Firebase 콘솔 또는 Google Analytics UI)에서 광고 수익을 모니터링할 수 있습니다.


그리고 그게 다야! AdMob, Google Analytics, Firebase를 사용하여 하이브리드 수익 창출을 최적화하기 위한 튜토리얼을 완료하셨습니다.




2단계: Google Analytics 설정