برنامج تعليمي: تحسين النموذج المختلط لتحقيق الأرباح باستخدام AdMob و"إحصاءات Google" وFirebase

الخطوة 3: إعداد Firebase Remote Config لعرض تجارب إعلانية محدّدة


مقدمة: تحسين نموذج تحقيق الأرباح المختلط باستخدام AdMob وGoogle Analytics وFirebase
الخطوة 1: استخدِم AdMob لإنشاء وحدات إعلانية جديدة لعرض الإعلانات
الخطوة 2: إعداد إحصاءات Google

الخطوة 3: إعداد Firebase Remote Config لعرض تجارب إعلانية معيّنة


في نهاية الخطوة الأخيرة، تعرّفت على شرائح الجمهور في "إحصاءات Google". في هذه الخطوة، ستنشئ مَعلمة Remote Config يتم التحكّم فيها بقيمة منطقية (تُسمى ad_control_switch) وتستفيد من شريحة الجمهور "المشترون". بعد ذلك، ستضيف منطقًا إلى الرمز البرمجي لتطبيقك لتحديد ما يجب أن يعرضه تطبيقك استنادًا إلى قيمة تلك المَعلمة.

إعداد مَعلمات Remote Config والشروط في Firebase

  1. في وحدة تحكّم Firebase، افتح مشروعك على Firebase.

  2. في اللوحة اليمنى، وسِّع قسم التفاعل، ثم اختَر Remote Config.

  3. انقر على إنشاء إعداد (أو إضافة مَعلمة إذا سبق لك استخدام Remote Config).

  4. في لوحة إنشاء مَعلمة، أكمِل الخطوات التالية:

    1. في حقل اسم المَعلمة، أدخِل ad_control_switch.

    2. من القائمة المنسدلة Data type، اختَر قيمة منطقية.

    3. انقر على إنشاء جديد، ثم اختَر إنشاء شرط جديد.

  5. في مربّع الحوار تحديد شرط جديد، أكمِل الخطوات التالية:

    1. في حقل الاسم، أدخِل Purchasers Group (أو أي اسم آخر يمكن التعرّف عليه بسهولة للحالة).

    2. من القائمة المنسدلة ينطبق في حال...، اختَر شرائح جمهور المستخدمين.

    3. من القائمة المنسدلة اختيار شرائح الجمهور، اختَر المشترون.

    4. انقر على حفظ الشرط.

  6. في لوحة إنشاء مَعلمة، أكمِل الخطوات التالية:

    1. بالنسبة إلى قيمة مجموعة المشترين، اختَر false.

    2. بالنسبة إلى القيمة التلقائية، اختَر true.

  7. انقر على حفظ، ثم على نشر التغييرات.

سيتحقّق هذا الإعداد ممّا إذا كان المستخدم ضمن شريحة الجمهور "المشترون" (أي أنّه مستخدم يدفع مقابل الخدمة):

  • إذا كان المستخدم ضمن شريحة الجمهور "المشترون"، ستعرض الدالة Remote Config قيمة false للمَعلمة ad_control_switch.

  • إذا لم يكن المستخدِم ضمن شريحة الجمهور "المشترون"، ستعرض الدالة Remote Config قيمة true للمَعلمة ad_control_switch.

في الخطوات التالية، ستنفّذ Remote Config في تطبيقك للتعامل مع قيم هذه المَعلمات.

إضافة حزمة تطوير البرامج (SDK) الخاصة بـ Remote Config إلى تطبيقك

قبل استخدام Remote Config في الرمز البرمجي لتطبيقك، أضِف حزمة تطوير البرامج (SDK) الخاصة بـ Remote Config إلى قاعدة الرموز البرمجية لتطبيقك. يُرجى العِلم أنّه يجب أن يتضمّن تطبيقك حزمة تطوير البرامج (SDK) الخاصة بـ Google Mobile Ads (AdMob) وحزمة تطوير البرامج (SDK) الخاصة بخدمة "إحصاءات Google لبرنامج Firebase" من الخطوات السابقة في هذا البرنامج التعليمي.

Swift

أضِف مجموعة الإعلانات المتسلسلة Remote Config وثبِّتها في ملف podfile:

pod 'Firebase/RemoteConfig'

Android

أضِف تبعية مكتبة Remote Config إلى ملف build.gradle:

implementation 'com.google.firebase:firebase-config:23.1.0'

Flutter

من جذر مشروع Flutter، شغِّل الأمر التالي لتثبيت المكوّن الإضافي Remote Config:

flutter pub add firebase_remote_config

Unity

نزِّل أحدث إصدار من Firebase Unity SDK وثبِّته، ثم أضِف حزمة Remote Config إلى مشروعك:
FirebaseRemoteConfig.unitypackage

ضبط مثيل Remote Config

