الإعلانات البينية هي إعلانات بملء الشاشة تغطي واجهة التطبيق المضيف. وعادةً ما تظهر هذه الإعلانات في نقاط الانتقال العادية في تدفق التطبيقات، مثلاً أثناء فترة الإيقاف المؤقت بين المستويات في الألعاب. عندما يعرض تطبيق إعلانًا بينيًا، يمكن للمستخدم النقر على الإعلان والمتابعة إلى وجهته أو إغلاقه والعودة إلى التطبيق. دراسة حالة
يوضّح هذا الدليل كيفية دمج الإعلانات البينية في تطبيق Unity.
المتطلبات الأساسية
- أكمِل دليل البدء.
اختبار الإعلانات دائمًا باستخدام الإعلانات الاختبارية
يحتوي نموذج الرمز البرمجي التالي على رقم تعريف وحدة إعلانية يمكنك استخدامه لطلب إعلانات اختبارية. تم إعداد هذا المعرّف خصيصًا لعرض إعلانات اختبارية بدلاً من إعلانات فعلية لكل طلب، ما يجعله آمنًا للاستخدام.
ومع ذلك، بعد تسجيل تطبيق في واجهة الويب الخاصة بـ AdMob وإنشاء معرّفات الوحدات الإعلانية الخاصة بك لاستخدامها في تطبيقك، عليك إعداد جهازك بشكل صريح كجهاز اختباري أثناء عملية التطوير.
Android
ca-app-pub-3940256099942544/1033173712
iOS
ca-app-pub-3940256099942544/4411468910
إعداد حزمة تطوير البرامج (SDK) للإعلانات على الأجهزة الجوّالة
قبل تحميل الإعلانات، يجب أن يُعدّ تطبيقك حزمة تطوير البرامج (SDK) لعرض الإعلانات على الأجهزة الجوّالة من خلال استدعاء MobileAds.Initialize()
. يجب إجراء ذلك مرة واحدة فقط، ويُفضّل عند تشغيل التطبيق.
using GoogleMobileAds;
using GoogleMobileAds.Api;
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
public void Start()
{
// Initialize the Google Mobile Ads SDK.
MobileAds.Initialize((InitializationStatus initStatus) =>
{
// This callback is called once the MobileAds SDK is initialized.
});
}
}
في حال استخدام التوسّط، انتظِر إلى أن يتم تنفيذ معاودة الاتصال قبل تحميل الإعلانات، لأنّ ذلك سيضمن تهيئة جميع محوّلات التوسّط.
التنفيذ
في ما يلي الخطوات الرئيسية لدمج الإعلانات البينية:
- تحميل الإعلان البيني
- عرض الإعلان البيني
- الاستماع إلى أحداث الإعلانات البينية
- تنظيف الإعلان البيني
- التحميل المُسبَق للإعلان البيني التالي
تحميل الإعلان البيني
يتم تحميل إعلان بيني باستخدام الطريقة الثابتة Load()
في الفئة InterstitialAd
. تتطلّب طريقة التحميل رقم تعريف وحدة إعلانية وكائن AdRequest
ومعالج إكمال يتم استدعاؤه عند نجاح تحميل الإعلان أو تعذّره. يتم توفير الكائن InterstitialAd
الذي تم تحميله كمعلَمة في معالج الإكمال. يوضّح المثال أدناه كيفية تحميل
InterstitialAd
.
// These ad units are configured to always serve test ads.
#if UNITY_ANDROID
private string _adUnitId = "ca-app-pub-3940256099942544/1033173712";
#elif UNITY_IPHONE
private string _adUnitId = "ca-app-pub-3940256099942544/4411468910";
#else
private string _adUnitId = "unused";
#endif
private InterstitialAd _interstitialAd;
/// <summary>
/// Loads the interstitial ad.
/// </summary>
public void LoadInterstitialAd()
{
// Clean up the old ad before loading a new one.
if (_interstitialAd != null)
{
_interstitialAd.Destroy();
_interstitialAd = null;
}
Debug.Log("Loading the interstitial ad.");
// create our request used to load the ad.
var adRequest = new AdRequest();
// send the request to load the ad.
InterstitialAd.Load(_adUnitId, adRequest,
(InterstitialAd ad, LoadAdError error) =>
{
// if error is not null, the load request failed.
if (error != null || ad == null)
{
Debug.LogError("interstitial ad failed to load an ad " +
"with error : " + error);
return;
}
Debug.Log("Interstitial ad loaded with response : "
+ ad.GetResponseInfo());
_interstitialAd = ad;
});
}
عرض الإعلان البيني
لعرض إعلان بيني تم تحميله، استدعِ طريقة Show()
على مثيل InterstitialAd
. قد يتم عرض الإعلانات مرة واحدة لكل عملية تحميل. استخدِم الطريقة CanShowAd()
للتأكّد من أنّ الإعلان جاهز للعرض.
/// <summary>
/// Shows the interstitial ad.
/// </summary>
public void ShowInterstitialAd()
{
if (_interstitialAd != null && _interstitialAd.CanShowAd())
{
Debug.Log("Showing interstitial ad.");
_interstitialAd.Show();
}
else
{
Debug.LogError("Interstitial ad is not ready yet.");
}
}
الاستماع إلى أحداث الإعلانات البينية
لتخصيص سلوك إعلانك بشكل أكبر، يمكنك ربط عدد من الأحداث في دورة حياة الإعلان. يمكنك الاستماع إلى هذه الأحداث من خلال تسجيل عنصر نائب كما هو موضّح أدناه.
private void RegisterEventHandlers(InterstitialAd interstitialAd)
{
// Raised when the ad is estimated to have earned money.
interstitialAd.OnAdPaid += (AdValue adValue) =>
{
Debug.Log(String.Format("Interstitial ad paid {0} {1}.",
adValue.Value,
adValue.CurrencyCode));
};
// Raised when an impression is recorded for an ad.
interstitialAd.OnAdImpressionRecorded += () =>
{
Debug.Log("Interstitial ad recorded an impression.");
};
// Raised when a click is recorded for an ad.
interstitialAd.OnAdClicked += () =>
{
Debug.Log("Interstitial ad was clicked.");
};
// Raised when an ad opened full screen content.
interstitialAd.OnAdFullScreenContentOpened += () =>
{
Debug.Log("Interstitial ad full screen content opened.");
};
// Raised when the ad closed full screen content.
interstitialAd.OnAdFullScreenContentClosed += () =>
{
Debug.Log("Interstitial ad full screen content closed.");
};
// Raised when the ad failed to open full screen content.
interstitialAd.OnAdFullScreenContentFailed += (AdError error) =>
{
Debug.LogError("Interstitial ad failed to open full screen content " +
"with error : " + error);
};
}
تنظيف الإعلان البيني
عند الانتهاء من استخدام InterstitialAd
، احرص على استدعاء الطريقة Destroy()
قبل إسقاط مرجعك إليها:
_interstitialAd.Destroy();
يُعلم هذا الإجراء المكوّن الإضافي بأنّ العنصر لم يعُد مستخدَمًا ويمكن استرداد الذاكرة التي يشغلها. سيؤدي عدم استدعاء هذه الطريقة إلى حدوث تسرُّب للذاكرة.
التحميل المُسبَق للإعلان البيني التالي
الإعلانات البينية هي عنصر يُستخدَم لمرة واحدة. وهذا يعني أنّه بعد عرض إعلان بيني، لا يمكن استخدام العنصر مرة أخرى. لطلب إعلان بيني آخر، أنشئ عنصر InterstitialAd
جديدًا.
لإعداد إعلان بيني لفرصة الظهور التالية، يمكنك التحميل المُسبَق للإعلان البيني عند ظهور حدث الإعلان OnAdFullScreenContentClosed
أو OnAdFullScreenContentFailed
.
private void RegisterReloadHandler(InterstitialAd interstitialAd)
{
// Raised when the ad closed full screen content.
interstitialAd.OnAdFullScreenContentClosed += ()
{
Debug.Log("Interstitial Ad full screen content closed.");
// Reload the ad so that we can show another as soon as possible.
LoadInterstitialAd();
};
// Raised when the ad failed to open full screen content.
interstitialAd.OnAdFullScreenContentFailed += (AdError error) =>
{
Debug.LogError("Interstitial ad failed to open full screen content " +
"with error : " + error);
// Reload the ad so that we can show another as soon as possible.
LoadInterstitialAd();
};
}
أفضل الممارسات
- تحديد ما إذا كانت "الإعلانات البينية" هي نوع الإعلانات المناسب لتطبيقك
- تعمل "الإعلانات البينية" بشكل أفضل في التطبيقات التي تتضمّن نقاط انتقال طبيعية. ويتم إنشاء هذه النقطة عند إكمال مهمة في التطبيق، مثل مشاركة صورة أو إكمال مستوى في لعبة. احرص على تحديد نقاط عرض الإعلانات البينية في مسار تطبيقك بشكل مناسب، وكيفية تفاعل المستخدم معها.
- إيقاف الإجراء مؤقتًا عند عرض إعلان بيني
- هناك العديد من أنواع الإعلانات البينية المختلفة، مثل الإعلانات النصية أو المصوّرة أو إعلانات الفيديو. من المهم التأكّد من أنّ تطبيقك يعلّق استخدام بعض الموارد عند عرض إعلان بيني، وذلك للسماح للإعلان بالاستفادة من هذه الموارد. على سبيل المثال، عند إجراء طلب لعرض إعلان بيني، احرص على إيقاف أي ناتج صوتي مؤقتًا يصدره تطبيقك. ويمكنك استئناف تشغيل الأصوات في الحدث
OnAdFullScreenContentClosed()
، الذي يمكن استدعاؤه عندما ينتهي المستخدم من التفاعل مع الإعلان. بالإضافة إلى ذلك، ننصحك بإيقاف أي مهام حسابية مكثّفة مؤقتًا، مثل حلقة الألعاب، أثناء عرض الإعلان. ويضمن ذلك ألّا يواجه المستخدم رسومات بطيئة أو غير مستجيبة أو فيديو متقطّع. - لا تغرق المستخدم بالإعلانات.
- قد تبدو زيادة معدّل تكرار الإعلانات البينية في تطبيقك طريقة رائعة لزيادة الإيرادات، ولكنّها قد تؤدي أيضًا إلى انخفاض مستوى تجربة المستخدمين وانخفاض معدلات النقر. تأكَّد من عدم مقاطعة المستخدمين بشكل متكرّر لدرجة أنّهم لم يعودوا قادرين على الاستمتاع باستخدام تطبيقك.
مراجع إضافية
- مثال HelloWorld: تطبيق بسيط لجميع أشكال الإعلانات.