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

اختيار النظام الأساسي: Android iOS Android (الإصدار القديم)

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

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

يُرجى العِلم أنّه ليس عليك استدعاء هذه الطريقة لكل طريقة عرض مواد عرض مرتبطة بإعلانك. على سبيل المثال، إذا كان لديك مادة عرض أخرى باسم "شرح"، وكان من المفترض أن تظهر ولكن لم ينقر عليها المستخدم، لن يحتاج تطبيقك إلى طلب 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 إلى عناوين 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 (image)
  • الترجمة والشرح (نص)

إعلانات ملء الفراغات المدمجة مع المحتوى

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

/21775744923/example/native-backfill

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

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