가이드: AdMob 광고 빈도 최적화

3단계: 앱 코드에서 원격 구성 매개변수 값 처리


소개: Firebase를 사용하여 AdMob 광고 빈도 최적화
1단계: AdMob을 사용하여 테스트용 새 광고 단위 변형 만들기
2단계: Firebase 콘솔에서 A/B 테스트 설정

3단계: 앱 코드에서 원격 구성 매개변수 값 처리

4단계: A/B 테스트 시작 및 Firebase 콘솔에서 테스트 결과 검토
5단계: 새 광고 형식 출시 여부 결정


마지막 단계가 끝나면 원격 구성 매개변수( INTERSTITIAL_AD_KEY )를 만들었습니다. 이 단계에서는 해당 매개변수의 값을 기반으로 앱이 표시해야 하는 항목에 대한 로직을 앱 코드에 추가합니다.

필요한 SDK 추가

애플리케이션 코드에서 원격 구성을 사용하기 전에 원격 구성 SDK와 Google 애널리틱스용 Firebase SDK를 모두 프로젝트 빌드 파일에 추가하세요.

빠른

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

pod 'Google-Mobile-Ads-SDK'
pod 'Firebase/Analytics'
pod 'Firebase/RemoteConfig'

오브젝티브-C

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

pod 'Google-Mobile-Ads-SDK'
pod 'Firebase/Analytics'
pod 'Firebase/RemoteConfig'

Java

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

implementation 'com.google.android.gms:play-services-ads:21.0.0'
implementation 'com.google.firebase:firebase-analytics:21.0.0'
implementation 'com.google.firebase:firebase-config:21.1.0'

Kotlin+KTX

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

implementation 'com.google.android.gms:play-services-ads:21.0.0'
implementation 'com.google.firebase:firebase-analytics-ktx:21.0.0'
implementation 'com.google.firebase:firebase-config-ktx:21.1.0'

단일성

Firebase Unity SDK를 다운로드하여 설치한 후 프로젝트에 다음 Unity 패키지를 추가합니다.

  • FirebaseAnalytics.unitypackage
  • FirebaseRemoteConfig.unitypackage

원격 구성 인스턴스 구성

원격 구성 매개변수 값을 사용하려면 원격 구성 인스턴스를 구성하여 클라이언트 앱 인스턴스에 대한 새 값을 가져오도록 설정합니다.

이 예에서 원격 구성은 매시간 새 매개변수 값을 확인하도록 구성됩니다.

빠른

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

오브젝티브-C

self.remoteConfig = [FIRRemoteConfig remoteConfig];
FIRRemoteConfigSettings *remoteConfigSettings = [[FIRRemoteConfigSettings alloc] init];
remoteConfigSettings.minimumFetchInterval = 3600;
self.remoteConfig.configSettings = remoteConfigSettings;

Java

mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
        .setMinimumFetchIntervalInSeconds(3600)
        .build();
mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);

Kotlin+KTX

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

단일성

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

오브젝티브-C

[self.remoteConfig fetchWithCompletionHandler:^(FIRRemoteConfigFetchStatus status, NSError *error) {
    if (status == FIRRemoteConfigFetchStatusSuccess) {
        NSLog(@"Config fetched!");
      [self.remoteConfig activateWithCompletion:^(BOOL changed, NSError * _Nullable error) {
        // ...
      }];
    } else {
        NSLog(@"Config not fetched");
        NSLog(@"Error %@", error.localizedDescription);
    }
    [self 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();
            }
        });

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

단일성

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

이제 앱은 이 자습서의 앞부분에서 설정한 A/B 테스트 중에 생성한 원격 구성 매개변수를 처리할 준비가 되었습니다.

원격 구성 매개변수 값 사용

loadAdUnit() 함수에서 미리 가져온 원격 구성 값을 사용하여 이 앱 인스턴스에 대해 표시되어야 하는 광고 빈도 변형을 결정합니다.

빠른

