يوضّح هذا الدليل أفضل الممارسات حول كيفية ترميز تطبيقاتك لعرض الإعلانات بشكل صحيح على هاتف iPhone X.
المتطلبات الأساسية
- أكمِل الخطوات في البدء.
إعلانات البانر
يجب وضع إعلانات البانر في "المنطقة الآمنة" لتجنُّب حجبها بسبب الزوايا الدائرية وحاوية المستشعر ومؤشر "الصفحة الرئيسية". في هذه الصفحة، ستجد أمثلة على كيفية إضافة قيود لتحديد موضع بانر في أعلى "المنطقة الآمنة" أو أسفلها. يتم عرض القيود المستندة إلى لوحة العرض والقيود البرمجية في بيئة متوافقة مع الإصدارات 9 والإصدارات الأحدث من iOS والإصدارات 9 والإصدارات الأحدث من Xcode. كما يتم توضيح الحلول البديلة للإصدارات الأقدم من iOS وXcode.
لوحة ترتيب الصور/أداة إنشاء واجهات المستخدم
إذا كان تطبيقك يستخدم Interface Builder، تأكَّد أولاً من تفعيل أدلة التنسيق الخاصة بـ Safe Area. لإجراء ذلك، يجب أن تستخدم Xcode 9 أو إصدارًا أحدث وأن تستهدف iOS 9 أو إصدارًا أحدث.
افتح ملف Interface Builder وانقر على مشهد وحدة التحكّم في العرض. ستظهر لك خيارات مستند Interface Builder على يسار الشاشة. ضَع علامة في المربّع بجانب استخدام أدلة التنسيق الخاصة بالمساحة الآمنة وتأكَّد من أنّك تستخدم iOS 9.0 والإصدارات الأحدث كحد أدنى.

ننصحك بتقييد حجم البانر بالحجم المطلوب باستخدام قيود العرض والارتفاع.

يمكنك الآن محاذاة البانر مع أعلى "المنطقة الآمنة" من خلال ربط السمة Top الخاصة بـ GAMBannerView بأعلى "المنطقة الآمنة":

وبالمثل، يمكنك محاذاة البانر مع أسفل "المنطقة الآمنة" من خلال ربط السمة Bottom الخاصة بـ GAMBannerView بأسفل "المنطقة الآمنة":

يجب أن تبدو القيود الآن مشابهة للقطة الشاشة أدناه (قد يختلف الحجم/الموضع):

ViewController
في ما يلي مقتطف بسيط من رمز وحدة التحكّم في العرض يوفّر الحد الأدنى المطلوب لعرض بانر في GAMBannerView كما تم إعداده في لوحة العرض أعلاه:
Swift
class ViewController: UIViewController { /// The banner view. @IBOutlet var bannerView: AdManagerBannerView! override func viewDidLoad() { super.viewDidLoad() // Replace this ad unit ID with your own ad unit ID. bannerView.adUnitID = "/21775744923/example/adaptive-banner" bannerView.rootViewController = self bannerView.load(AdManagerRequest()) } }
Objective-C
@interface ViewController() @property(nonatomic, strong) IBOutlet GAMBannerView *bannerView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Replace this ad unit ID with your own ad unit ID. self.bannerView.adUnitID = @"/21775744923/example/adaptive-banner"; self.bannerView.rootViewController = self; GAMRequest *request = [GAMRequest request]; [self.bannerView loadRequest:request]; }
محاذاة البانرات مع حافة المنطقة الآمنة
إذا كنت تريد عرض بانر بعرض كامل ومحاذاته إلى اليمين أو اليسار، يجب حصر الحافة اليمنى أو اليسرى للبانر بالحافة اليمنى أو اليسرى لمنطقة العرض الآمنة وليس بالحافة اليمنى أو اليسرى للعرض الفائق.
في حال تفعيل خيار استخدام أدلة تخطيط المنطقة الآمنة، سيستخدم Interface Builder تلقائيًا حواف المنطقة الآمنة عند إضافة قيود إلى العرض.
التوافق مع الإصدار 8 من نظام التشغيل iOS والإصدارات الأقدم
إذا كنت تريد توفير الدعم لنظام التشغيل iOS 8 أو إصدار أقدم باستخدام Interface Builder، عليك إزالة العلامة من مربّع الاختيار Use Safe Area Layout Guides لملفات Interface Builder ولوحات العرض.
يمكنك الآن إضافة قيود إلى أسفل دليل التنسيق العلوي (بدلاً من أعلى "منطقة العرض الآمن"):

أضِف أيضًا قيودًا إلى أعلى دليل التنسيق السفلي (بدلاً من أسفل "المنطقة الآمنة"):

بالنسبة إلى البانرات ذات العرض الكامل (التي تتأثّر فقط بـ "المنطقة الآمنة" في الوضع الأفقي)، لا تتوفّر أدلة التصميم هذه. الخيار الآمن في Interface Builder هو جعل قيود الحافة اليمنى واليسرى مرتبطة بالهوامش:

