الإعلانات البينية هي إعلانات بملء الشاشة تغطي واجهة التطبيق المضيف. وعادةً ما تظهر هذه الإعلانات في نقاط انتقال مناسبة خلال مسار عرض التطبيق، مثلاً أثناء فترة الإيقاف المؤقت بين المستويات في الألعاب. عندما يعرض أحد التطبيقات إعلانًا بينيًا، يمكن للمستخدم النقر على الإعلان ومواصلة الانتقال إلى وجهته أو إغلاقه والعودة إلى التطبيق. دراسة حالة
يشرح هذا الدليل كيفية دمج الإعلانات البينية في تطبيق Unity.
المتطلبات الأساسية
- أكمِل دليل البدء.
إنشاء إعلان بيني
الخطوة الأولى لعرض إعلان بيني هي إنشاء عنصر InterstitialAd
في نص برمجي مرفق بعنصر GameObject
.
using GoogleMobileAds.Api;
...
private InterstitialAd interstitial;
private void RequestInterstitial()
{
#if UNITY_ANDROID
string adUnitId = "ca-app-pub-3940256099942544/1033173712";
#elif UNITY_IPHONE
string adUnitId = "ca-app-pub-3940256099942544/4411468910";
#else
string adUnitId = "unexpected_platform";
#endif
// Initialize an InterstitialAd.
this.interstitial = new InterstitialAd(adUnitId);
}
يحتوي مُنشئ InterstitialAd
على المَعلمة التالية:
adUnitId
: رقم تعريف الوحدة الإعلانية في AdMob التي يجب أنInterstitialAd
تحمّل الإعلانات منها.
من المهمّ ملاحظة كيفية استخدام الوحدات الإعلانية المختلفة، استنادًا إلى المنصّة. ستحتاج إلى استخدام وحدة إعلانية على iOS لتقديم طلبات الإعلانات على iOS و وحدة إعلانية على Android لتقديم الطلبات على Android.
الاختبار دائمًا باستخدام الإعلانات الاختبارية
يحتوي نموذج الرمز أعلاه على معرّف وحدة إعلانية، ويمكنك طلب الإعلانات باستخدامه. تم إعداده خصيصًا لعرض الإعلانات الاختبارية بدلاً من الإعلانات العلنية لكل طلب، ما يجعله آمنًا للاستخدام.
ومع ذلك، بعد تسجيل تطبيق في واجهة مستخدم AdMob وإنشاء معرّفات الوحدة الإعلانية الخاصة بك لاستخدامها في تطبيقك، عليك ضبط جهازك على أنّه جهاز اختباري بشكل صريح أثناء مرحلة تطوير التطبيق. هذا أمر في غاية الأهمية. إنّ إجراء الاختبار باستخدام إعلانات حقيقية (حتى إذا لم تنقر عليها مطلقًا) يخالف سياسة AdMob ويمكن أن يؤدي إلى تعليق حسابك. اطّلِع على الإعلانات الاختبارية للحصول على معلومات عن كيفية التأكّد من ظهور إعلانات اختبارية دائمًا عند التطوير.
تحميل إعلان
بعد إنشاء InterstitialAd
، تكون الخطوة التالية هي تحميل إعلان.
ويتم ذلك باستخدام طريقة loadAd()
في فئة InterstitialAd
. تأخذ الدالة
وسيطة AdRequest
، التي تحتوي على معلومات وقت التشغيل (مثل معلومات targeting
) عن طلب إعلان واحد.
في ما يلي مثال يوضّح كيفية تحميل إعلان:
using GoogleMobileAds.Api; ... private InterstitialAd interstitial; private void RequestInterstitial() { #if UNITY_ANDROID string adUnitId = "ca-app-pub-3940256099942544/1033173712"; #elif UNITY_IPHONE string adUnitId = "ca-app-pub-3940256099942544/4411468910"; #else string adUnitId = "unexpected_platform"; #endif // Initialize an InterstitialAd. this.interstitial = new InterstitialAd(adUnitId); // Create an empty ad request. AdRequest request = new AdRequest.Builder().Build(); // Load the interstitial with the request. this.interstitial.LoadAd(request); }
عرض الإعلان
يجب عرض الإعلانات البينية أثناء فترات التوقف الطبيعية في تدفق التطبيق.
ومثال جيد على ذلك هو الفواصل بين مستويات اللعبة أو بعد إكمال المستخدم لمهمة معيّنة.
لعرض إعلان بيني، استخدِم الطريقة isLoaded()
للتأكّد من اكتمالتحميله، ثم استخدِم show()
.
يمكن عرض الإعلان البيني من مثال الرمز السابق في نهاية اللعبة، كما هو موضّح أدناه.
private void GameOver()
{
if (this.interstitial.IsLoaded()) {
this.interstitial.Show();
}
}
أحداث الإعلانات
لتخصيص سلوك إعلانك بشكل أكبر، يمكنك الربط بعدد من
الأحداث في دورة حياة الإعلان: التحميل والفتح والإغلاق وما إلى ذلك. يمكنك الاستماع إلى
هذه الأحداث من خلال تسجيل مفوَّض للEventHandler
المناسب، كما هو موضح أدناه.
using GoogleMobileAds.Api; ... private InterstitialAd interstitial; private void RequestInterstitial() { #if UNITY_ANDROID string adUnitId = "ca-app-pub-3940256099942544/1033173712"; #elif UNITY_IPHONE string adUnitId = "ca-app-pub-3940256099942544/4411468910"; #else string adUnitId = "unexpected_platform"; #endif // Initialize an InterstitialAd. this.interstitial = new InterstitialAd(adUnitId); // Called when an ad request has successfully loaded. this.interstitial.OnAdLoaded += HandleOnAdLoaded; // Called when an ad request failed to load. this.interstitial.OnAdFailedToLoad += HandleOnAdFailedToLoad; // Called when an ad is shown. this.interstitial.OnAdOpening += HandleOnAdOpening; // Called when the ad is closed. this.interstitial.OnAdClosed += HandleOnAdClosed; // Create an empty ad request. AdRequest request = new AdRequest.Builder().Build(); // Load the interstitial with the request. this.interstitial.LoadAd(request); } public void HandleOnAdLoaded(object sender, EventArgs args) { MonoBehaviour.print("HandleAdLoaded event received"); } public void HandleOnAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) { MonoBehaviour.print("HandleFailedToReceiveAd event received with message: " + args.Message); } public void HandleOnAdOpening(object sender, EventArgs args) { MonoBehaviour.print("HandleAdOpening event received"); } public void HandleOnAdClosed(object sender, EventArgs args) { MonoBehaviour.print("HandleAdClosed event received"); }
يحتوي الحدث OnAdFailedToLoad
على وسيطات أحداث خاصة. ويمرّر HandleAdFailedToLoadEventArgs
مع Message
يصف الخطأ:
public void HandleOnAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
print("Interstitial failed to load: " + args.Message);
// Handle the ad failed to load event.
}
حدث الإعلان | الوصف |
---|---|
OnAdLoaded |
يتم تنفيذ الحدث OnAdLoaded عند انتهاء loading
تحميل إعلان. |
OnAdFailedToLoad |
يتمّ استدعاء الحدث OnAdFailedToLoad عند تعذُّر loading
للإعلان. تصف المَعلمة Message نوع الخطأ الذي حدث. |
OnAdOpening |
يتمّ استدعاء هذه الطريقة عند عرض الإعلان الذي يغطي شاشة الجهاز. |
OnAdClosed |
يتمّ استدعاء هذه الطريقة عند إغلاق الإعلان البيني بسبب نقر المستخدِم على رمز الإغلاق أو استخدام زر الرجوع. إذا كان تطبيقك أوقف مؤقتًا إخراج الصوت أو حلقة اللعب، يمكنك استئناف تشغيله من هنا. |
إزالة الإعلانات البينية
عند الانتهاء من استخدام InterstitialAd
، احرص على استدعاء Destroy()
الطريقة قبل إزالة الإشارة إليها:
interstitial.Destroy();
يُعلم هذا المكوّن الإضافي بأنّه لم يعُد يتم استخدام العنصر وأنّه يمكن استرداد الذاكرة التي يشغلها. يؤدي عدم استدعاء هذه الطريقة إلى تسرب الذاكرة.
بعض أفضل الممارسات
- ننصحك بالتفكير في ما إذا كانت الإعلانات البينية هي النوع المناسب من الإعلانات لتطبيقك.
- تُحقّق الإعلانات البينية أفضل أداء في التطبيقات التي تتضمّن نقاط انتقال طبيعية. ويحدث ذلك عند إكمال مهمة في التطبيق، مثل مشاركة صورة أو إكمال أحد مستويات اللعبة. ولأنّ المستخدم يتوقّع حدوث فاصل في المحتوى، من السهل عرض إعلان بيني بدون إيقاف تجربته. احرص على تحديد النقاط في سير عمل تطبيقك التي ستظهر فيها الإعلانات البينية ومدى احتمالية استجابة المستخدم لها.
- تذكَّر إيقاف الإجراء مؤقتًا عند عرض إعلان بيني.
- هناك العديد من أنواع الإعلانات البينية المختلفة: الإعلانات النصية والإعلانات المصوّرة
وإعلانات الفيديو وغير ذلك. من المهم التأكّد من أنّ تطبيقك يوقف أيضًا استخدام بعض الموارد عندما يعرض
إعلانًا بينيًا للسماح للإعلان بالاستفادة منها. على سبيل المثال، عند إجراء طلب لعرض
إعلان بيني، احرص على إيقاف أي إخراج صوتي يُنشئه تطبيقك مؤقتًا.
يمكنك استئناف تشغيل الأصوات في معالِج حدث
onAdClosed()
الذي سيتم استدعاؤه عند انتهاء المستخدم من التفاعل مع الإعلان. بالإضافة إلى ذلك، ننصحك بالتوقف مؤقتًا عن تنفيذ أي مهام حسابية مكثفة (مثل حلقة لعبة) أثناء عرض الإعلان. سيضمن ذلك عدم تعرُّض المستخدم لرسومات بطيئة أو لا تستجيب أو فيديو متقطّع. - يجب الانتظار لفترة كافية لتحميل المحتوى.
- كما أنّه من المهم التأكّد من عرض الإعلانات البينية في وقت مناسب، من المهم أيضًا التأكّد من أنّ المستخدم لا ينتظر loading لتحميلها. من خلال تحميل الإعلان مسبقًا من خلال الاتصال بالرقم
loadAd()
قبل الاتصال بالرقمshow()
، يمكنك التأكّد من أنّ تطبيقك يحتوي على إعلان بيني loaded بالكامل ومستعد للعرض عند حلول وقت عرضه. - لا تغمر المستخدم بالإعلانات.
- على الرغم من أنّ زيادة معدّل تكرار الإعلانات البينية في تطبيقك قد تبدو كطريقة رائعة لزيادة الأرباح، إلا أنّها يمكن أن تؤدي أيضًا إلى خفض تجربة المستخدم وانخفاض معدّلات النقر إلى الظهور. تأكَّد من عدم تعطيل تجربة المستخدمين بكثرة لدرجة أنّهم لم يعُد بإمكانهم الاستمتاع باستخدام تطبيقك.
مراجع إضافية
نماذج
- مثال HelloWorld الحد الأدنى من تنفيذ جميع أشكال الإعلانات