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

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

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

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

يمكن العثور على أرقام تعريف التنسيقات المستخدَمة للإشارة بشكل فريد إلى أشكال الإعلانات المدمجة مع المحتوى المخصّصة في واجهة مستخدِم "مدير إعلانات 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: 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"];
}
...

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

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

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

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:
      GADNativeAssetIdentifier.adChoicesViewAsset.rawValue)
  }

  func populate(withCustomNativeAd customNativeAd: GADCustomNativeAd) {

    // Render the AdChoices image.
    let adChoicesKey = GADNativeAssetIdentifier.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: 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]];
}
...

اطّلِع على 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"];

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

الاستجابة لإجراءات النقر المخصّصة

يحتوي GADCustomNativeAd على سمة customClickHandler من النوع GADNativeAdCustomClickHandler.

Swift

typealias GADNativeAdCustomClickHandler = (assetID: String) -> Void

Objective-C

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

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

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

  1. استخدِم العنصر customClickHandler في Objective-C أو العنصر المُغلق في Swift، إذا تم ضبط أحدهما.
  2. تنقَّل بين عناوين 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

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

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