שלב 3: טפל בערכי פרמטר Config מרחוק בקוד האפליקציה שלך
הקדמה: בצע אופטימיזציה של תדירות המודעות של AdMob באמצעות Firebase |
שלב 1: השתמש ב-AdMob כדי ליצור גרסאות חדשות של יחידות מודעות לבדיקה |
שלב 2: הגדר בדיקת A/B במסוף Firebase |
שלב 3: טפל בערכי פרמטר Config מרחוק בקוד האפליקציה שלך |
שלב 4: התחל את בדיקת A/B ובדוק את תוצאות הבדיקה במסוף Firebase |
שלב 5: החלט אם להפעיל את פורמט המודעה החדש |
בסוף השלב האחרון, יצרת פרמטר Config מרחוק ( INTERSTITIAL_AD_KEY
). בשלב זה, תוסיף את ההיגיון לקוד האפליקציה שלך עבור מה שהאפליקציה שלך צריכה להציג בהתבסס על הערך של פרמטר זה.
הוסף את ערכות ה-SDK הנדרשות
לפני השימוש ב-Remote Config בקוד היישום שלך, הוסף גם את Remote Config SDK וגם את Firebase SDK עבור Google Analytics לקובצי בניית הפרויקט שלך.
מָהִיר
הוסף והתקן את הפודים הבאים ב-podfile שלך:
pod 'Google-Mobile-Ads-SDK'
pod 'Firebase/Analytics'
pod 'Firebase/RemoteConfig'
Objective-C
הוסף והתקן את הפודים הבאים ב-podfile שלך:
pod 'Google-Mobile-Ads-SDK'
pod 'Firebase/Analytics'
pod 'Firebase/RemoteConfig'
דְמוּי אָדָם
הוסף את תלות הספרייה הבאה לקובץ build.gradle
שלך:
implementation 'com.google.android.gms:play-services-ads:23.0.0'
implementation 'com.google.firebase:firebase-analytics:21.6.1'
implementation 'com.google.firebase:firebase-config:21.6.3'
אַחְדוּת
הורד והתקן את Firebase Unity SDK, ולאחר מכן הוסף את חבילות Unity הבאות לפרויקט שלך:
-
FirebaseAnalytics.unitypackage
-
FirebaseRemoteConfig.unitypackage
הגדר מופע תצורה מרחוק
כדי להשתמש בערכי הפרמטרים של Remote Config, הגדר את מופע Config Remote כך שהוא מוגדר להביא ערכים חדשים עבור מופע אפליקציית הלקוח.
בדוגמה זו, Config Remote מוגדר לבדוק ערכי פרמטרים חדשים אחת לשעה.
מָהִיר
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)
אַחְדוּת
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 כך שהוא יוכל להתחיל להשתמש בערכי הפרמטר החדשים.
תרצה לבצע את השיחה הזו מוקדם ככל האפשר בשלב הטעינה של האפליקציה שלך מכיוון שהשיחה הזו היא אסינכרונית ותצטרך לאחזר מראש את ערך התצורה המרוחקת כדי שהאפליקציה שלך תדע איזו מודעה להציג.
מָהִיר
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()
}
אַחְדוּת
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 שהוגדרה קודם לכן במדריך זה.
השתמש בערך של פרמטר Config Remote
השתמש בערך ה-Remote Config שאוחזר מראש בפונקציה 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.
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
}
})
}
אַחְדוּת
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
Objective-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 : הגדר בדיקת A/B במסוף Firebaseשלב 4 : התחל את בדיקת A/B ובדוק את תוצאות הבדיקה