برنامج تعليمي: اختبار استخدام أشكال إعلانات AdMob الجديدة

الخطوة 3: التعامل مع قيم مَعلمات "الإعداد عن بُعد" في رمز تطبيقك


مقدّمة: اختبار استخدام أشكال إعلانات AdMob الجديدة باستخدام Firebase
الخطوة 1: استخدام AdMob لإنشاء صيغة جديدة للوحدة الإعلانية من أجل الاختبار
الخطوة 2: إعداد اختبار أ/ب في وحدة تحكُّم Firebase

الخطوة 3: التعامل مع قيم مَعلمات "الإعداد عن بُعد" في رمز تطبيقك

الخطوة 4: بدء اختبار أ/ب ومراجعة نتائج الاختبار في وحدة تحكّم Firebase
الخطوة 5: تحديد ما إذا كنت ستطرح شكل الإعلان الجديد


في نهاية الخطوة الأخيرة، أنشأت مَعلمة "الإعداد عن بُعد" (SHOW_NEW_AD_KEY). في هذه الخطوة، عليك إضافة المنطق إلى رمز تطبيقك لما يجب أن يعرضه تطبيقك استنادًا إلى قيمة تلك المَعلمة: true (اعرض الإعلان الجديد) في مقابل false (عدم عرض الإعلان الجديد).

إضافة حِزم تطوير البرامج (SDK) المطلوبة

قبل استخدام ميزة "الإعداد عن بُعد" في رمز تطبيقك، أضِف كلاً من حزمة تطوير البرامج (SDK) الخاصة بالإعداد عن بُعد وحزمة تطوير البرامج (SDK) لمنصّة Firebase الخاصة بخدمة "إحصاءات Google" إلى ملفات تصميم مشروعك.

منصات Apple

أضِف المجموعات التالية وثبِّتها في ملف podfile:

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

Android

أضِف ملحقات المكتبة التالية إلى ملف build.gradle:

implementation 'com.google.android.gms:play-services-ads:23.1.0'
implementation 'com.google.firebase:firebase-analytics:22.0.2'
implementation 'com.google.firebase:firebase-config:22.0.0'

Unity

نزِّل حزمة تطوير البرامج (SDK) لمنصّة Firebase Unity وثبِّتها، ثم أضِف حِزم Unity التالية إلى مشروعك:

  • FirebaseAnalytics.unitypackage
  • FirebaseRemoteConfig.unitypackage

ضبط النسخة الافتراضية من ميزة "الإعداد عن بُعد"

لاستخدام قيم مَعلمات "الإعداد عن بُعد"، اضبط مثيل "الإعداد عن بُعد" ليتم إعداده لاسترجاع قيم جديدة لمثيل تطبيق العميل.

في هذا المثال، تم ضبط ميزة "الإعداد عن بُعد" للبحث عن قيم المَعلمات الجديدة مرة كل ساعة.

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

استرجاع إعدادات ميزة "الإعداد عن بُعد" وتفعيلها

يمكنك جلب مَعلمات "الإعداد عن بُعد" وتفعيلها لبدء استخدام قيم المَعلمات الجديدة.

سيلزمك إجراء هذه المكالمة في أقرب وقت ممكن في مرحلة تحميل تطبيقك لأن هذا الاستدعاء غير متزامن وستحتاج إلى جلب قيمة "الإعداد عن بُعد" مسبقًا حتى يعرف تطبيقك ما إذا كان سيعرض الإعلان أم لا.

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

تطبيقك جاهز الآن للتعامل مع معلمة "الإعداد عن بُعد" التي أنشأتها أثناء اختبار A/B الذي أعددته سابقًا في هذا البرنامج التعليمي.

استخدام قيمة مَعلمة "الإعداد عن بُعد"

يمكنك استخدام قيمة "الإعداد عن بُعد" التي تم استرجاعها مسبقًا في دالة loadAdUnit() لتحديد ما إذا كان مثيل التطبيق سيعرض (قيمة المَعلمة true) أو لا يعرض (قيمة المَعلمة false) الوحدة الإعلانية الجديدة للإعلانات البينية التي تضم مكافأة.

