الإعلانات البينية


"الإعلانات البينية" هي إعلانات بملء الشاشة تغطي واجهة التطبيق إلى أن يغلقها المستخدم. ويتم عرضها عادةً في نقاط انتقال طبيعية خلال مسار عرض التطبيق، على سبيل المثال بين الأنشطة أو في الوقت الفاصل بين مستويَين في لعبة. عندما يعرض تطبيق "إعلانًا بينيًا"، يمكن للمستخدم إما النقر على الإعلان والانتقال إلى وجهته أو إغلاقه والعودة إلى التطبيق. دراسة حالة:

يوضّح لك هذا الدليل كيفية دمج "الإعلانات البينية" في تطبيقات Android وiOS باستخدام حزمة "SDK لإعلانات Google على الأجهزة الجوّالة" الخاصة بتطبيقات ++C.

المتطلبات الأساسية

  • أكمِل خطوات البدء.
  • (نظام التشغيل Android فقط) الإلمام بالعمل مع مراجع JNI jobject (راجِع نصائح Android JNI).

اختبِر دائمًا باستخدام الإعلانات الاختبارية

عند إنشاء تطبيقاتك واختبارها، تأكَّد من استخدام الإعلانات الاختبارية بدلاً من الإعلانات المباشرة والإنتاجية. وقد يؤدي عدم إجراء ذلك إلى تعليق حسابك.

أسهل طريقة لتحميل الإعلانات الاختبارية هي استخدام معرّف الوحدة الإعلانية الاختبارية المخصّص للإعلانات البينية، والذي يختلف حسب نظام تشغيل الجهاز:

  • نظام تشغيل Android:‏ ca-app-pub-3940256099942544/1033173712
  • نظام تشغيل iOS:‏ ca-app-pub-3940256099942544/4411468910

وقد تم ضبطها خصيصًا لعرض إعلانات اختبارية لكل طلب، ويمكنك استخدامها في تطبيقاتك أثناء الترميز والاختبار وتصحيح الأخطاء. ما عليك سوى التأكّد من استبداله بمعرّف الوحدة الإعلانية الخاص بك قبل نشر تطبيقك.

لمزيد من المعلومات عن طريقة عمل الإعلانات الاختبارية في حزمة "SDK لإعلانات Google على الأجهزة الجوّالة"، يُرجى الاطّلاع على الإعلانات الاختبارية.

التنفيذ

في ما يلي الخطوات الرئيسية لدمج "الإعلانات البينية":

  1. حمِّل إعلانًا.
  2. التسجيل لتلقّي عمليات معاودة الاتصال
  3. عرض الإعلان ومعالجة الأحداث التي تتم في مراحل نشاطه

ضبط إعدادات InterstitialAd

يتم عرض "الإعلانات البينية" في عناصر InterstitialAd، لذا فإن الخطوة الأولى لدمج "الإعلانات البينية" في تطبيقك هي إنشاء عنصر InterstitialAd وإعداده.

  1. أضِف العنوان التالي إلى رمز C++‎ الخاص بتطبيقك:

     #include "firebase/gma/interstial_ad.h"

  2. أعلِن عن عنصر InterstitialAd وأنشئه:

     firebase::gma::InterstitialAd* interstitial_ad;
     interstitial_ad = new firebase::gma::InterstitialAd();

  3. ابدأ مثيل InterstitialAd باستخدام العرض المخصَّص للوالدَين الذي تم تحويله إلى نوع AdParent. العرض المخصَّص للوالدَين هو مرجع JNI jobject إلى Activity في Android أو مؤشر إلى UIView في iOS.

    // my_ad_parent is a jobject reference to an Android Activity or
    // a pointer to an iOS UIView.
    firebase::gma::AdParent ad_parent =
      static_cast<firebase::gma::AdParent>(my_ad_parent);
    firebase::Future<void> result = interstitial_ad->Initialize(ad_parent);
    
  4. كبديل للاحتفاظ بالمستقبل كمتغيّر، يمكنك التحقّق بشكل دوري من حالة عملية الإعداد من خلال استدعاء InitializeLastResult() على عنصر InterstitialAd. قد يكون هذا مفيدًا لتتبُّع عملية الإعداد في حلقة الألعاب العامة.

    // Monitor the status of the future in your game loop:
    firebase::Future<void> result = interstitial_ad->InitializeLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      // Initialization completed.
      if(future.error() == firebase::gma::kAdErrorCodeNone) {
        // Initialization successful.
      } else {
        // An error has occurred.
      }
    } else {
      // Initialization on-going.
    }
    

لمزيد من المعلومات حول العمل مع firebase::Future، يُرجى الاطّلاع على استخدام Futures لمراقبة حالة اكتمال طلبات الإجراء.

تحميل إعلان

يتم تحميل الإعلان باستخدام طريقة LoadAd() في عنصر InterstitialAd. تتطلّب طريقة التحميل أن تكون قد بدأت عنصر InterstitialAd، وأن يكون لديك معرّف الوحدة الإعلانية وعنصر AdRequest. يتم عرض firebase::Future يمكنك استخدامه لمراقبة حالة عملية التحميل ونتيجتها.

يوضّح الرمز التالي كيفية تحميل إعلان بعد إعداد InterstitialAd بنجاح:

firebase::gma::AdRequest ad_request;
firebase::Future<firebase::gma::AdResult> load_ad_result;
load_ad_result = interstitial_ad->LoadAd(interstitial_ad_unit_id, ad_request);

التسجيل لتلقّي عمليات معاودة الاتصال

