الإعلانات البينية هي إعلانات بملء الشاشة تغطي واجهة أحد التطبيقات حتى تم إغلاقه من قبل المستخدم. ويتم عرضها عادةً عند نقاط انتقال عادية في تدفق التطبيق، مثل بين الأنشطة أو أثناء التوقف المؤقت بين المستويات في لعبة ما. عندما يعرض التطبيق إعلانًا بينيًا، يحصل المستخدم على حرية الاختيار. النقر على الإعلان والانتقال إلى وجهته أو إغلاقه والعودة بالتطبيق. دراسة الحالة:
يوضح لك هذا الدليل كيفية دمج الإعلانات البينية في تطبيق iOS.
المتطلبات الأساسية
- الإصدار 8.0.0 أو إصدار أحدث من حزمة "SDK لإعلانات Google على الأجهزة الجوّالة".
- أكمِل دليل البدء.
الاختبار دائمًا باستخدام الإعلانات الاختبارية
عند إنشاء تطبيقاتك واختبارها، احرص على استخدام إعلانات تجريبية بدلاً من إعلانات بث مباشر وقد يؤدي عدم الالتزام بذلك إلى تعليق حسابك.
أسهل طريقة لتحميل الإعلانات الاختبارية هي استخدام رقم تعريف الوحدة الإعلانية الاختبارية المخصص
للإعلانات البينية على نظام التشغيل iOS:
ca-app-pub-3940256099942544/4411468910
لقد تم إعدادها خصيصًا لعرض إعلانات اختبارية لكل طلب، يمكن استخدامها مجانًا في تطبيقاتك الخاصة أثناء الترميز والاختبار وتصحيح الأخطاء. ما عليك سوى إجراء واحرص على استبداله بمعرّف وحدتك الإعلانية قبل نشر تطبيقك.
لمزيد من المعلومات عن آلية عمل الإعلانات الاختبارية لحزمة تطوير البرامج (SDK) لعرض الإعلانات على الأجهزة الجوّالة، يُرجى الاطّلاع على اختبار الإعلانات:
التنفيذ
الخطوات الأساسية لدمج الإعلانات البينية هي:
- حمِّل إعلانًا.
- التسجيل لتلقّي طلبات معاودة الاتصال
- يمكنك عرض الإعلان والتعامل مع حدث المكافأة.
تحميل إعلان
يتم الانتهاء من تحميل الإعلان باستخدام
load(adUnitID:request)
على صفحة
صف واحد (GADInterstitial
).
Swift
import GoogleMobileAds
import UIKit
class ViewController: UIViewController {
private var interstitial: GADInterstitial?
override func viewDidLoad() {
super.viewDidLoad()
Task {
do {
interstitial = try await GADInterstitial.load(
withAdUnitID: "ca-app-pub-3940256099942544/4411468910", request: GADRequest())
} catch {
print("Failed to load interstitial ad with error: \(error.localizedDescription)")
}
}
}
}
SwiftUI
import GoogleMobileAds
class InterstitialViewModel: NSObject, GADFullScreenContentDelegate {
private var interstitialAd: GADInterstitialAd?
func loadAd() async {
do {
interstitialAd = try await GADInterstitialAd.load(
withAdUnitID: "ca-app-pub-3940256099942544/4411468910", request: GADRequest())
interstitialAd?.fullScreenContentDelegate = self
} catch {
print("Failed to load interstitial ad with error: \(error.localizedDescription)")
}
}
Objective-C
@import GoogleMobileAds;
@import UIKit;
@interface ViewController ()
@property(nonatomic, strong) GADInterstitial *interstitial;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
GADRequest *request = [GADRequest request];
[GADInterstitial loadWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"
request:request
completionHandler:^(GADInterstitial *ad, NSError *error) {
if (error) {
NSLog(@"Failed to load interstitial ad with error: %@", [error localizedDescription]);
return;
}
self.interstitial = ad;
}];
}
التسجيل لتلقّي طلبات معاودة الاتصال
لتلقي إشعارات لأحداث العرض التقديمي، يجب تنفيذ
بروتوكول GADFullScreenContentDelegate
وتعيينه إلى
السمة fullScreenContentDelegate
للإعلان الذي تم عرضه. تشير رسالة الأشكال البيانية
يتعامل بروتوكول GADFullScreenContentDelegate
مع عمليات معاودة الاتصال عند ظهور الإعلان
نجاحه أو عدم نجاحه وعندما يتم رفضه. ما يلي:
طريقة تنفيذ البروتوكول وتعيينه للإعلان:
Swift
import GoogleMobileAds
import UIKit
class ViewController: UIViewController, GADFullScreenContentDelegate {
private var interstitial: GADInterstitial?
override func viewDidLoad() {
super.viewDidLoad()
Task {
do {
interstitial = try await GADInterstitial.load(
withAdUnitID: "ca-app-pub-3940256099942544/4411468910", request: GADRequest())
interstitial?.fullScreenContentDelegate = self
} catch {
print("Failed to load interstitial ad with error: \(error.localizedDescription)")
}
}
}
/// 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.")
}
}
SwiftUI
تحديد السمة fullScreenContentDelegate
للإعلان المعروض:
interstitialAd?.fullScreenContentDelegate = self
تنفيذ البروتوكول:
func adDidRecordImpression(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func adDidRecordClick(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func ad(
_ ad: GADFullScreenPresentingAd,
didFailToPresentFullScreenContentWithError error: Error
) {
print("\(#function) called")
}
func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func adWillDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
// Clear the interstitial ad.
interstitialAd = nil
}
Objective-C
@import GoogleMobileAds;
@import UIKit;
@interface ViewController () <GADFullScreenContentDelegate>
@property(nonatomic, strong) GADInterstitial *interstitial;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
GADRequest *request = [GADRequest request];
[GADInterstitial loadWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"
request:request
completionHandler:^(GADInterstitial *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.");
}
GADInterstitial
هو عنصر يُستخدم لمرة واحدة. هذا النمط
يعني أنه بعد عرض إعلان بيني، لا يمكن عرضه مرة أخرى. الأفضل
التدريب هي تحميل إعلان بيني آخر في
طريقة adDidDismissFullScreenContent:
على GADFullScreenContentDelegate
، لذا
بدء تحميل الإعلان البيني التالي فور الانتهاء من تحميل الإعلان السابق
رفضت.
عرض الإعلان
يجب عرض الإعلانات البينية أثناء فترات التوقف المؤقت الطبيعية أثناء تدفق التطبيق. يعد الربط بين مستويات اللعبة مثالاً جيدًا، أو بعد إكمال المستخدم لمهمة ما.
Swift
guard let interstitial = interstitial else {
return print("Ad wasn't ready.")
}
// The UIViewController parameter is an optional.
interstitial.present(fromRootViewController: nil)
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(fromRootViewController: nil)
}
Objective-C
if (self.interstitial) {
// The UIViewController parameter is nullable.
[self.interstitial presentFromRootViewController:nil];
} else {
NSLog(@"Ad wasn't ready");
}
أفضل الممارسات
- فكِّر في ما إذا كانت الإعلانات البينية هي نوع الإعلانات المناسب لتطبيقك.
- تعمل الإعلانات البينية بشكل أفضل في التطبيقات التي تتضمّن نقاط انتقال طبيعية. خاتمة مهمة داخل تطبيق ما، مثل مشاركة صورة أو إكمال مستوى اللعبة، ينشئ مثل هذه النقطة. ولأن المستخدم يتوقع استراحة في إجراء، سيكون من السهل تقديم إعلان بيني دون التأثير سلبًا على المستخدم. تأكّد من مراعاة النقاط التي ستتطلّبها من سير عمل تطبيقك عرض الإعلانات البينية وكيفية استجابة المستخدم المحتمَلة.
- احرص على إيقاف الإجراء مؤقتًا عند عرض إعلان بيني.
- هناك عدد من الأنواع المختلفة للإعلانات البينية: النصية والمصوّرة
والفيديو وغير ذلك. من المهم التأكد من أنه عند عرض تطبيقك
إعلان بيني، فإنه يعلق أيضًا استخدامه لبعض الموارد للسماح للإعلان
الاستفادة منها. على سبيل المثال، عند إجراء مكالمة لعرض
إعلان بيني، احرص على إيقاف أي إخراج صوتي ينتجه تطبيقك مؤقتًا.
يمكنك استئناف تشغيل الأصوات من خلال
adDidDismissFullScreenContent:
معالج الحدث، الذي سيتم استدعاؤه عند انتهاء المستخدم من التفاعل مع الإعلان. بالإضافة إلى ذلك، فكِّر في إيقاف أي عمليات حسابية مكثفة مؤقتًا المهام (مثل حلقة الألعاب) أثناء عرض الإعلان. سيضمن ذلك بحيث لا يواجه المستخدم رسومات بطيئة أو غير مستجيبة أو متعثر الفيديو .
- يجب السماح بمرور الوقت الكافي للتحميل.
- كما هو من المهم التأكد من عرض الإعلانات البينية في الوقت المناسب، فمن المهم أيضًا التأكد من أن المستخدم لا يضطر إلى الانتظار حتى يتم تحميلها. تحميل الإعلان مسبقًا قبل أن تنوي عرضه التأكد من احتواء تطبيقك على إعلان بيني تم تحميله بالكامل، حان الوقت لعرض واحد.
- لا تملأ المستخدم بالإعلانات.
- على الرغم من أن زيادة تكرار الإعلانات البينية في تطبيقك قد تبدو طريقة رائعة لزيادة الإيرادات، فقد يؤدي أيضًا إلى انخفاض مستوى تجربة المستخدم ونسب نقر إلى ظهور منخفضة تأكد من أن المستخدمين ليسوا كثيرًا الأشخاص الذين لم يعد بإمكانهم الاستمتاع باستخدام تطبيقك.
- لا تستخدم استدعاء إكمال التحميل لعرض الإعلان البيني.
- قد يترك ذلك انطباعًا سيئًا لدى المستخدم. يمكنك بدلاً من ذلك تحميل الإعلان مسبقًا قبل
التي تحتاج إليها لعرضها. بعد ذلك، راجِع طريقة
canPresentFromRootViewController:error:
. علىGADInterstitial
لمعرفة ما إذا كانت جاهزة كما هو موضح.
مراجع إضافية
أمثلة على GitHub
عرض أمثلة الإعلانات البينية الكاملة بلغتك المفضّلة:
فيديوهات تعليمية حول "منصة Google للتسويق"
قصص النجاح
الخطوات التالية
- أنشئ وحدتك الإعلانية البينية في هذه الصفحة إذا لم يسبق لك ذلك واجهة مستخدم AdMob:
- اطّلِع على المزيد من المعلومات عن استهداف الإعلانات إرشادات الإعلانات البينية.
- مزيد من المعلومات حول خصوصية المستخدم