Swift

private func loadAdUnit() {
  let showNewAdFormat = remoteConfig["users"].boolValue
  if showNewAdFormat {
      // Load Rewarded Interstitial Ad.
      // This should load your new implemented ad unit
      // as per AdMob instructions (the first step of this tutorial).
  } else {
    // Show the existing ad unit.
  }
}

Objective-C

- (void)loadAdUnit {
    BOOL showAds = self.remoteConfig[@"SHOW_NEW_AD_KEY"].boolValue;
    if (showAds) {
      // Load Rewarded Interstitial Ad.
      // This should load your new implemented ad unit
      // per AdMob instructions (the first step of this tutorial).
    } else {
      // Show the existing ad unit.
    }
}

Java

private void loadAdUnit() {
    boolean showNewAdFormat =
      mFirebaseRemoteConfig.getBoolean(SHOW_NEW_AD_KEY);

    if (showNewAdFormat) {
      // Load Rewarded Interstitial Ad.
      // This should load your new implemented ad unit
      // per AdMob instructions (the first step of this tutorial).
    } else {
      // Show the existing ad unit.
    }
}

Kotlin+KTX

private fun loadAdUnit() {
  var showNewAdFormat = remoteConfig.getBoolean(SHOW_NEW_AD_KEY)

  if (showNewAdFormat) {
      // Load Rewarded Interstitial Ad.
      // This should load your new implemented ad unit
      // per AdMob instructions (the first step of this tutorial).
    } else {
      // Show the existing ad unit.
    }
}

Unity

void LoadAdUnit() {
  bool showNewAdFormat =
      remoteConfig.GetValue("SHOW_NEW_AD_KEY").BooleanValue;

  if (showNewAdFormat) {
    // Load Rewarded Interstitial Ad (new implemented ad unit)
    // per AdMob instructions (the first step of this tutorial).
  } else {
    // Show the existing ad unit.
  }
}

إضافة عمليات تحقّق أخرى لقيمة المَعلمة

هناك أجزاء أخرى في رمز التطبيق ستحتاج إلى التحقّق من قيمة مَعلمة "الإعداد عن بُعد" هذه لتحديد تجربة الإعلانات التي سيتم تحميلها. على سبيل المثال، يمكنك تحديد ما إذا كنت تريد إعادة تحميل الإعلان بعد انتهاء المستخدم من مشاهدة الإعلان الحالي.

يجب إجراء استدعاءات الجلب والتفعيل أولاً للحصول على أي تغييرات في قيمة المعلمة - على سبيل المثال، إذا قررت إنهاء تجربة جديدة أو إنشائها.

ومن هناك، يمكنك دائمًا التحقق من قيمة المعلمة باستخدام الطلبات التالية:

Swift

remoteConfig["showNewAdKey"].boolValue

Objective-C

self.remoteConfig[@"SHOW_NEW_AD_KEY"].boolValue;

Java

mFirebaseRemoteConfig.getBoolean(SHOW_NEW_AD_KEY)

Kotlin+KTX

remoteConfig.getBoolean(SHOW_NEW_AD_KEY)

Unity

remoteConfig.GetValue("SHOW_NEW_AD_KEY").BooleanValue

ستعرض هذه الطلبات دائمًا القيمة نفسها لمثيل التطبيق استنادًا إلى ما إذا كان قد تم وضعه في مجموعة التحكّم أو مجموعة صيغ الإعلانات الجديدة، ما لم يتم إجراء أي تغييرات في "وحدة تحكُّم Firebase" تم جلبها وتفعيلها في الطلبات السابقة.




الخطوة 2: إعداد اختبار أ/ب في "وحدة تحكُّم Firebase" الخطوة 4: بدء اختبار أ/ب ومراجعة نتائج الاختبار