سيؤدي ذلك إلى إزاحة حافة البانر قليلاً عن حافة العرض الفائق/المنطقة الآمنة، ما يضمن عدم حجب البانر في الوضع الأفقي على هاتف iPhone X. يمكنك أيضًا تحقيق النتيجة المرجوة آليًا.
آلية
إذا كان تطبيقك ينشئ إعلانات بانر آليًا، يمكنك تحديد قيود وتحديد موضع إعلان البانر في الرمز. يوضّح هذا المثال (لإصدار iOS 7.0 والإصدارات الأحدث) كيفية حصر إعلان بانر ليتم توسيطه أفقيًا في أسفل "المنطقة الآمنة":
Swift
class ViewController: UIViewController { var bannerView: AdManagerBannerView! override func viewDidLoad() { super.viewDidLoad() // Instantiate the banner view with your desired banner size. bannerView = AdManagerBannerView(adSize: AdSizeBanner) addBannerViewToView(bannerView) bannerView.rootViewController = self // Set the ad unit ID to your own ad unit ID here. bannerView.adUnitID = "/21775744923/example/adaptive-banner" bannerView.load(AdManagerRequest()) } func addBannerViewToView(_ bannerView: UIView) { bannerView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(bannerView) if #available(iOS 11.0, *) { positionBannerAtBottomOfSafeArea(bannerView) } else { positionBannerAtBottomOfView(bannerView) } } @available (iOS 11, *) func positionBannerAtBottomOfSafeArea(_ bannerView: UIView) { // Position the banner. Stick it to the bottom of the Safe Area. // Centered horizontally. let guide: UILayoutGuide = view.safeAreaLayoutGuide NSLayoutConstraint.activate( [bannerView.centerXAnchor.constraint(equalTo: guide.centerXAnchor), bannerView.bottomAnchor.constraint(equalTo: guide.bottomAnchor)] ) } func positionBannerAtBottomOfView(_ bannerView: UIView) { // Center the banner horizontally. view.addConstraint(NSLayoutConstraint(item: bannerView, attribute: .centerX, relatedBy: .equal, toItem: view, attribute: .centerX, multiplier: 1, constant: 0)) // Lock the banner to the top of the bottom layout guide. view.addConstraint(NSLayoutConstraint(item: bannerView, attribute: .bottom, relatedBy: .equal, toItem: self.bottomLayoutGuide, attribute: .top, multiplier: 1, constant: 0)) } }
Objective-C
@interface ViewController() @property(nonatomic, strong) GAMBannerView *bannerView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Instantiate the banner view with your desired banner size. self.bannerView = [[GAMBannerView alloc] initWithAdSize:kGADAdSizeBanner]; [self addBannerViewToVIew:self.bannerView]; // Replace this ad unit ID with your own ad unit ID. self.bannerView.adUnitID = @"/21775744923/example/adaptive-banner"; self.bannerView.rootViewController = self; GAMRequest *request = [GAMRequest request]; [self.bannerView loadRequest:request]; } #pragma mark - view positioning -(void)addBannerViewToView:(UIView *_Nonnull)bannerView { self.bannerView.translatesAutoresizingMaskIntoConstraints = NO; [self.view addSubview:self.bannerView]; if (@available(ios 11.0, *)) { [self positionBannerViewAtBottomOfSafeArea:bannerView]; } else { [self positionBannerViewAtBottomOfView:bannerView]; } } - (void)positionBannerViewAtBottomOfSafeArea:(UIView *_Nonnull)bannerView NS_AVAILABLE_IOS(11.0) { // Position the banner. Stick it to the bottom of the Safe Area. // Centered horizontally. UILayoutGuide *guide = self.view.safeAreaLayoutGuide; [NSLayoutConstraint activateConstraints:@[ [bannerView.centerXAnchor constraintEqualToAnchor:guide.centerXAnchor], [bannerView.bottomAnchor constraintEqualToAnchor:guide.bottomAnchor] ]]; } - (void)positionBannerViewAtBottomOfView:(UIView *_Nonnull)bannerView { [self.view addConstraint:[NSLayoutConstraint constraintWithItem:bannerView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]]; [self.view addConstraint:[NSLayoutConstraint constraintWithItem:bannerView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.bottomLayoutGuide attribute:NSLayoutAttributeTop multiplier:1 constant:0]]; } @end
يمكن استخدام التقنيات المذكورة أعلاه بسهولة لفرض قيود على أعلى منطقة العرض الآمنة من خلال تعديل السمات وعناصر الربط المستخدَمة.
إعلانات مدمجة مع المحتوى
إذا كان تطبيقك يثبّت الإعلانات المدمجة مع المحتوى في أعلى الشاشة أو أسفلها، تنطبق المبادئ نفسها على الإعلانات المدمجة مع المحتوى كما تنطبق على إعلانات البانر.
والاختلاف الرئيسي هو أنّه بدلاً من إضافة قيود إلى GAMBannerView، عليك إضافة قيود إلى GADNativeAppInstallAdView وGADNativeContentAdView (أو طريقة العرض الحاوية للإعلان) من أجل الالتزام بأدلة تصميم "المنطقة الآمنة". بالنسبة إلى "العروض الأصلية"، ننصحك بتقديم قيود حجم أكثر وضوحًا.
الإعلانات البينية والإعلانات مقابل مكافأة
يتم عرض أشكال الإعلانات بملء الشاشة، بما في ذلك الإعلانات البينية والإعلانات مقابل مكافأة، من خلال Google Mobile Ads SDK. سيتم تعديل حزمة تطوير البرامج (SDK) الخاصة بتطبيق "Google Mobile Ads SDK" لضمان عرض عناصر الإعلان، مثل زر الإغلاق، في المكان الصحيح. سنعدّل ملاحظات الإصدار وصفحة المستندات هذه عندما يصبح هذا التغيير متاحًا.