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

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

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

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

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

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

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

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

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

لمزيد من المعلومات عن آلية عمل الإعلانات التجريبية لحزمة تطوير البرامج (SDK) للإعلانات على الأجهزة الجوّالة، اطّلِع على إعلانات تجريبية.

التنفيذ

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

  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 للإشارة إلى نظام التشغيل Android Activity أو مؤشّرًا إلى 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، يُرجى الاطّلاع على استخدام العقود الآجلة لمراقبة حالة اكتمال طلبات الطريقة.

تحميل إعلان

يتم تحميل الإعلان باستخدام الإجراء 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

برامج تعليمية للفيديو في "إعلانات Google" على الأجهزة الجوّالة

قصص النجاح

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