الإعلانات البينية هي إعلانات بملء الشاشة تغطي واجهة التطبيق إلى أن يغلقها المستخدم. وعادةً ما تظهر هذه الإعلانات في نقاط الانتقال العادية في تدفق التطبيق، مثلاً بين الأنشطة أو أثناء فترة الإيقاف المؤقت بين المستويات في الألعاب. عندما يعرض تطبيق إعلانًا بينيًا، يكون لدى المستخدم خيار النقر على الإعلان والانتقال إلى وجهته أو إغلاقه والعودة إلى التطبيق. دراسة حالة.
يوضِّح لك هذا الدليل كيفية دمج الإعلانات البينية في تطبيق iOS.
المتطلبات الأساسية
قبل المتابعة، عليك إعداد Google Mobile Ads SDK.
الاختبار دائمًا باستخدام الإعلانات الاختبارية
عند إنشاء تطبيقاتك واختبارها، تأكَّد من استخدام الإعلانات الاختبارية بدلاً من الإعلانات الفعلية المعروضة للمستخدمين. وإلا قد يتم تعليق حسابك.
أسهل طريقة لتحميل الإعلانات الاختبارية هي استخدام رقم تعريف الوحدة الإعلانية الاختبارية المخصّص للإعلانات البينية على iOS:
/21775744923/example/interstitial
تم إعداد هذا الرقم خصيصًا لعرض إعلانات اختبارية لكل طلب، ويمكنك استخدامه في تطبيقاتك أثناء الترميز والاختبار وتحديد الأخطاء وحلّها. ما عليك سوى استبداله برقم تعريف الوحدة الإعلانية الخاص بك قبل نشر تطبيقك.
للاطّلاع على تفاصيل الإعلانات الاختبارية في Google Mobile Ads SDK، يُرجى مراجعة مقالة تفعيل الإعلانات الاختبارية.
التنفيذ
في ما يلي الخطوات الرئيسية لدمج الإعلانات البينية:
- تحميل إعلان
- تسجيل معاودات الاتصال
- عرض الإعلان
تحميل إعلان
يتم تحميل الإعلان باستخدام طريقة
load(adUnitID:request) في فئة
GAMInterstitialAd.
Swift
fileprivate func loadInterstitial() async {
do {
interstitial = try await AdManagerInterstitialAd.load(
with: "/21775744923/example/interstitial", request: AdManagerRequest())
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
[GAMInterstitialAd loadWithAdManagerAdUnitID:@"/21775744923/example/interstitial"
request:[GAMRequest 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;
}];
تسجيل معاودات الاتصال
لتلقّي إشعارات بأحداث العرض، عليك تعيين GADFullScreenContentDelegate للسمة 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;
}
GAMInterstitialAd هو عنصر يُستخدم مرة واحدة. ويعني ذلك أنّه بعد عرض إعلان بيني، لا يمكن عرضه مرة أخرى. من أفضل الممارسات تحميل إعلان بيني آخر في الطريقة adDidDismissFullScreenContent: في GADFullScreenContentDelegate حتى يبدأ تحميل الإعلان البيني التالي فور إغلاق الإعلان السابق.
عرض الإعلان
يجب عرض الإعلانات البينية أثناء فترات التوقف العادية في تدفق التطبيق. ومن الأمثلة الجيدة على ذلك بين مستويات اللعبة أو بعد أن يكمل المستخدم مهمة ما.
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:فيGAMInterstitialAdلمعرفة ما إذا كان الإعلان جاهزًا للعرض.
أمثلة على GitHub
يمكنك الاطّلاع على أمثلة الإعلانات البينية الكاملة باللغة المفضّلة لديك:
الخطوات التالية
- مزيد من المعلومات عن استهداف الإعلانات و إرشادات "الإعلانات البينية".
- مزيد من المعلومات عن خصوصية المستخدم