برنامج تعليمي: تحسين النموذج المختلط لتحقيق الأرباح باستخدام 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. في اللوحة على يمين الصفحة، وسِّع قسم التفاعل، ثم اختَر الإعداد عن بُعد:

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

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

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

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

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

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

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

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

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

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

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

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

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

  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:22.0.0'

Flutter

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

flutter pub add firebase_remote_config

Unity

نزِّل أحدث إصدار وثبِّته. حزمة تطوير البرامج (SDK) Unity من Firebase، ثم إضافة حزمة 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+KTX

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

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+KTX

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" وفي "إحصاءات Google" لوحات البيانات (إما في وحدة تحكم Firebase أو واجهة مستخدم "إحصاءات Google").


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




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