מדריך: מטב את תדירות המודעות של AdMob

שלב 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 ובדוק את תוצאות הבדיקה