لكي يتمكّن تطبيقك من استخدام قيم المَعلمة Remote Config، اضبط نسخة Remote Config الافتراضية على استرجاع قيم جديدة لنسخة تطبيق العميل الافتراضية.

في هذا المثال، تم ضبط Remote Config للبحث عن قيم مَعلمات جديدة مرة واحدة كل ساعة.

Swift

remoteConfig = RemoteConfig.remoteConfig()
let settings = RemoteConfigSettings()
settings.minimumFetchInterval = 3600
remoteConfig.configSettings = settings

Kotlin

remoteConfig = Firebase.remoteConfig
val configSettings = remoteConfigSettings {
    minimumFetchIntervalInSeconds = 3600
}
remoteConfig.setConfigSettingsAsync(configSettings)

Java

mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
        .setMinimumFetchIntervalInSeconds(3600)
        .build();
mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);

Flutter

remoteConfig = FirebaseRemoteConfig.instance;
  final configSettings = FirebaseRemoteConfigSettings(
    minimumFetchInterval: Duration(hours: 1),
  );
  await remoteConfig.setConfigSettings(configSettings);

  // Use the `onConfigUpdated` callback to listen for changes to the config settings.
  remoteConfig.onConfigUpdated.listen((_) {
    print('Config settings confirmed');
  });

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

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

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

Flutter

remoteConfig = FirebaseRemoteConfig.instance;

// Fetch and activate the latest Remote Config values.
final updated = await remoteConfig.fetchAndActivate();

// Check if the config params were updated successfully.
if (updated) {
  print('Config params updated');
} else {
  print('Config params failed to update');
}

// Load the ad unit.
_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 التي أنشأتها سابقًا في هذه الخطوة.

استخدام قيمة المَعلمة Remote Config

استخدِم قيمة Remote Config التي تم استرجاعها مُسبقًا في الدالة loadAdUnit() لتحديد ما إذا كان يجب أن تنفّذ نسخة التطبيق أحد الإجراءات التالية:

  • تؤدي قيمة المَعلمة ad_control_switch إلى true: عرض الإعلان البيني (لأنّ المستخدم لا يدفع مقابل استخدام التطبيق).

  • يتم تحديد قيمة المَعلمة ad_control_switch على أنّها false: لا تعرض الإعلان (لأنّ المستخدم يدفع مقابل الخدمة).

Swift

private func loadAdUnit() {
  let showAds = remoteConfig["ad_control_switch"].boolValue

  if showAds {
    // Load interstitial ad (implemented ad unit)
    // per AdMob instructions (the first step of this tutorial).
  } else {
    // Don't show ads.
  }
}

Kotlin

private fun loadAdUnit() {
  var showAds = remoteConfig.getBoolean(ad_control_switch)

  if (showAds) {
      // Load interstitial ad (implemented ad unit)
      // per AdMob instructions (the first step of this tutorial).
    } else {
      // Don't show ads.
    }
}

Java

private void loadAdUnit() {
    boolean showAds =
      mFirebaseRemoteConfig.getBoolean(ad_control_switch);

    if (showAds) {
      // Load interstitial ad (implemented ad unit)
      // per AdMob instructions (the first step of this tutorial).
    } else {
      // Don't show ads.
    }
}

Flutter

void _loadAdUnit() {
  bool showAds = remoteConfig.getBool(ad_control_switch);

  if (showAds) {
    // Load interstitial ad (implemented ad unit)
    // per AdMob instructions (the first step of this tutorial).
  } else {
    // Don't show ads.
  }
}

Unity

void LoadAdUnit() {
  bool showAds =
      remoteConfig.GetValue("ad_control_switch").BooleanValue;

  if (showAds) {
    // Load interstitial ad (implemented ad unit)
    // per AdMob instructions (the first step of this tutorial).
  } else {
    // Don't show ads.
  }
}

إصدار تطبيقك

بما أنّ منطق عرض الإعلان أو عدم عرضه مضمّن في قاعدة الرموز البرمجية، عليك طرح إصدار جديد من تطبيقك يتضمّن هذا المنطق.

إذا اتّبعت خطوات هذا الفيديو التعليمي، من المفترض أن يبدأ تطبيقك على الفور في تقديم تجربة إعلانات مخصّصة داخل التطبيق للمستخدمين. يمكنك تتبُّع أرباح إعلاناتك في حسابك على AdMob وفي لوحات بيانات &quot;إحصاءات Google&quot; (إما في وحدة تحكّم Firebase أو واجهة مستخدم &quot;إحصاءات Google&quot;).


هذا كل ما في الأمر. لقد أكملت البرنامج التعليمي لتحسين تحقيق الربح المختلط باستخدام AdMob و"إحصاءات Google" وFirebase.




الخطوة 2: إعداد "إحصاءات Google"