Eğitim: AdMob reklam sıklığını optimize etme

3. Adım: Uygulamanızın kodunda Remote Config parametre değerlerini işleyin



Son adımın sonunda bir Remote Config parametresi (INTERSTITIAL_AD_KEY) oluşturdunuz. Bu adımda, uygulamanızın bu parametrenin değerine göre ne göstermesi gerektiğine dair mantığı uygulamanızın koduna ekleyeceksiniz.

Gerekli SDK'ları ekleyin

Uygulama kodunuzda Remote Config kullanmadan önce hem Remote Config SDK'sını hem de Google Analytics için Firebase SDK'sını proje derleme dosyalarınıza ekleyin.

Aşağıdaki kapsülleri pod dosyanıza ekleyin ve yükleyin:

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

Aşağıdaki kapsülleri pod dosyanıza ekleyin ve yükleyin:

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

build.gradle dosyanıza aşağıdaki kitaplık bağımlılıkları ekleyin:

implementation 'com.google.android.gms:play-services-ads:24.0.0'
implementation 'com.google.firebase:firebase-analytics:22.3.0'
implementation 'com.google.firebase:firebase-config:22.1.0'

Firebase Unity SDK'sını indirip yükleyin, ardından projenize aşağıdaki Unity paketlerini ekleyin:

  • FirebaseAnalytics.unitypackage
  • FirebaseRemoteConfig.unitypackage

Remote Config örneğini yapılandırma

Remote Config parametre değerlerini kullanmak için Remote Config örneğini, istemci uygulaması örneği için yeni değerleri alacak şekilde yapılandırın.

Bu örnekte Remote Config, her saatte bir yeni parametre değerlerini kontrol edecek şekilde yapılandırılmıştır.

remoteConfig = RemoteConfig.remoteConfig()
let settings = RemoteConfigSettings()
settings.minimumFetchInterval = 3600
remoteConfig.configSettings = settings
self.remoteConfig = [FIRRemoteConfig remoteConfig];
FIRRemoteConfigSettings *remoteConfigSettings = [[FIRRemoteConfigSettings alloc] init];
remoteConfigSettings.minimumFetchInterval = 3600;
self.remoteConfig.configSettings = remoteConfigSettings;
mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
        .setMinimumFetchIntervalInSeconds(3600)
        .build();
mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
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");
}

Remote Config'i getirme ve etkinleştirme

Yeni parametre değerlerini kullanmaya başlayabilmesi için Remote Config parametrelerini alın ve etkinleştirin.

Bu çağrı eşzamansız olduğundan ve uygulamanızın hangi reklamın gösterileceğini bilmesi için Remote Config değerinin önceden getirilmiş olması gerektiğinden, bu çağrıyı uygulamanızın yükleme aşamasında mümkün olduğunca erken yapmak istersiniz.

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

Uygulamanız artık bu eğitimde daha önce A/B testi kurulumu sırasında oluşturduğunuz Remote Config parametresini işlemeye hazır.

Remote Config parametre değerini kullanın

Bu uygulama örneği için hangi reklam sıklığı varyantının gösterilmesi gerektiğini belirlemek üzere loadAdUnit() işlevinde önceden getirilen Remote Config değerini kullanın.

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

Parametre değeri için başka kontroller ekleyin

Uygulama kodunuzda, hangi reklam deneyiminin yükleneceğini belirlemek için bu Remote Config parametresinin değerini kontrol etmeniz gereken başka alanlar da vardır. Örneğin, kullanıcı mevcut reklamı görüntülemeyi bitirdikten sonra bir reklamın yeniden yüklenip yüklenmeyeceğine karar verebilirsiniz.

Parametre değeri değişikliklerini almak için ilk önce getirme ve etkinleştirme çağrıları yapılmalıdır (örneğin, sonlandırmaya veya yeni bir deneme oluşturmaya karar verirseniz).

Buradan, aşağıdaki çağrıları kullanarak parametrenin değerini her zaman kontrol edebilirsiniz:

remoteConfig["INTERSTITIAL_AD_KEY"].stringValue
self.remoteConfig[@"INTERSTITIAL_AD_KEY"].stringValue;
mFirebaseRemoteConfig.getString(INTERSTITIAL_AD_KEY)
remoteConfig.getString(INTERSTITIAL_AD_KEY)
remoteConfig.GetValue("INTERSTITIAL_AD_KEY").StringValue

Firebase konsolunda önceki çağrılarda getirilen ve etkinleştirilen herhangi bir değişiklik yapılmadığı sürece, bu çağrılar kontrol grubuna mı yoksa yeni reklam varyantı gruplarından birine mi yerleştirildiğine bağlı olarak bir uygulama örneği için her zaman aynı değeri döndürür.




2. adım: Firebase konsolunda bir A/B testi oluşturun 4. adım: A/B testini başlatın ve test sonuçlarını inceleyin