أشكال الإعلانات المخصّصة
مثل نظيراتها التي يحددها النظام، يتم تحميل أشكال الإعلانات المدمجة المخصّصة
باستخدام كائنات GADAdLoader
. سيؤدي تضمين
الثابت GADAdLoaderAdTypeCustomNative
في مصفوفة adTypes
عند
إعداد GADAdLoader
إلى ضبطه لطلب تنسيقات مخصّصة مدمجة مع المحتوى
عند تحميل الإعلانات.
GADCustomNativeAdLoaderDelegate
هناك طريقتان لبروتوكول تحميل التنسيقات المخصّصة. ويستخدم GADAdLoader
رقم التعريف الأول لمعرفة أرقام تعريف التنسيق التي يجب أن يطلبها:
Swift
public func customNativeAdFormatIDs(for adLoader: GADAdLoader) -> [Any]
Objective-C
- (NSArray *)customNativeAdFormatIDsForAdLoader:(GADAdLoader *)adLoader;
لكل شكل إعلان مدمج مخصص رقم تعريف شكل مقابل يعرّفه. عند استدعاء هذه الطريقة، يجب أن يعرض تطبيقك صفيفًا يحتوي على الأرقام التعريفية لأشكال الإعلانات التي تم إعداده للعرض.
يتم إرسال الرسالة الثانية عند تحميل الإعلان المخصص المدمج مع المحتوى، تمامًا مثل الإعلانات للأشكال التي يحددها النظام:
Swift
public func adLoader(_ adLoader: GADAdLoader, didReceive customNativeAd: GADCustomNativeAd)
Objective-C
- (void)adLoader:(GADAdLoader *)adLoader didReceiveCustomNativeAd:(GADCustomNativeAd *)customNativeAd;
أرقام تعريف التنسيقات
إنّ أرقام تعريف أشكال الإعلانات المستخدمة للإشارة بشكل فريد إلى أشكال الإعلانات المدمجة مع المحتوى المخصّصة يمكن العثور عليها في Ad Manager واجهة المستخدم ضمن قسم الإعلانات المدمجة مع المحتوى ضمن القائمة المنسدلة عرض الإعلانات:
يظهر رقم تعريف شكل كل إعلان مدمج مع المحتوى بجانب اسمه. يؤدي النقر فوق أحد الأسماء إلى نقلك إلى شاشة تفاصيل تعرض معلومات حول حقول التنسيق:
ومن هنا، يمكن إضافة حقول فردية وتعديلها وإزالتها. دوِّن اسم كل مادة عرض. الاسم هو المفتاح المستخدَم للحصول على بيانات كل مادة عرض عند عرض شكل الإعلان المدمج المخصص.
عرض أشكال إعلانات مدمجة مع المحتوى مخصصة
تختلف أشكال الإعلانات المدمجة مع المحتوى عن الأشكال التي يحددها النظام، إذ يتمتع الناشرون بإمكانية تحديد قائمة مواد العرض الخاصة بهم التي تتألف منها الإعلانات. ولهذا السبب، تختلف عملية عرض الإعلانات المخصّصة المدمجة مع المحتوى عن تلك الخاصة بأشكال الإعلانات التي يحدّدها النظام في بضع نواحٍ:
- بما أنّ الهدف من
GADCustomNativeAd
هو معالجة أي من أشكال الإعلانات المخصّصة المدمجة مع المحتوى التي تنشئها، فهو لا يتضمّن أدوات مساعدة معتمَدة لمواد العرض. بدلاً من ذلك، فإنها توفر طرقًا مثلimageForKey:
وstringForKey:
تأخذ اسم الحقل كوسيطة. - ما مِن فئة عرض إعلانات مخصّصة مثل
GADNativeAdView
لاستخدامها معGADCustomNativeAd
. لك حرية استخدام أي طريقة عرض منطقية لتجربة المستخدم الخاصة بك. - نظرًا لعدم وجود فئة مخصصة لعرض الإعلانات، لا تحتاج إلى تسجيل أي من المشاهدات التي تستخدمها لعرض مواد عرض الإعلان.
في ما يلي مثال لطريقة عرض إعلان قادرة على عرض إعلان مخصّص بسيط مدمج مع المحتوى:
MySimpleNativeAdView.h
Swift
import UIKit import GoogleMobileAds /// Custom native ad view class with format ID 10063170. class MySimpleNativeAdView: UIView { /// Weak references to this ad's asset views. @IBOutlet weak var headlineView: UILabel! @IBOutlet weak var mainImageView: UIImageView! @IBOutlet weak var captionView: UILabel! ... /// Populates the ad view with the custom native ad object. func populateWithCustomNativeAd(_ customNativeAd: GADCustomNativeAd) { ... } }
Objective-C
@import UIKit; @import GoogleMobileAds; /// View representing a custom native ad format with format ID 10063170. @interface MySimpleNativeAdView : UIView // Weak references to this ad's asset views. @property(weak, nonatomic) IBOutlet UILabel *headlineView; @property(weak, nonatomic) IBOutlet UIImageView *mainImageView; @property(weak, nonatomic) IBOutlet UILabel *captionView; /// Populates the ad view with the custom native ad object. - (void)populateWithCustomNativeAd:(GADCustomNativeAd *)customNativeAd; @end
MySimpleNativeAdView.m (مقتطف)
Swift
... func populateWithCustomNativeAd(_ customNativeAd: GADCustomNativeAd) { self.customNativeAd = customNativeAd // Populate the custom native ad assets. headlineView.text = self.customNativeAd.stringForKey("Headline") mainImageView.image = self.customNativeAd.imageForKey("MainImage")?.image captionView.text = self.customNativeAd.stringForKey("Caption") } ...
Objective-C
... - (void)populateWithCustomNativeAd:(GADCustomNativeAd *)customNativeAd { self.customNativeAd = customNativeAd; // Populate the custom native ad assets. self.headlineView.text = [customNativeAd stringForKey:@"Headline"]; self.mainImageView.image = [customNativeAd imageForKey:@"MainImage"].image; self.captionView.text = [customNativeAd stringForKey:@"Caption"]; } ...
فيديو مدمج مع المحتوى لأشكال الإعلانات المدمجة مع المحتوى المخصّصة
عند إنشاء تنسيق مخصّص، يتوفّر لك خيار جعل التنسيق مؤهلاً للفيديو.
عند تنفيذ تطبيقك، يمكنك استخدام السمة
GADCustomNativeAd.mediaView
للحصول على طريقة عرض الفيديو. بعد ذلك، أضف طريقة العرض هذه
إلى التسلسل الهرمي لطريقة العرض. أما إذا لم يكن الإعلان يتضمّن محتوى فيديو، فضع خططًا بديلة
لعرض الإعلان بدون فيديو.
يتحقّق المثال التالي مما إذا كان الإعلان يتضمّن محتوى فيديو، ويعرض صورةً بدلاً منها في حال عدم توفّر الفيديو:
Swift
... /// Populates the ad view with the custom native ad object. func populate(withCustomNativeAd customNativeAd: GADCustomNativeAd) { if customNativeAd.videoController.hasVideoContent(), let mediaView = customNativeAd.mediaView { updateMainView(mediaView) } else { // Assumes your native format has an image asset with the name MainImage. let image: UIImage? = customNativeAd.image(forKey: "MainImage")?.image updateMainView(UIImageView(image: image)) } } private func updateMainView(_ mainView:UIView) { // Assumes you have a placeholder view for your media content. // Remove all the placeholder's subviews. for subview: UIView in mainPlaceholder.subviews { subview.removeFromSuperview() } mainPlaceholder.addSubview(mainView) // Size the media view to fill our container size. mainView.translatesAutoresizingMaskIntoConstraints = false let viewDictionary: [AnyHashable: Any] = ["mainView":mainView] mainPlaceholder.addConstraints(NSLayoutConstraint.constraints( withVisualFormat: "H:|[mainView]|", options: [], metrics: nil, views: viewDictionary as? [String : Any] ?? [String : Any]())) mainPlaceholder.addConstraints(NSLayoutConstraint.constraints( withVisualFormat: "V:|[mainView]|", options: [], metrics: nil, views: viewDictionary as? [String : Any] ?? [String : Any]())) } ...
Objective-C
... - (void)populateWithCustomNativeAd:(GADCustomNativeAd *)ad { UIView *mainView = nil; if (ad.videoController.hasVideoContent) { mainView = ad.mediaView; } else { // Assumes your native format has an image asset with the name MainImage. UIImage *image = [ad imageForKey:@"MainImage"].image; mainView = [[UIImageView alloc] initWithImage:image]; } // Assumes you have a placeholder view for your media content. for (UIView *subview in self.mainPlaceholder.subviews) { [subview removeFromSuperview]; } [self.mainPlaceholder addSubview:mainView]; // Size the main view to fill our container size. [mainView setTranslatesAutoresizingMaskIntoConstraints:NO]; NSDictionary *viewDictionary = NSDictionaryOfVariableBindings(mainView); [self.mainPlaceholder addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[mainView]|" options:0 metrics:nil views:viewDictionary]]; [self.mainPlaceholder addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[mainView]|" options:0 metrics:nil views:viewDictionary]]; } ...
اطّلع على GADVideoController لمزيد من المعلومات حول كيفية تخصيص تجربة فيديو لإعلان مدمج مع المحتوى.
نزِّل مثال العرض المخصّص في "مدير الإعلانات" للحصول على مثال عملي لفيديو مدمج مع المحتوى.
التعامل مع النقرات ومرات الظهور المخصّصة للإعلانات المدمجة مع المحتوى
بالنسبة إلى أشكال الإعلانات المدمجة مع المحتوى المخصصة، يكون تطبيقك مسؤولاً عن تسجيل مرات الظهور وإعداد تقارير عن أحداث النقرات في حزمة تطوير البرامج (SDK).
تسجيل مرّات الظهور
لتسجيل مرة ظهور لإعلان مدمج مع المحتوى، ما عليك سوى استدعاء طريقة recordImpression
في GADCustomNativeAd
المقابلة:
Swift
myCustomNativeAd.recordImpression()
Objective-C
[myCustomNativeAd recordImpression];
تمنع حزمة SDK تسجيل مرات الظهور المكرّرة في طلب واحد، في حال استدعى تطبيقك الطريقة عن طريق الخطأ عدة مرات للإعلان نفسه.
إعداد تقارير النقرات
لإبلاغ حزمة تطوير البرامج (SDK) بحدوث نقرة في عرض مادة العرض، يجب استدعاء طريقة performClickOnAssetWithKey:
على GADCustomNativeAd
المناسبة وإدخال اسم مادة العرض التي تم النقر عليها.
على سبيل المثال، إذا كانت لديك مادة عرض في التنسيق المخصّص باسم "MainImage" وأردت الإبلاغ عن نقرة على طريقة العرض التي تتوافق مع مادة العرض تلك،
ستبدو التعليمة البرمجية على النحو التالي:
Swift
myCustomNativeAd.performClickOnAsset(withKey: "MainImage")
Objective-C
[myCustomNativeAd performClickOnAssetWithKey:@"MainImage"];
تجدر الإشارة إلى أنّك لا تحتاج إلى استدعاء هذه الطريقة لكلّ مشاهدة مواد عرض مرتبطة بإعلانك. إذا كانت لديك مادة عرض أخرى تسمى "Caption" مثلاً، وكان من المفترض
أن يتم عرضها بدون أن ينقر المستخدم عليها أو ينقر عليها، لن يحتاج تطبيقك إلى
استدعاء performClickOnAssetWithKey:
لعرض ذلك العرض.
الاستجابة لإجراءات النقرات المخصّصة
GADCustomNativeAd
لديه الموقع customClickHandler
من النوع
GADNativeAdCustomClickHandler
Swift
typealias GADNativeAdCustomClickHandler = (assetID: String) -> Void
Objective-C
typedef void (^GADNativeAdCustomClickHandler)(NSString *assetID);
عبارة عن كتلة (هدف-C) / إغلاق (Swift) يقبل assetID
كمَعلمة إدخال، تحدّد مادة العرض التي تم النقر عليها.
عند إجراء نقرة على إعلان مخصّص مدمج مع المحتوى، تكون هناك ثلاثة استجابات محتملة من حزمة تطوير البرامج (SDK) تمت تجربتها بالترتيب التالي:
- يمكنك استدعاء مجموعة
customClickHandler
في Object-C أو الإغلاق في Swift، في حال تم ضبط مجموعة. - تنقَّل في عناوين URL لرابط لموضع معيّن للإعلان وافتح أول عنوان يمكن العثور على تطبيق مطابق له.
- افتح متصفحًا وانتقل إلى عنوان URL المقصود التقليدي للإعلان.
تقبل السمة customClickHandler
مربّعًا في Object-C وإغلاقه في Swift. في حال وضع حظر أو إغلاق، ستتولى حزمة تطوير البرامج (SDK) تشغيله ولن تتخذ أي إجراء آخر. ومع ذلك، في حال تحديد قيمة فارغة، ستعود حزمة تطوير البرامج (SDK) إلى عنوان URL لصفحة معيّنة في التطبيق و/أو عناوين URL المقصودة المسجّلة في الإعلان.
تتيح معالِجات النقرات المخصّصة لتطبيقك تحديد أفضل إجراء يمكن اتخاذه استجابةً للنقرة، سواء كان تحديث واجهة المستخدم أو تقديم وحدة تحكم عرض أخرى أو الاكتفاء بتسجيل النقر. إليك مثال يوضح تنبيهًا:
Swift
myCustomNativeAd.customClickHandler = { assetID in if assetID == "MainImage" { let alertView = UIAlertView(title: "Custom Click", message: "You just clicked on the image!", delegate: self, cancelButtonTitle: "OK") alertView.alertViewStyle = .default alertView.show() } } myCustomNativeAd.performClickOnAsset(withKey: "MainImage")
Objective-C
[self.customNativeAd setCustomClickHandler:^(NSString *assetID){ if ([assetID isEqualToString:@"MainImage"]) { [[[UIAlertView alloc] initWithTitle:@"Custom Click" message:@"You just clicked on the image!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil] show]; } }]; [self.customNativeAd performClickOnAssetWithKey:@"MainImage"];
اختبار رمز الإعلان المدمج مع المحتوى
الإعلانات المَبيعة مباشرةً
إذا كنت ترغب في اختبار شكل الإعلانات المدمجة مع المحتوى المُباعة مباشرةً، فيمكنك الاستفادة من Ad Manager رقم تعريف الوحدة الإعلانية هذا:
/6499/example/native
تم تكوينها لعرض نماذج إعلانات تثبيت التطبيقات والمحتوى، بالإضافة إلى شكل إعلان مدمج مع المحتوى مخصص مع مواد العرض التالية:
- العنوان (نص)
- الصورة الرئيسية (الصورة)
- شرح (نص)
إعلانات إعادة التعبئة المدمجة مع المحتوى
لاختبار سلوك إعلانات إعادة التعبئة المدمجة مع المحتوى، يمكنك استخدام Ad Manager الوحدة الإعلانية التالية:
/6499/example/native-backfill
وسيعرض نموذجًا لإعلانات تثبيت التطبيقات والمحتوى التي تتضمن تراكب "خيارات الإعلان".
احرص على تحديث الرمز للإشارة إلى معرّفات الوحدات الإعلانية والأشكال الفعلية قبل النشر!