الإعلانات البينية هي إعلانات بملء الشاشة تغطي واجهة التطبيق إلى أن يقفلها المستخدم. وعادةً ما تظهر هذه الإعلانات في نقاط انتقال مناسبة خلال مسار عرض التطبيق، على سبيل المثال بين الأنشطة أو في الوقت الفاصل بين مستويات في لعبة. عندما يعرض تطبيق إعلانًا بينيًا، يمكن للمستخدم النقر على الإعلان والمتابعة إلى وجهته أو إغلاقه والعودة إلى التطبيق. دراسة حالة
يوضّح لك هذا الدليل كيفية دمج الإعلانات البينية في تطبيقات Android وiOS باستخدام حزمة تطوير البرامج (SDK) لإعلانات Google على الأجهزة الجوّالة بتنسيق C++.
المتطلبات الأساسية
- أكمِل البدء.
- (نظام التشغيل Android فقط) يجب أن تكون على دراية بالعمل مع مراجع JNI
jobject
(اطّلِع على نصائح حول JNI في Android).
إجراء الاختبار دائمًا باستخدام الإعلانات الاختبارية
عند إنشاء تطبيقاتك واختبارها، احرص على استخدام إعلانات اختبارية بدلاً من الإعلانات المنشورة. وقد يؤدي عدم إجراء ذلك إلى تعليق حسابك.
إنّ أسهل طريقة لتحميل الإعلانات الاختبارية هي استخدام رقم تعريف الوحدة الإعلانية الاختبارية المخصّص لإعلانات الوسائط البينية، والذي يختلف حسب نظام التشغيل على الجهاز:
- نظام تشغيل Android:
ca-app-pub-3940256099942544/1033173712
- نظام تشغيل iOS:
ca-app-pub-3940256099942544/4411468910
تم إعدادها خصيصًا لعرض إعلانات اختبارية لكل طلب، و يمكنك استخدامها في تطبيقاتك أثناء الترميز والاختبار وتحديد الأخطاء وإصلاحها. ما عليك سوى استبداله برقم تعريف وحدتك الإعلانية قبل نشر تطبيقك.
لمزيد من المعلومات عن آلية عمل الإعلانات الاختبارية لحزمة "SDK لإعلانات Google على الأجهزة الجوّالة"، اطّلِع على مقالة الإعلانات الاختبارية.
التنفيذ
في ما يلي الخطوات الرئيسية لدمج الإعلانات البينية:
- حمِّل إعلانًا.
- سجِّل للحصول على مكالمات هاتفية.
- عرض الإعلان ومعالجة أحداث مساره
ضبط InterstitialAd
يتم عرض الإعلانات البينية في عناصر InterstitialAd
، لذا فإنّ الخطوة الأولى
نحو دمج الإعلانات البينية في تطبيقك هي إنشاء عنصر
InterstitialAd
وإعداده.
أضِف العنوان التالي إلى رمز C++ الخاص بتطبيقك:
#include "firebase/gma/interstial_ad.h"
يمكنك تحديد كائن
InterstitialAd
وإنشاء مثيل له:firebase::gma::InterstitialAd* interstitial_ad; interstitial_ad = new firebase::gma::InterstitialAd();
يمكنك بدء مثيل
InterstitialAd
باستخدام عرض رئيسي تم تحويله إلى نوعAdParent
. عرض الصفحة الرئيسية هوjobject
JNI يشير إلى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);
كبديل عن الاحتفاظ بالمستقبل كمتغيّر، يمكنك بشكل دوري التحقّق من حالة عملية الإعداد من خلال استدعاء
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
المثبَّت الذي سيتم استدعاؤه عندما ينتهي المستخدم من التفاعل مع الإعلان. بالإضافة إلى ذلك، ننصحك بالتوقف مؤقتًا عن تنفيذ أي مهام حسابية مكثفة (مثل حلقة لعبة) أثناء عرض الإعلان. سيضمن ذلك عدم ظهور رسومات بطيئة أو غير متجاوبة أو فيديو متقطّع للمستخدم. - يجب الانتظار لفترة كافية لتحميل المحتوى.
- تمامًا كما أنّه من المهم التأكّد من عرض الإعلانات البينية في وقت مناسب، من المهم أيضًا التأكّد من أنّ المستخدم لا ينتظر loading لتحميلها. يمكن أن يؤدي تحميل الإعلان مسبقًا قبل أن تنوي عرضه إلى ضمان أنّ تطبيقك يحتوي على إعلان بيني محمَّل بالكامل وجاهز للعرض عند حلول وقته.
- لا تغمر المستخدم بالإعلانات.
- على الرغم من أنّ زيادة معدّل تكرار الإعلانات البينية في تطبيقك قد تبدو كطريقة رائعة لزيادة الأرباح، إلا أنّها يمكن أن تؤدي أيضًا إلى خفض تجربة المستخدم وانخفاض معدّلات النقر إلى المحتوى. تأكَّد من عدم انقطاع عملية استخدام المستخدمين لتطبيقك بشكل متكرر .
- لا تستخدِم المستقبل المرتبط باكتمال التحميل لعرض الإعلان البيني.
- يمكن أن يؤدي ذلك إلى ترك انطباع سيئ لدى المستخدم. بدلاً من ذلك، حمِّل الإعلان مسبقًا قبل الحاجة إلى عرضه.
مراجع إضافية
مثال في GitHub
- يمكنك الاطّلاع على رمز المصدر لمثال تطبيق البدء السريع على GitHub.
الأدلة التعليمية بالفيديو في "متجر الإعلانات على الأجهزة الجوّالة"
قصص النجاح
الخطوات التالية
- أنشِئ وحدتك الإعلانية البينية في واجهة مستخدم AdMob، إذا لم يسبق لك ذلك.
- اطّلِع على مزيد من المعلومات عن استهداف الإعلانات وإرشادات الإعلانات البينية.