استخدام أشكال "الإعلانات المدمجة مع المحتوى" المخصّصة

أشكال الإعلانات المخصّصة

مثل أشكال "الإعلانات المدمجة مع المحتوى" التي يحدّدها النظام، يتم تحميل أشكال "الإعلانات المدمجة مع المحتوى" المخصّصة باستخدام عناصر GADAdLoader. سيؤدي تضمين الثابت GADAdLoaderAdTypeCustomNative في مصفوفة adTypes عند بدء GADAdLoader إلى ضبطه لطلب أشكال مخصّصة للإعلانات المدمجة مع المحتوى عند تحميل الإعلانات.

GADCustomNativeAdLoaderDelegate

يتضمّن بروتوكول تحميل الأشكال المخصّصة طريقتَين. يستخدم GADAdLoader الملف الأول لمعرفة معرّفات التنسيقات التي يجب طلبها:

Swift

public func customNativeAdFormatIDs(for adLoader: AdLoader) -> [Any]

Objective-C

- (NSArray *)customNativeAdFormatIDsForAdLoader:(AdLoader *)adLoader;

يرتبط كل شكل من أشكال الإعلانات المدمجة مع المحتوى المخصّصة بمعرّف شكل مقابل يحدّده. عند استدعاء هذه الطريقة، من المفترض أن يعرض تطبيقك مصفوفة تحتوي على معرّفات أشكال الإعلانات التي تم إعدادها للعرض.

يتم إرسال الرسالة الثانية عند تحميل "الإعلان المدمج مع المحتوى" المخصّص، وهي تشبه الرسائل الخاصة بالأشكال التي يحدّدها النظام:

Swift

public func adLoader(_ adLoader: AdLoader,
    didReceive customNativeAd: CustomNativeAd)

Objective-C

- (void)adLoader:(AdLoader *)adLoader
    didReceiveCustomNativeAd:(CustomNativeAd *)customNativeAd;

أرقام تعريف التنسيقات

يمكن العثور على أرقام تعريف الأشكال المستخدَمة للإشارة بشكل فريد إلى أشكال "الإعلانات المدمجة مع المحتوى" المخصّصة في واجهة مستخدم "مدير الإعلانات" ضمن قسم مدمج مع المحتوى داخل القائمة المنسدلة العرض:

يظهر معرّف شكل كل "إعلان مدمج مع المحتوى" مخصّص بجانب اسمه. يؤدي النقر على أحد الأسماء إلى نقلك إلى شاشة تفاصيل تعرض معلومات حول حقول التنسيق:

من هنا، يمكن إضافة حقول فردية وتعديلها وإزالتها. دوِّن اسم كل مادة عرض. الاسم هو المفتاح المستخدَم للحصول على بيانات كل مادة عرض عند عرض شكل الإعلان المدمج مع المحتوى المخصّص.

عرض أشكال "الإعلانات المدمجة مع المحتوى" المخصّصة

تختلف أشكال "الإعلانات المدمجة مع المحتوى" المخصّصة عن تلك التي يحدّدها النظام، إذ يمكن للناشرين تحديد قائمة مواد العرض التي يتكوّن منها الإعلان. لهذا السبب، تختلف عملية عرض "الإعلانات المخصّصة المدمجة مع المحتوى" عن عملية عرض الأشكال التي يحدّدها النظام في بعض الجوانب:

  1. بما أنّ GADCustomNativeAd مخصّص للتعامل مع أيّ من أشكال الإعلانات المدمجة مع المحتوى المخصّصة التي تنشئها، لا يتضمّن هذا الكائن دوال وصول إلى مواد العرض المسمّاة. بدلاً من ذلك، يوفّر طرقًا مثل imageForKey: وstringForKey: التي تستخدم اسم الحقل كوسيطة.
  2. لا تتوفّر فئة مخصّصة لعرض الإعلانات، مثل GADNativeAdView، لاستخدامها مع GADCustomNativeAd. لديك مطلق الحرية في استخدام أي طريقة عرض تراها مناسبة لتجربة المستخدم.
  3. بما أنّه لا تتوفّر فئة مخصّصة لعرض الإعلانات، ليس عليك تسجيل أيّ من طرق العرض التي تستخدمها لعرض مواد عرض الإعلان.

في ما يلي مثال على عرض إعلان يمكنه عرض إعلان مدمج مع المحتوى مخصّص وبسيط:

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: CustomNativeAd) {
    ...
  }
}

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: CustomNativeAd) {
  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"];
}
...

عرض رمز "خيارات الإعلان"

في إطار الالتزام بقانون الخدمات الرقمية (DSA)، تتطلّب الإعلانات المحجوزة المعروضة في المنطقة الاقتصادية الأوروبية (EEA) رمز "خيارات الإعلان" ورابطًا إلى صفحة "تفاصيل عن الإعلان" من Google. عند تنفيذ "الإعلانات المدمجة مع المحتوى" المخصّصة، تكون مسؤولاً عن عرض رمز "خيارات الإعلان". من المهم اتّخاذ خطوات لعرض رمز "خيارات الإعلان" وضبط متتبِّع النقرات له عند عرض مواد عرض الإعلان الرئيسية.

