الإعلانات البينية هي إعلانات بملء الشاشة تغطي واجهة التطبيق إلى أن يغلقها المستخدم. حيث يتم عرضها عادةً عند نقاط انتقال طبيعية خلال تدفق التطبيق، مثل بين الأنشطة أو أثناء التوقف المؤقت بين المستويات في لعبة. عندما يعرض التطبيق إعلانًا بينيًا، يمكن للمستخدم اختيار النقر على الإعلان والمتابعة إلى وجهته أو إغلاقه والرجوع إلى التطبيق.
يوضّح لك هذا الدليل كيفية دمج الإعلانات البينية في أحد تطبيقات iOS.
المتطلبات الأساسية
- حزمة "SDK لإعلانات Google على الأجهزة الجوّالة" الإصدار 8.0.0 أو إصدار أحدث
- أكمِل دليل البدء.
الاختبار دائمًا من خلال الإعلانات الاختبارية
عند إنشاء تطبيقاتك واختبارها، تأكد من استخدام إعلانات اختبارية بدلاً من إعلانات مباشرة وإنتاجية. وقد يؤدي عدم الالتزام بذلك إلى تعليق حسابك.
أسهل طريقة لتحميل الإعلانات الاختبارية هي استخدام رقم تعريف الوحدة الإعلانية الاختبارية المخصص للإعلانات البينية على نظام التشغيل iOS:
/6499/example/interstitial
وقد تم إعدادها خصيصًا لعرض إعلانات اختبارية لكل طلب، ويمكنك استخدامها في تطبيقاتك الخاصة أثناء الترميز والاختبار وتصحيح الأخطاء. ما عليك سوى التأكد من استبداله برقم تعريف وحدتك الإعلانية قبل نشر تطبيقك.
لمزيد من المعلومات عن آلية عمل الإعلانات الاختبارية في "حزمة تطوير البرامج (SDK) لإعلانات الأجهزة الجوّالة"، اطّلِع على الإعلانات الاختبارية.
التنفيذ
الخطوات الأساسية لدمج الإعلانات البينية هي:
- تحميل إعلان
- التسجيل لرد الاتصال
- عليك عرض الإعلان والتعامل مع حدث المكافأة.
تحميل إعلان
يتم تحميل إعلان باستخدام طريقة loadWithAdManagerAdUnitID:request:completionHandler:
الثابتة في الفئة GAMInterstitialAd
. تتطلب طريقة التحميل رقم تعريف الوحدة الإعلانية وكائن GAMRequest
ومعالج الإكمال الذي يتم استدعاؤه عند نجاح تحميل الإعلان أو تعذُّر تحميله. ويتم توفير
كائن GAMInterstitialAd
المحمَّل كمعلَمة في معالج الإكمال. يوضّح المثال أدناه كيفية تحميل
GAMInterstitialAd
في صف ViewController
.
Swift
import GoogleMobileAds import UIKit class ViewController: UIViewController { private var interstitial: GAMInterstitialAd? override func viewDidLoad() { super.viewDidLoad() let request = GAMRequest() GAMInterstitialAd.load(withAdManagerAdUnitID: "/6499/example/interstitial", request: request, completionHandler: { [self] ad, error in if let error = error { print("Failed to load interstitial ad with error: \(error.localizedDescription)") return } interstitial = ad } ) } }
Objective-C
@import GoogleMobileAds; @import UIKit; @interface ViewController () @property(nonatomic, strong) GAMInterstitialAd *interstitial; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; GAMRequest *request = [GAMRequest request]; [GAMInterstitialAd loadWithAdManagerAdUnitID:@"/6499/example/interstitial" request:request completionHandler:^(GAMInterstitialAd *ad, NSError *error) { if (error) { NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]); return; } self.interstitial = ad; }]; }
التسجيل لمعاودة الاتصال
لتلقّي إشعارات عن أحداث العروض التقديمية، يجب تنفيذ
بروتوكول GADFullScreenContentDelegate
وتخصيصه
للسمة fullScreenContentDelegate
للإعلان المعروض. يعالج بروتوكول GADFullScreenContentDelegate
عمليات استدعاء الإجراءات في حال عرض الإعلان بنجاح أو في حال عدم نجاحه، وكذلك في حال رفضه. ويوضّح الرمز التالي كيفية تنفيذ البروتوكول وتعيينه للإعلان:
Swift
class ViewController: UIViewController, GADFullScreenContentDelegate { private var interstitial: GAMInterstitialAd? override func viewDidLoad() { super.viewDidLoad() let request = GAMRequest() GAMInterstitialAd.load(withAdManagerAdUnitID: "/6499/example/interstitial", request: request, completionHandler: { [self] ad, error in if let error = error { print("Failed to load interstitial ad with error: \(error.localizedDescription)") return } interstitial = ad interstitial?.fullScreenContentDelegate = self } ) } /// Tells the delegate that the ad failed to present full screen content. func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) { print("Ad did fail to present full screen content.") } /// Tells the delegate that the ad will present full screen content. func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) { print("Ad will present full screen content.") } /// Tells the delegate that the ad dismissed full screen content. func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) { print("Ad did dismiss full screen content.") } }
Objective-C
@interface ViewController ()<GADFullScreenContentDelegate> @property(nonatomic, strong) GAMInterstitialAd *interstitial; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; GAMRequest *request = [GAMRequest request]; [GAMInterstitialAd loadWithAdManagerAdUnitID:@"/6499/example/interstitial" request:request completionHandler:^(GAMInterstitialAd *ad, NSError *error) { if (error) { NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]); return; } self.interstitial = ad; self.interstitial.fullScreenContentDelegate = self; }]; } /// Tells the delegate that the ad failed to present full screen content. - (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad didFailToPresentFullScreenContentWithError:(nonnull NSError *)error { NSLog(@"Ad did fail to present full screen content."); } /// Tells the delegate that the ad will present full screen content. - (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad { NSLog(@"Ad will present full screen content."); } /// Tells the delegate that the ad dismissed full screen content. - (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad { NSLog(@"Ad did dismiss full screen content."); }
GAMInterstitialAd
عنصر يُستخدم لمرة واحدة. وهذا يعني أنّه بعد عرض الإعلان البيني، لن تتمكّن من عرضه مرة أخرى. من أفضل الممارسات تحميل إعلان بيني آخر في طريقة adDidDismissFullScreenContent:
على GADFullScreenContentDelegate
حتى يبدأ تحميل الإعلان البيني التالي فور إغلاق الإعلان السابق.
عرض الإعلان
يجب عرض الإعلانات البينية أثناء فترات الإيقاف المؤقت الطبيعية في مسار التطبيق.
ويشكّل المثال بين مستويات اللعبة مثالاً جيدًا على ذلك، أو بعد إكمال المستخدم لمهمة ما.
إليك مثال على كيفية تنفيذ ذلك من خلال إحدى طرق الإجراءات في
UIViewController
:
Swift
@IBAction func doSomething(_ sender: Any) { if interstitial != nil { interstitial.present(fromRootViewController: self) } else { print("Ad wasn't ready") } }
Objective-C
- (IBAction)doSomething:(id)sender { ... if (self.interstitial) { [self.interstitial presentFromRootViewController:self]; } else { NSLog(@"Ad wasn't ready"); } }
إذا كنت لا تعرض أي إعلانات، وكانت تظهر لك رسالة الخطأ "خطأ في الطلب: لا تتوفر إعلانات لعرضها"، تأكّد من احتواء العنصر على تصميم إعلان يستهدف المقاس المناسب. أحجام الإعلانات البينية هي 320 × 480 و480 × 320 للهواتف و1024 × 768 و768 × 1024 للأجهزة اللوحية. إذا لم يكن الجهاز بحجم 1024×768 أو 768×1024، فسيعود إلى حجمه 320×480 أو 480×320.
أفضل الممارسات
- ضَع في اعتبارك ما إذا كانت الإعلانات البينية هي نوع الإعلان المناسب لتطبيقك.
- تعمل الإعلانات البينية على أفضل نحو في التطبيقات من خلال نقاط انتقال عادية. تعمل خاتمة المهمة داخل التطبيق، مثل مشاركة صورة أو إكمال مستوى من لعبة، على إنشاء هذه النقطة. وبما أنّ المستخدم يتوقع فترة راحة خلال الإجراء، فمن السهل عرض إعلان بيني بدون الإخلال بتجربته. احرص على التفكير في المراحل التي سيتم خلالها عرض إعلانات بينية ضمن سير عمل التطبيق وكيفية استجابة المستخدم لذلك.
- احرص على إيقاف الإجراء مؤقتًا عند عرض إعلان بيني.
- هناك عدة أنواع مختلفة من الإعلانات البينية، وهي الإعلانات النصية والإعلانات المصوّرة
وإعلانات الفيديو وغيرها. من المهم التأكد عند عرض تطبيقك لإعلان بيني، أنه يعلّق أيضًا استخدامه لبعض الموارد للسماح للإعلان بالاستفادة منها. على سبيل المثال، عند إجراء مكالمة لعرض إعلان بيني، احرِص على إيقاف أي إخراج صوتي يصدره تطبيقك مؤقتًا.
ويمكنك استئناف تشغيل الأصوات في معالِج حدث
adDidDismissFullScreenContent:
، والذي سيتم استدعاءه عند انتهاء المستخدِم من التفاعل مع الإعلان. بالإضافة إلى ذلك، ننصحك بإيقاف أي مهام حاسوبية مُجهدة مؤقتًا (مثل حلقة الألعاب) أثناء عرض الإعلان. سيضمن ذلك عدم مواجهة المستخدم رسومات بطيئة أو غير مستجيبة أو فيديوهات متقطعة. - يجب توفير مدة تحميل كافية.
- كما أنه من المهم التأكّد من عرض الإعلانات البينية في الوقت المناسب، من المهم أيضًا التأكّد من عدم اضطرار المستخدم إلى انتظار تحميلها. ومن خلال تحميل الإعلان مسبقًا قبل الرغبة في عرضه، يمكن ضمان توفّر إعلان بيني محمَّل بالكامل في تطبيقك عندما يحين وقت عرض الإعلان.
- لا تغمر المستخدم بالإعلانات.
- على الرغم من أن زيادة معدل تكرار الإعلانات البينية في تطبيقك قد تبدو طريقة رائعة لزيادة الأرباح، إلا أنها قد تؤدي أيضًا إلى انخفاض مستوى تجربة المستخدم وانخفاض نِسب النقر إلى الظهور. عليك التأكّد من عدم مقاطعة المستخدمين بشكل متكرر لدرجة عدم قدرتهم على الاستمتاع باستخدام تطبيقك.
- ولا تستخدِم استدعاء اكتمال التحميل لعرض الإعلان البيني.
- يمكن أن يتسبب ذلك في تجربة سيئة للمستخدم. بدلاً من ذلك، يمكنك تحميل الإعلان مسبقًا
قبل أن تحتاج إلى عرضه. بعد ذلك، تحقَّق من طريقة
canPresentFromRootViewController:error:
علىGAMInterstitialAd
لمعرفة ما إذا كانت جاهزة للعرض.
أمثلة على GitHub
الخطوات التالية
- اطّلع على مزيد من المعلومات حول استهداف الإعلانات وإرشادات الإعلانات البينية.
- مزيد من المعلومات حول خصوصية المستخدم.