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

اختيار النظام الأساسي: Android جديد Android iOS

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

على غرار أشكال الإعلانات المدمجة مع المحتوى المحدّدة في النظام، يتم تحميل أشكال الإعلانات المدمجة مع المحتوى المخصّصة باستخدام عناصر 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;

معرّفات الأشكال

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

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

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

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

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

  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.mediaView للحصول على عرض الفيديو. بعد ذلك، أضِف هذا العرض إلى هيكلية طرق العرض. إذا لم يكن الإعلان يتضمّن محتوى فيديو، ضَع خططًا بديلة لعرض الإعلان بدون فيديو.

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

Swift

...
  /// Populates the ad view with the custom native ad object.
  func populate(withCustomNativeAd customNativeAd: CustomNativeAd) {
    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]];
}
...

يمكنك الاطّلاع على GADVideoController لمزيد من المعلومات حول كيفية تخصيص تجربة الفيديو في إعلان مدمج مع المحتوى مخصّص.

يمكنك تنزيل مثال العرض المخصّص في "مدير إعلانات Google" للحصول على مثال عملي للفيديو المدمج مع المحتوى قيد التشغيل.

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

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

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

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