private func loadAdUnit() {
  let adUnitId = remoteConfig["INTERSTITIAL_AD_KEY"].stringValue;
  let request = GADRequest()
  GADInterstitialAd.load(withAdUnitID: adUnitId,
                               request: request,
                     completionHandler: { [self] ad, error in
                       if let error = error {
                         print("Failed to load: \(error.localizedDescription)")
                         return
                       }
                       interstitial = ad
                       // Register for callbacks.
                     }
  )
}

// Register for callbacks.

오브젝티브-C

- (void)loadAdUnit {
    NSString *adUnitId =
      self.remoteConfig[@"INTERSTITIAL_AD_KEY"].stringValue;

  GADRequest *request = [GADRequest request];
  [GADInterstitialAd loadAdWithAdUnitId:adUnitId
                         request:request
                         completionHandler:^(GADInterstitialAd *ad,
                             NSError *error) {
    if (error) {
      NSLog(@"Failed to load interstitial ad with error: %@",
        [error localizedDescription]);
      return;
    }

    self.interstitial = ad;
  }];
}

Java

private void loadAdUnit() {
    String adUnitId =
      mFirebaseRemoteConfig.getString("INTERSTITIAL_AD_KEY");

    // Load Interstitial Ad (assume adUnitId not null)
    AdRequest adRequest = new AdRequest.Builder().build();

    InterstitialAd.load(this, adUnitId, adRequest, new
        InterstitialAdLoadCallback() {
          @Override
          public void onAdLoaded(@NonNull InterstitialAd intertitialAd) {
            mInterstitialAd = interstitialAd;
          }

          @Override
          public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
            mInterstitialAd = null;
          }
    });
}

Kotlin+KTX

private fun loadAdUnit() {
  String adUnitId = remoteConfig.getString("INTERSTITIAL_AD_KEY")
  var adRequest = AdRequestBuilder.Builder().build()

  AdRequestBuilder.load(this, adUnitId, adRequest, object :
    InterstitialAdLoadCallback() {
      override fun onAdFailedToLoad(adError: LoadAdError) {
        mInterstitialAd = null
      }

      override fun onAdLoaded(interstitialAd: InterstitialAd) {
        mInterstitialAd = interstitialAd
      }
    })
}

단일성

void LoadAdUnit() {

  // Note that you may want to encode and parse two sets of ad unit IDs for
  // Android / iOS in the Unity implementation.
  String adUnitId = remoteConfig.GetValue("INTERSTITIAL_AD_KEY").StringValue;
  this.interstitial = new InterstitialAd(adUnitId);
}

매개변수 값에 대한 다른 검사 추가

로드할 광고 경험을 지정하기 위해 이 원격 구성 매개변수의 값을 확인해야 하는 애플리케이션 코드의 다른 영역이 있습니다. 예를 들어 사용자가 현재 광고를 본 후 광고를 다시 로드할지 여부를 결정할 수 있습니다.

예를 들어 새 실험을 종료하거나 만들기로 결정한 경우 매개변수 값 변경을 가져오려면 가져오기 및 활성화 호출을 먼저 수행해야 합니다.

여기에서 다음 호출을 사용하여 항상 매개변수 값을 확인할 수 있습니다.

빠른

remoteConfig["INTERSTITIAL_AD_KEY"].stringValue

오브젝티브-C

self.remoteConfig[@"INTERSTITIAL_AD_KEY"].stringValue;

Java

mFirebaseRemoteConfig.getString(INTERSTITIAL_AD_KEY)

Kotlin+KTX

remoteConfig.getString(INTERSTITIAL_AD_KEY)

단일성

remoteConfig.GetValue("INTERSTITIAL_AD_KEY").StringValue

이전 호출에서 가져와 활성화된 Firebase 콘솔에서 변경 사항이 적용되지 않는 한 이러한 호출은 앱 인스턴스가 제어 그룹에 배치되었는지 아니면 새 광고 변형 그룹 중 하나에 배치되었는지에 따라 앱 인스턴스에 대해 항상 동일한 값을 반환합니다.




2단계 : Firebase 콘솔에서 A/B 테스트 설정 4단계 : A/B 테스트 시작 및 테스트 결과 검토