الإعلانات البينية هي إعلانات بملء الشاشة تغطي واجهة التطبيق إلى أن يقفلها المستخدم. وعادةً ما تظهر هذه الإعلانات في نقاط انتقال مناسبة خلال مسار عرض التطبيق، على سبيل المثال بين الأنشطة أو في الوقت الفاصل بين مستويات في لعبة. عندما يعرض تطبيق إعلانًا بينيًا، يمكن للمستخدم النقر على الإعلان والمتابعة إلى وجهته أو إغلاقه والعودة إلى التطبيق. دراسة حالة
يوضّح لك هذا الدليل كيفية دمج الإعلانات البينية في تطبيق iOS.
المتطلبات الأساسية
- الإصدار 8.0.0 من حزمة تطوير البرامج (SDK) لإعلانات Google على الأجهزة الجوّالة أو إصدار أحدث
- أكمِل دليل البدء.
إجراء الاختبار دائمًا باستخدام إعلانات اختبارية
عند إنشاء تطبيقاتك واختبارها، احرص على استخدام إعلانات اختبارية بدلاً من الإعلانات المنشورة. وقد يؤدي عدم إجراء ذلك إلى تعليق حسابك.
إنّ أسهل طريقة لتحميل الإعلانات التجريبية هي استخدام رقم تعريف الوحدة الإعلانية الاختبارية المخصّص
للإعلانات البينية على نظام التشغيل iOS:
ca-app-pub-3940256099942544/4411468910
تم إعداده خصيصًا لعرض إعلانات اختبارية لكل طلب، ويمكنك استخدامه في تطبيقاتك أثناء الترميز والاختبار وتحديد الأخطاء وإصلاحها. ما عليك سوى التأكّد من استبداله بمعرّف وحدتك الإعلانية قبل نشر تطبيقك.
لمزيد من المعلومات عن آلية عمل الإعلانات الاختبارية لحزمة "SDK لإعلانات Google على الأجهزة الجوّالة"، اطّلِع على مقالة الإعلانات الاختبارية.
التنفيذ
في ما يلي الخطوات الرئيسية لدمج الإعلانات البينية:
- حمِّل إعلانًا.
- سجِّل للحصول على مكالمات هاتفية.
- اعرض الإعلان.
تحميل إعلان
يتم تحميل الإعلان باستخدام الأسلوب
load(adUnitID:request)
في فئة
GADInterstitialAd
.
Swift
fileprivate func loadInterstitial() async {
do {
interstitial = try await InterstitialAd.load(
with: "ca-app-pub-3940256099942544/4411468910", request: Request())
interstitial?.fullScreenContentDelegate = self
} catch {
print("Failed to load interstitial ad with error: \(error.localizedDescription)")
}
}
SwiftUI
import GoogleMobileAds
class InterstitialViewModel: NSObject, FullScreenContentDelegate {
private var interstitialAd: InterstitialAd?
func loadAd() async {
do {
interstitialAd = try await InterstitialAd.load(
with: "ca-app-pub-3940256099942544/4411468910", request: Request())
interstitialAd?.fullScreenContentDelegate = self
} catch {
print("Failed to load interstitial ad with error: \(error.localizedDescription)")
}
}
Objective-C
[GADInterstitialAd
loadWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"
request:[GADRequest request]
completionHandler:^(GADInterstitialAd *ad, NSError *error) {
if (error) {
NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
return;
}
self.interstitial = ad;
self.interstitial.fullScreenContentDelegate = self;
}];
التسجيل لتلقّي مكالمات من فريق الدعم
لتلقّي إشعارات عن أحداث العرض، عليك تعيين سمة
GADFullScreenContentDelegate to the
fullScreenContentDelegate` للإعلان الذي تم إرجاعه:
Swift
interstitial?.fullScreenContentDelegate = self
SwiftUI
interstitialAd?.fullScreenContentDelegate = self
Objective-C
self.interstitial.fullScreenContentDelegate = self;
يعالج بروتوكول GADFullScreenContentDelegate
عمليات الاستدعاء عند عرض الإعلان بنجاح أو عدم نجاحه، وعند إغلاقه. يوضّح الرمز البرمجي التالي كيفية تنفيذ البروتوكول:
Swift
func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func adDidRecordClick(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func ad(_ ad: FullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
print("\(#function) called with error: \(error.localizedDescription)")
// Clear the interstitial ad.
interstitial = nil
}
func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
// Clear the interstitial ad.
interstitial = nil
}
SwiftUI
func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func adDidRecordClick(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func ad(
_ ad: FullScreenPresentingAd,
didFailToPresentFullScreenContentWithError error: Error
) {
print("\(#function) called")
}
func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
}
func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
print("\(#function) called")
// Clear the interstitial ad.
interstitialAd = nil
}
Objective-C
- (void)adDidRecordImpression:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
}
- (void)adDidRecordClick:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
}
- (void)ad:(id<GADFullScreenPresentingAd>)ad
didFailToPresentFullScreenContentWithError:(NSError *)error {
NSLog(@"%s called with error: %@", __PRETTY_FUNCTION__, error.localizedDescription);
// Clear the interstitial ad.
self.interstitial = nil;
}
- (void)adWillPresentFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
}
- (void)adWillDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
}
- (void)adDidDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
NSLog(@"%s called", __PRETTY_FUNCTION__);
// Clear the interstitial ad.
self.interstitial = nil;
}
GADInterstitialAd
هو عنصر للاستخدام لمرة واحدة. ويعني ذلك
أنّه بعد عرض إعلان بيني، لا يمكن عرضه مرة أخرى. من أفضل الممارسات loading another interstitial ad in the
adDidDismissFullScreenContent:
method on GADFullScreenContentDelegate
so
that the next interstitial ad starts loading as soon as the previous one is
dismissed.
عرض الإعلان
يجب عرض الإعلانات البينية أثناء الفواصل الطبيعية في مسار عرض التطبيق. ومثال جيد على ذلك هو الفواصل بين مستويات اللعبة أو بعد إكمال المستخدم لمهمة معيّنة.
Swift
ad.present(from: self!)
SwiftUI
راقِب أحداث واجهة المستخدم في العرض لتحديد وقت عرض الإعلان.
var body: some View {
// ...
}
.onChange(of: countdownTimer.isComplete) { newValue in
showGameOverAlert = newValue
}
.alert(isPresented: $showGameOverAlert) {
Alert(
title: Text("Game Over"),
message: Text("You lasted \(countdownTimer.countdownTime) seconds"),
dismissButton: .cancel(
Text("OK"),
action: {
viewModel.showAd()
}))
عرض الإعلان البيني من نموذج العرض:
func showAd() {
guard let interstitialAd = interstitialAd else {
return print("Ad wasn't ready.")
}
interstitialAd.present(from: nil)
}
Objective-C
[self.interstitial presentFromRootViewController:self];
أفضل الممارسات
- ننصحك بالتفكير في ما إذا كانت الإعلانات البينية هي النوع المناسب من الإعلانات لتطبيقك.
- تُحقّق الإعلانات البينية أفضل أداء في التطبيقات التي تتضمّن نقاط انتقال طبيعية. ويحدث ذلك عند إكمال مهمة في التطبيق، مثل مشاركة صورة أو إكمال أحد مستويات اللعبة. ولأنّ المستخدم يتوقّع حدوث استراحة في المحتوى، من السهل عرض إعلان بيني بدون التأثير في تجربته. احرص على تحديد النقاط التي ستعرض فيها الإعلانات البينية في سير عمل تطبيقك وكيفية تفاعل المستخدمين على الأرجح معها.
- تذكَّر إيقاف الإجراء مؤقتًا عند عرض إعلان بيني.
- هناك العديد من أنواع الإعلانات البينية المختلفة: الإعلانات النصية والإعلانات المصوّرة
وإعلانات الفيديو وغيرها. من المهم التأكّد من أنّ تطبيقك يوقف أيضًا استخدام بعض الموارد عندما يعرض إعلانًا
بينيًا للسماح للإعلان بالاستفادة منها. على سبيل المثال، عند إجراء طلب لعرض
إعلان بيني، احرص على إيقاف مؤقتًا لأي إخراج صوتي يُنشئه تطبيقك.
يمكنك استئناف تشغيل الأصوات في معالج حدث
adDidDismissFullScreenContent:
الذي سيتم استدعاؤه عند انتهاء المستخدم من التفاعل مع الإعلان. بالإضافة إلى ذلك، ننصحك بالتوقف مؤقتًا عن أي مهام حسابيةشديدة الصعوبة (مثل حلقة الألعاب) أثناء عرض الإعلان. سيضمن ذلكعدم تعرُّض المستخدم لرسومات بطيئة أو غير متجاوبة أو فيديو متقطّع. - يجب الانتظار لفترة كافية لتحميل المحتوى.
- كما أنّه من المهم التأكّد من عرض الإعلانات البينية في وقت مناسب، من المهم أيضًا التأكّد من أنّ المستخدم لا يحتاج إلى الانتظار إلى أن يتم تحميلها. من خلال تحميل الإعلان مسبقًا قبل أن تريد عرضه، يمكنك ضمان أنّ تطبيقك يحتوي على إعلان بيني محمَّل بالكامل وجاهز للعرض عند حلول وقت عرضه.
- لا تُغرق المستخدم بالإعلانات.
- على الرغم من أنّ زيادة معدّل تكرار الإعلانات البينية في تطبيقك قد تبدو كطريقة رائعة لزيادة الأرباح، إلا أنّها يمكن أن تؤدي أيضًا إلى تدهور تجربة المستخدم وانخفاض معدّلات النقر إلى الظهور. تأكَّد من عدم انقطاع تجربة المستخدمين بشكل متكرر إلى درجة عدم تمكّنهم من الاستمتاع باستخدام تطبيقك.
- لا تستخدِم دالة الاستدعاء عند اكتمال التحميل لعرض الإعلان البيني.
- يمكن أن يؤدي ذلك إلى تقديم تجربة سيئة للمستخدم. بدلاً من ذلك، حمِّل الإعلان مسبقًا قبل
الحاجة إلى عرضه. بعد ذلك، تحقّق من
canPresentFromRootViewController:error:
method فيGADInterstitialAd
لمعرفة ما إذا كان جاهزًا لل عرض.
مراجع إضافية
أمثلة على GitHub
يمكنك الاطّلاع على أمثلة كاملة للإعلانات البينية بلغتك المفضّلة:
الأدلة التعليمية بالفيديو في "متجر الإعلانات على الأجهزة الجوّالة"
قصص النجاح
الخطوات التالية
- أنشِئ وحدتك الإعلانية البينية في واجهة مستخدم AdMob، إذا لم يسبق لك ذلك.
- مزيد من المعلومات عن استهداف الإعلانات وإرشادات الإعلانات البينية
- مزيد من المعلومات عن خصوصية المستخدمين