يجب تمديد الفئة FullScreenContentListener لتلقّي إشعارات بشأن عرض "الإعلانات البينية" والأحداث التي تتم في مراحل نشاطها. يمكن تسجيل الفئة الفرعية المخصّصة FullScreenContentListener من خلال الطريقة InterstitialAd::SetFullScreenContentListener()، وستتلقّى عمليات استدعاء عند عرض الإعلان بنجاح أو عدم نجاحه، وكذلك عند إغلاقه.

يوضّح الرمز التالي كيفية توسيع الفئة وتعيينها للإعلان:

  class ExampleFullScreenContentListener
      : public firebase::gma::FullScreenContentListener {

   public:
    ExampleFullScreenContentListener() {}

    void OnAdClicked() override {
      // This method is invoked when the user clicks the ad.
    }

    void OnAdDismissedFullScreenContent() override {
     // This method is invoked when the ad dismisses full screen content.
    }

    void OnAdFailedToShowFullScreenContent(const AdError& error) override {
      // This method is invoked when the ad failed to show full screen content.
      // Details about the error are contained within the AdError parameter.
    }

    void OnAdImpression() override {
      // This method is invoked when an impression is recorded for an ad.
    }

    void OnAdShowedFullScreenContent() override {
      // This method is invoked when the ad showed its full screen content.
    }
  };

  ExampleFullScreenContentListener* full_screen_content_listener =
    new ExampleFullScreenContentListener();
  interstitial_ad->SetFullScreenContentListener(full_screen_content_listener);

‫InterstitialAd هو عنصر يُستخدم لمرة واحدة. وهذا يعني أنّه بعد عرض "إعلان بيني"، لا يمكن عرضه مرة أخرى. من أفضل الممارسات تحميل إعلان بيني آخر في طريقة OnAdDismissedFullScreenContent() من FullScreenContentListener بحيث يبدأ تحميل الإعلان البيني التالي فور إغلاق الإعلان السابق.

عرض الإعلان

يجب عرض "الإعلانات البينية" خلال فواصل طبيعية في مسار التطبيق، مثلاً بين مستويات اللعبة أو بعد إكمال المستخدم لمهمة معيّنة. على الرغم من أنّه يمكن استخدام FullScreenContentListener لتحديد وقت عرض الإعلان لمحتواه بملء الشاشة، فإنّ المستقبل الذي يعرضه Show() سيشير أيضًا إلى وقت عرض الإعلان بنجاح.

  firebase::Future<void> result = interstitial_ad->Show();

أفضل الممارسات

فكِّر في ما إذا كانت "الإعلانات البينية" هي النوع المناسب من الإعلانات لتطبيقك.
تعمل "الإعلانات البينية" بشكل أفضل في التطبيقات التي تتضمّن نقاط انتقال طبيعية. ويتم إنشاء هذه النقاط عند إكمال مهمة في التطبيق، مثل مشاركة صورة أو إكمال أحد مستويات اللعبة. بما أنّ المستخدم يتوقّع فاصلاً في النشاط، من السهل عرض "إعلان بيني" بدون التأثير سلبًا في تجربته. تأكَّد من تحديد المواضع التي ستعرض فيها "الإعلانات البينية" في سير عمل تطبيقك، وكيفية استجابة المستخدم لها.
تذكَّر إيقاف الإجراء مؤقتًا عند عرض "إعلان بيني".
هناك عدة أنواع مختلفة من "الإعلانات البينية": النصية والمصوّرة والفيديو وغيرها. من المهم التأكّد من أنّه عندما يعرض تطبيقك "إعلانًا بينيًا"، يتم أيضًا تعليق استخدام بعض الموارد للسماح للإعلان بالاستفادة منها. على سبيل المثال، عند إجراء طلب لعرض إعلان بيني، تأكَّد من إيقاف أي مخرجات صوتية مؤقتًا من تطبيقك. ويمكنك استئناف تشغيل الأصوات في طريقة OnAdDismissedFullScreenContent من FullScreenContentListener المثبَّتة التي سيتم استدعاؤها عندما ينتهي المستخدم من التفاعل مع الإعلان. بالإضافة إلى ذلك، ننصحك بإيقاف أي مهام حسابية مكثّفة مؤقتًا (مثل حلقة الألعاب) أثناء عرض الإعلان. سيضمن ذلك عدم مواجهة المستخدم لرسومات بطيئة أو غير مستجيبة أو فيديو متقطّع.
يجب تخصيص وقت كافٍ للتحميل.
كما أنّه من المهم التأكّد من عرض "الإعلانات البينية" في وقت مناسب، من المهم أيضًا التأكّد من أنّ المستخدم لا يضطر إلى الانتظار حتى يتم تحميلها. يمكن أن يضمن تحميل الإعلان مسبقًا قبل عرضه أن يكون لدى تطبيقك إعلان بيني محمّل بالكامل وجاهز للعرض عندما يحين وقت عرضه.
لا تُغرِق المستخدم بالإعلانات.
قد تبدو زيادة معدّل تكرار "الإعلانات البينية" في تطبيقك طريقة رائعة لزيادة الإيرادات، لكنّها قد تؤدي أيضًا إلى تدهور تجربة المستخدم وانخفاض نسب النقر إلى الظهور. تأكَّد من عدم مقاطعة المستخدمين بشكل متكرر لدرجة تمنعهم من الاستمتاع باستخدام تطبيقك.
لا تستخدِم مستقبل اكتمال التحميل لعرض الإعلان البيني.
قد يؤدي ذلك إلى ترك انطباع سيئ لدى المستخدم. بدلاً من ذلك، يمكنك تحميل الإعلان مسبقًا قبل الحاجة إلى عرضه.

مراجع إضافية

مثال في GitHub

الفيديوهات التعليمية في Mobile Ads Garage

قصص النجاح

الخطوات التالية