يعرض المثال التالي رمز "خيارات الإعلان" ويضبط سلوك النقر.

Swift

class MySimpleNativeAdView: UIView {
  @IBOutlet weak var adChoicesView: UIImageView!

  override func awakeFromNib() {
    super.awakeFromNib()

    // Enable clicks on AdChoices.
    adChoicesView.addGestureRecognizer(
      UITapGestureRecognizer(
        target: self,
        action: #selector(performClickOnAdChoices(_:))))
    adChoicesView.isUserInteractionEnabled = true
  }

  @objc func performClickOnAdChoices(_ sender: UIImage!) {
    customNativeAd.performClickOnAsset(withKey:
      NativeAssetIdentifier.adChoicesViewAsset.rawValue)
  }

  func populate(withCustomNativeAd customNativeAd: CustomNativeAd) {

    // Render the AdChoices image.
    let adChoicesKey = NativeAssetIdentifier.adChoicesViewAsset.rawValue
    let adChoicesImage = customNativeAd.image(forKey: adChoicesKey)?.image
    adChoicesView.image = adChoicesImage
    adChoicesView.isHidden = adChoicesImage == nil
    ...
  }
}

Objective-C

@interface MySimpleNativeAdView ()

@property(nonatomic, weak) IBOutlet UIImageView *adChoicesView;

@end

@implementation MySimpleNativeAdView

- (void)awakeFromNib {
  [super awakeFromNib];
  // Enable clicks on AdChoices.
  [self.adChoicesView addGestureRecognizer:[[UITapGestureRecognizer alloc]
                                            initWithTarget:self
                                            action:@selector(performClickOnAdChoices:)]];
  self.adChoicesView.userInteractionEnabled = YES;
}

- (void)performClickOnAdChoices:(UITapGestureRecognizer *)sender {
    [self.customNativeAd performClickOnAssetWithKey:GADNativeAdChoicesViewAsset];
}

- (void)populateWithCustomNativeAd:(GADCustomNativeAd *)customNativeAd {
  // Render the AdChoices image.
  GADNativeAdImage *adChoicesAsset = [customNativeAd
    imageForKey:GADNativeAdChoicesViewAsset];
  self.adChoicesView.image = adChoicesAsset.image;
  self.adChoicesView.hidden = (adChoicesAsset == nil);
  ...
}

فيديو مدمج مع المحتوى لأشكال "الإعلانات المدمجة مع المحتوى" المخصّصة

عند إنشاء تنسيق مخصّص، يمكنك جعل التنسيق مؤهلاً للفيديو.

في عملية تنفيذ تطبيقك، استخدِم السمة GADCustomNativeAd.mediaContent للحصول على مثيل GADMediaContent للإعلان. لتحديد ما إذا كان الإعلان يحتوي على محتوى فيديو، تحقَّق من السمة hasVideoContent. إذا كان الإعلان يتضمّن محتوى فيديو، أنشِئ طريقة عرض GADMediaView، وعيِّن السمة mediaContent، وأضِف طريقة عرض الوسائط إلى هيكلية طرق العرض. إذا لم يكن الإعلان يتضمّن محتوى فيديو، اعرض مادة عرض بديلة مثل صورة.

يتحقّق المثال التالي مما إذا كان الإعلان يتضمّن محتوى فيديو، ويعرض صورة في مكانه إذا لم يكن الفيديو متاحًا:

Swift

func populate(withCustomNativeAd customNativeAd: CustomNativeAd) {
  // Remove all the media placeholder's subviews.
  for subview: UIView in mainPlaceholder.subviews {
    subview.removeFromSuperview()
  }

  // This custom native ad has both a video and image associated with it. Use the video
  // asset if available, or fall back to the image asset.
  let mainView: UIView
  if customNativeAd.mediaContent.hasVideoContent {
    let mediaView = MediaView()
    mediaView.mediaContent = customNativeAd.mediaContent
    mainView = mediaView
  } else {
    let image: UIImage? = customNativeAd.image(forKey: "MainImage")?.image
    mainView = UIImageView(image: image)
  }
  mainPlaceholder.addSubview(mainView)

  // Size the media view to fill the container size.
  mainView.translatesAutoresizingMaskIntoConstraints = false
  NSLayoutConstraint.activate([
    mainView.leadingAnchor.constraint(equalTo: mainPlaceholder.leadingAnchor),
    mainView.trailingAnchor.constraint(equalTo: mainPlaceholder.trailingAnchor),
    mainView.topAnchor.constraint(equalTo: mainPlaceholder.topAnchor),
    mainView.bottomAnchor.constraint(equalTo: mainPlaceholder.bottomAnchor),
  ])
}

Objective-C

- (void)populateWithCustomNativeAd:(GADCustomNativeAd *)customNativeAd {
  // Remove all the media placeholder's subviews.
  for (UIView *subview in self.mainPlaceholder.subviews) {
    [subview removeFromSuperview];
  }

  // This custom native ad has both a video and image associated with it. Use the video
  // asset if available, or fall back to the image asset.
  UIView *mainView = nil;
  if (customNativeAd.mediaContent.hasVideoContent) {
    GADMediaView *mediaView = [[GADMediaView alloc] init];
    mediaView.mediaContent = customNativeAd.mediaContent;
    mainView = mediaView;
  } else {
    UIImage *image = [customNativeAd imageForKey:@"MainImage"].image;
    mainView = [[UIImageView alloc] initWithImage:image];
  }
  [self.mainPlaceholder addSubview:mainView];

  // Size the media view to fill the container size.
  mainView.translatesAutoresizingMaskIntoConstraints = NO;
  [NSLayoutConstraint activateConstraints:@[
    [mainView.leadingAnchor constraintEqualToAnchor:self.mainPlaceholder.leadingAnchor],
    [mainView.trailingAnchor constraintEqualToAnchor:self.mainPlaceholder.trailingAnchor],
    [mainView.topAnchor constraintEqualToAnchor:self.mainPlaceholder.topAnchor],
    [mainView.bottomAnchor constraintEqualToAnchor:self.mainPlaceholder.bottomAnchor],
  ]];
}

لمعرفة تفاصيل حول تخصيص فيديو إعلان مدمج مع المحتوى مخصّص، يُرجى الاطّلاع على الفئة GADVideoController.

لتنفيذ فيديو مخصّص مدمج مع المحتوى، اطّلِع على مثال العرض المخصّص في "مدير إعلانات Google" بلغة Swift وObjective-C.

التعامل مع النقرات ومرّات الظهور لـ "الإعلانات المدمجة مع المحتوى" المخصّصة

بالنسبة إلى أشكال "الإعلانات المدمجة مع المحتوى" المخصّصة، يكون تطبيقك مسؤولاً عن تسجيل مرّات الظهور وإرسال أحداث النقر إلى حزمة تطوير البرامج (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 NativeAdCustomClickHandler = (assetID: String) -> Void

Objective-C

typedef void (^GADNativeAdCustomClickHandler)(NSString *assetID);

هذه كتلة (Objective-C) أو إغلاق (Swift) يقبل assetID كمعلَمة إدخال تحدّد مادة العرض التي تم النقر عليها.

عند النقر على إعلان مدمج مع المحتوى مخصّص، هناك ثلاثة ردود محتملة من حزمة تطوير البرامج (SDK)، تتم محاولة تنفيذها بهذا الترتيب:

  1. استدعاء كتلة customClickHandler في Objective-C أو الإغلاق في Swift، إذا تم ضبط أحدهما.
  2. يمكنك تكرار عناوين URL للروابط لصفحات معيّنة في الإعلان وفتح أول عنوان URL يمكن العثور على تطبيق مطابق له.
  3. افتح متصفّحًا وانتقِل إلى عنوان URL المقصود التقليدي للإعلان.

تقبل السمة customClickHandler كتلة في Objective-C وإغلاقًا في Swift. إذا ضبطت حظرًا أو إغلاقًا، ستنفّذه حزمة تطوير البرامج (SDK) ولن تتّخذ أي إجراء آخر. في حال ضبط قيمة فارغة، ستعود حزمة تطوير البرامج (SDK) إلى الرابط لصفحة معيّنة و/أو عناوين 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"];

اختبار رمز الإعلان المدمج مع المحتوى

الإعلانات المَبيعة المباشرة

إذا أردت تجربة الإعلانات المدمجة مع المحتوى المباعة مباشرةً، يمكنك استخدام معرّف الوحدة الإعلانية التالي في "إدارة إعلانات Google":

/21775744923/example/native

تم ضبطه لعرض نماذج إعلانات تثبيت التطبيقات وإعلانات المحتوى، بالإضافة إلى شكل "إعلان مدمج مع المحتوى" مخصّص يتضمّن مواد العرض التالية:

  • العنوان الرئيسي (نص)
  • MainImage (صورة)
  • الشرح (نص)

إعلانات مدمجة مع المحتوى بنظام العرض الاحتياطي

لاختبار سلوك "الإعلانات المدمجة مع المحتوى" الاحتياطية، استخدِم هذه الوحدة الإعلانية في "إدارة إعلانات Google":

/21775744923/example/native-backfill

وسيعرض نماذج لإعلانات تثبيت التطبيقات وإعلانات المحتوى التي تتضمّن تراكب "خيارات الإعلان".

يُرجى تذكُّر تعديل الرمز للإشارة إلى معرّفات الوحدات الإعلانية وأشكال الإعلانات الفعلية قبل نشرها.