Samouczek: Optymalizacja częstotliwości reklam AdMob

Krok 3: Obsługuj wartości parametrów Zdalnej konfiguracji w kodzie aplikacji


Wprowadzenie: zoptymalizuj częstotliwość reklam AdMob za pomocą Firebase
Krok 1: za pomocą AdMob utwórz nowe warianty jednostki reklamowej do testowania
Krok 2. Skonfiguruj test A/B w konsoli Firebase

Krok 3: Obsługuj wartości parametrów Zdalnej konfiguracji w kodzie aplikacji

Krok 4: Rozpocznij test A/B i przejrzyj wyniki testu w konsoli Firebase
Krok 5: Zdecyduj, czy wprowadzić nowy format reklamy


Na końcu ostatniego kroku utworzyłeś parametr Zdalnej konfiguracji ( INTERSTITIAL_AD_KEY ). W tym kroku dodasz logikę do kodu aplikacji określającą, co aplikacja powinna wyświetlać na podstawie wartości tego parametru.

Dodaj wymagane pakiety SDK

Przed użyciem Zdalnej konfiguracji w kodzie aplikacji dodaj zarówno pakiet SDK Zdalnej konfiguracji, jak i pakiet Firebase SDK dla Google Analytics do plików kompilacji projektu.

Szybki

Dodaj i zainstaluj następujące pody w swoim pliku pod:

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

Cel C

Dodaj i zainstaluj następujące pody w swoim pliku pod:

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

Java

Dodaj następujące zależności bibliotek do pliku build.gradle :

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

Kotlin+KTX

Dodaj następujące zależności bibliotek do pliku build.gradle :

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

Jedność

Pobierz i zainstaluj pakiet Firebase Unity SDK, a następnie dodaj do projektu następujące pakiety Unity:

  • FirebaseAnalytics.unitypackage
  • FirebaseRemoteConfig.unitypackage

Skonfiguruj instancję Zdalnej konfiguracji

Aby użyć wartości parametrów Zdalna konfiguracja, skonfiguruj wystąpienie Zdalnej konfiguracji tak, aby było skonfigurowane do pobierania nowych wartości dla wystąpienia aplikacji klienckiej.

W tym przykładzie Zdalna konfiguracja jest skonfigurowana do sprawdzania nowych wartości parametrów raz na godzinę.

Szybki

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

Cel 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)

Jedność

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

Pobierz i aktywuj zdalną konfigurację

Pobierz i aktywuj parametry Remote Config, aby można było zacząć używać nowych wartości parametrów.

Musisz wykonać to wywołanie jak najwcześniej w fazie ładowania aplikacji, ponieważ to wywołanie jest asynchroniczne i musisz wstępnie pobrać wartość Zdalnej konfiguracji, aby aplikacja wiedziała, którą reklamę wyświetlić.

Szybki

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

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

Jedność

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

Twoja aplikacja jest teraz gotowa do obsługi parametru Zdalnej konfiguracji utworzonego podczas konfiguracji testu A/B we wcześniejszej części tego samouczka.

Użyj wartości parametru Zdalna konfiguracja

Użyj wstępnie pobranej wartości Zdalnej konfiguracji w funkcji loadAdUnit() , aby określić, który wariant częstotliwości reklam powinien być wyświetlany dla tego wystąpienia aplikacji.

Szybki

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.

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

Jedność

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

Dodaj inne kontrole dla wartości parametru

Istnieją inne obszary w kodzie aplikacji, w których musisz sprawdzić wartość tego parametru Zdalnej konfiguracji, aby określić, która reklama zostanie załadowana. Na przykład możesz zdecydować, czy ponownie załadować reklamę po tym, jak użytkownik zakończy przeglądanie bieżącej.

Wywołania pobierania i aktywacji należy wykonać jako pierwsze, aby uzyskać jakiekolwiek zmiany wartości parametrów — na przykład, jeśli zdecydujesz się zakończyć lub utworzyć nowy eksperyment.

Stamtąd możesz zawsze sprawdzić wartość parametru za pomocą następujących wywołań:

Szybki

remoteConfig["INTERSTITIAL_AD_KEY"].stringValue

Cel C

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

Java

mFirebaseRemoteConfig.getString(INTERSTITIAL_AD_KEY)

Kotlin+KTX

remoteConfig.getString(INTERSTITIAL_AD_KEY)

Jedność

remoteConfig.GetValue("INTERSTITIAL_AD_KEY").StringValue

Te wywołania zawsze zwracają tę samą wartość dla wystąpienia aplikacji, w zależności od tego, czy zostało ono umieszczone w grupie kontrolnej, czy w jednej z nowych grup wariantów reklamy, chyba że w konsoli Firebase wprowadzono jakiekolwiek zmiany, które zostały pobrane i aktywowane w poprzednich wywołaniach.




Krok 2 : Skonfiguruj test A/B w konsoli Firebase Krok 4 : Rozpocznij test A/B i sprawdź wyniki testu