Krok 3. Obsługa wartości parametrów Remote Config w kodzie aplikacji
| Wprowadzenie: Optymalizowanie AdMob częstotliwości wyświetlania reklam za pomocą Firebase |
| Krok 1. Tworzenie nowych wariantów jednostek reklamowych na potrzeby testowania w AdMob |
| Krok 2. Skonfiguruj test A/B w konsoli Firebase |
|
Krok 3. Obsługa Remote Config wartości parametrów w kodzie aplikacji |
| Krok 4. Rozpoczynanie testu A/B i sprawdzanie jego wyników w konsoli Firebase |
| Krok 5: Podejmowanie decyzji o wdrożeniu nowego formatu reklamy |
Na końcu ostatniego kroku utworzyliśmy parametrRemote Config(INTERSTITIAL_AD_KEY). W tym kroku dodamy do kodu aplikacji logikę, która określi, co ma się wyświetlać w aplikacji na podstawie wartości tego parametru.
Dodawanie wymaganych pakietów SDK
Zanim zaczniesz używać Remote Config w kodzie aplikacji, dodaj do plików kompilacji projektu pakiet SDK Remote Config i pakiet SDK Firebase dla Google Analytics.
Swift
Dodaj i zainstaluj te podsy w pliku podfile:
pod 'Google-Mobile-Ads-SDK'
pod 'Firebase/Analytics'
pod 'Firebase/RemoteConfig'
Objective-C
Dodaj i zainstaluj te podsy w pliku podfile:
pod 'Google-Mobile-Ads-SDK'
pod 'Firebase/Analytics'
pod 'Firebase/RemoteConfig'
Android
Dodaj te zależności biblioteki do pliku build.gradle:
implementation 'com.google.android.gms:play-services-ads:25.2.0'
implementation 'com.google.firebase:firebase-analytics:23.2.0'
implementation 'com.google.firebase:firebase-config:23.1.0'
Unity
Pobierz i zainstaluj pakiet Firebase Unity SDK, a następnie dodaj do projektu te pakiety Unity:
FirebaseAnalytics.unitypackageFirebaseRemoteConfig.unitypackage
Konfigurowanie instancji Remote Config
Aby używać wartości parametrów Remote Config, skonfiguruj instancję Remote Config, która umożliwi pobieranie nowych wartości przez instancję aplikacji klienta.
W tym przykładzie Remote Config weryfikuje wartości parametrów co godzinę.
Swift
remoteConfig = RemoteConfig.remoteConfig()
let settings = RemoteConfigSettings()
settings.minimumFetchInterval = 3600
remoteConfig.configSettings = settings
Objective-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
remoteConfig = Firebase.remoteConfig
val configSettings = remoteConfigSettings {
minimumFetchIntervalInSeconds = 3600
}
remoteConfig.setConfigSettingsAsync(configSettings)
Unity
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");
}
Pobieranie i aktywowanie Remote Config
Pobierz i aktywuj parametry Remote Config, aby mogła ona zacząć używać nowych wartości parametrów.
To wywołanie powinno pojawić się na etapie wczytywania aplikacji jak najszybciej ponieważ jest ono asynchroniczne, a wartość Remote Config musi być pobierana z wyprzedzeniem , żeby było wiadomo, jaka reklama ma się wyświetlić w aplikacji.
Swift
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()
}
Objective-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
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()
}
Unity
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 może teraz obsługiwać parametr Remote Config utworzony przez Ciebie podczas konfiguracji testu A/B, którą opisaliśmy wcześniej w tym samouczku.
Użyj wartości parametru Remote Config
Użyj pobranej z wyprzedzeniem wartości Remote Config w funkcji loadAdUnit(), aby
określić, który wariant częstotliwości wyświetlania reklamy należy zastosować dla danej instancji aplikacji.
Swift
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.
Objective-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
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
}
})
}
Unity
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);
}
Dodawanie innych sprawdzeń wartości parametru
W kodzie aplikacji są też inne miejsca, w których trzeba sprawdzić wartość tego Remote Config parametru, aby określić, jakie reklamy mają się wczytywać. Możesz na przykład zdecydować, czy reklama ma się przeładować po tym, jak użytkownik obejrzy bieżącą.
Wywołania związane z pobieraniem i aktywowaniem powinny być wykonane najpierw, aby umożliwić pobranie ewentualnych zmian wartości parametrów, np. gdy postanowisz zakończyć dotychczasowy eksperyment lub utworzyć nowy.
Wartość parametru możesz zawsze sprawdzić za pomocą tych wywołań:
Swift
remoteConfig["INTERSTITIAL_AD_KEY"].stringValue
Objective-C
self.remoteConfig[@"INTERSTITIAL_AD_KEY"].stringValue;
Java
mFirebaseRemoteConfig.getString(INTERSTITIAL_AD_KEY)
Kotlin
remoteConfig.getString(INTERSTITIAL_AD_KEY)
Unity
remoteConfig.GetValue("INTERSTITIAL_AD_KEY").StringValue
Te wywołania zawsze zwracają tę samą wartość dla instancji aplikacji w zależności od tego, czy znajduje się ona w grupie kontrolnej czy w jednej z grup testujących nowe warianty reklamy, chyba że w konsoli Firebase pojawiły się zmiany, które zostały pobrane i aktywowane w poprzednich wywołaniach.
Krok 2: Konfigurowanie testu A/B w konsoli Firebase Krok 4: Rozpoczynanie testu A/B i sprawdzanie jego wyników