الإعلانات البينية هي إعلانات بملء الشاشة تغطي واجهة التطبيق إلى أن يغلقها المستخدم. ويتم عرضها عادةً في نقاط انتقال مناسبة خلال مسار عرض التطبيق، على سبيل المثال بين الأنشطة أو في الوقت الفاصل بين مستويَين في لعبة. عندما يعرض تطبيق إعلانًا بينيًا، يمكن للمستخدم النقر على الإعلان والمتابعة إلى وجهته أو إغلاقه والعودة إلى التطبيق. دراسة حالة
يوضّح لك هذا الدليل كيفية دمج الإعلانات البينية في تطبيقات 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إلى AndroidActivityأو مؤشر إلى iOSUIView.// 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.
- مزيد من المعلومات عن استهداف الإعلانات وإرشادات الإعلانات البينية