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