שלב 3: טיפול בערכי פרמטרים מסוג Remote Config בקוד האפליקציה
מבוא: אופטימיזציה של תדירות הצגת המודעות ב-AdMob באמצעות Firebase |
שלב 1: אפשר להשתמש ב-AdMob כדי ליצור וריאנטים חדשים של יחידות מודעות לבדיקה |
שלב 2: הגדרה בדיקת A/B במסוף Firebase |
שלב 3: צריך לטפל ב-Remote Config ערכי פרמטרים בקוד של האפליקציה |
שלב 4: שנתחיל? בדיקת ה-A/B ובדיקת תוצאות הבדיקה במסוף Firebase |
שלב 5: החלטה האם להשיק את פורמט המודעה החדש |
בסוף השלב האחרון, יצרתם את הפרמטר Remote Config
(INTERSTITIAL_AD_KEY
). בשלב הזה צריך להוסיף את הלוגיקה לקוד של האפליקציה
של מה שהאפליקציה צריכה להציג על סמך הערך של אותו פרמטר.
הוספת ערכות ה-SDK הנדרשות
לפני שמשתמשים ב-Remote Config בקוד האפליקציה, צריך להוסיף את שני הרכיבים: Remote Config SDK ו-Firebase SDK for Google Analytics אל את קובצי ה-build של הפרויקט.
Swift
מוסיפים ומתקינים את ה-pods הבאים בקובץ ה-pod:
pod 'Google-Mobile-Ads-SDK'
pod 'Firebase/Analytics'
pod 'Firebase/RemoteConfig'
Objective-C
מוסיפים ומתקינים את ה-pods הבאים בקובץ ה-pod:
pod 'Google-Mobile-Ads-SDK'
pod 'Firebase/Analytics'
pod 'Firebase/RemoteConfig'
Android
מוסיפים את יחסי התלות הבאים של ספריות לקובץ build.gradle
:
implementation 'com.google.android.gms:play-services-ads:23.3.0'
implementation 'com.google.firebase:firebase-analytics:22.1.0'
implementation 'com.google.firebase:firebase-config:22.0.0'
Unity
מורידים ומתקינים את Firebase Unity SDK, ואז מוסיפים את ה-Unity הבא חבילות לפרויקט שלך:
FirebaseAnalytics.unitypackage
FirebaseRemoteConfig.unitypackage
הגדרת מופע אחד (Remote Config)
כדי להשתמש בערכי הפרמטר Remote Config, צריך להגדיר את המכונה Remote Config כך שתאחזר ערכים חדשים למכונה של אפליקציית הלקוח.
בדוגמה הזו, Remote Config מוגדר לבדוק אם יש פרמטר חדש ערכים פעם בשעה.
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+KTX
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");
}
אחזור והפעלה של Remote Config
מאחזרים את הפרמטרים Remote Config ומפעילים אותם כדי להתחיל להשתמש בהם את ערכי הפרמטרים החדשים.
מומלץ לבצע את השיחה הזו בהקדם האפשרי בשלב הטעינה של האפליקציה כי השיחה הזו אסינכרונית ונדרש הערך של Remote Config מאוחזרות מראש כדי שהאפליקציה תדע איזו מודעה להציג.
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+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()
}
Unity
remoteConfig.FetchAndActivateAsync().ContinueWithOnMainThread(task => {
if (task.IsFaulted) {
Debug.LogWarning("Config params failed to update");
} else {
Debug.Log("Config params updated: " + task.Result);
}
LoadAdUnit();
});
האפליקציה שלך מוכנה עכשיו לטפל בפרמטר Remote Config שיצרת במהלך בדיקת ה-A/B שהגדרתם קודם במדריך הזה.
שימוש בערך הפרמטר Remote Config
צריך להשתמש בערך Remote Config שאוחזר מראש בפונקציה loadAdUnit()
כדי
שיקבע איזה וריאנט של תדירות הצגת מודעות יוצג במופע הזה של האפליקציה.
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+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
}
})
}
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);
}
הוספת בדיקות אחרות לערך הפרמטר
יש אזורים אחרים בקוד האפליקציה שבהם עליך לבדוק את של הפרמטר Remote Config הזה כדי לקבוע איזו חוויית צפייה במודעה תהיה נטען. לדוגמה, אתם יכולים להחליט אם לטעון מחדש מודעה אחרי שהמשתמש סיימתי להציג את הנוכחי.
קודם צריך לבצע את הקריאות לאחזור ולהפעלה כדי לקבל עדכונים לגבי ערכי הפרמטרים – לדוגמה, אם מחליטים לסיים ניסוי או ליצור ניסוי חדש.
לאחר מכן, תמיד תוכלו לבדוק את הערך של הפרמטר באמצעות הקריאות הבאות:
Swift
remoteConfig["INTERSTITIAL_AD_KEY"].stringValue
Objective-C
self.remoteConfig[@"INTERSTITIAL_AD_KEY"].stringValue;
Java
mFirebaseRemoteConfig.getString(INTERSTITIAL_AD_KEY)
Kotlin+KTX
remoteConfig.getString(INTERSTITIAL_AD_KEY)
Unity
remoteConfig.GetValue("INTERSTITIAL_AD_KEY").StringValue
הקריאות האלה יחזירו תמיד את אותו הערך למופע של אפליקציה, בהתאם גם אם הוא הוגדר בקבוצת הבקרה או באחת מקבוצות הווריאנטים החדשות של המודעות, אלא אם בוצעו שינויים במסוף Firebase שאוחזרו, הופעל בשיחות הקודמות.
Firebase שלב 2: הגדרה של בדיקת A/B במסוף שלב 4: מתחילים בדיקת A/B לבדיקת תוצאות הבדיקה