কাস্টম নেটিভ বিজ্ঞাপন বিন্যাস

প্ল্যাটফর্ম নির্বাচন করুন: অ্যান্ড্রয়েড অ্যান্ড্রয়েড (বিটা) আইওএস

কাস্টম বিজ্ঞাপন ফর্ম্যাট

সিস্টেম-সংজ্ঞায়িত প্রতিরূপের মতো, কাস্টম নেটিভ বিজ্ঞাপন ফর্ম্যাটগুলি GADAdLoader অবজেক্ট ব্যবহার করে লোড করা হয়। GADAdLoader শুরু করার সময় adTypes অ্যারেতে GADAdLoaderAdTypeCustomNative ধ্রুবক অন্তর্ভুক্ত করলে বিজ্ঞাপন লোড করার সময় কাস্টম নেটিভ ফর্ম্যাটের অনুরোধ করার জন্য এটি কনফিগার হবে।

GADCustomNativeAdLoaderপ্রতিনিধি

কাস্টম ফরম্যাট লোড করার প্রোটোকলের দুটি পদ্ধতি রয়েছে। প্রথমটি GADAdLoader কোন ফরম্যাট আইডির অনুরোধ করবে তা খুঁজে বের করার জন্য ব্যবহার করে:

সুইফট

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

অবজেক্টিভ-সি

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

প্রতিটি কাস্টম নেটিভ বিজ্ঞাপন ফর্ম্যাটের একটি সংশ্লিষ্ট ফর্ম্যাট আইডি থাকে যা এটিকে সনাক্ত করে। যখন এই পদ্ধতিটি কল করা হয়, তখন আপনার অ্যাপটি প্রদর্শনের জন্য প্রস্তুত বিজ্ঞাপনগুলির ফর্ম্যাট আইডি ধারণকারী একটি অ্যারে ফেরত দেবে।

কাস্টম নেটিভ বিজ্ঞাপন লোড হয়ে গেলে দ্বিতীয় বার্তাটি পাঠানো হয়, অনেকটা সিস্টেম-সংজ্ঞায়িত ফর্ম্যাটের মতো:

সুইফট

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

অবজেক্টিভ-সি

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

ফর্ম্যাট আইডি

কাস্টম নেটিভ বিজ্ঞাপন ফর্ম্যাটগুলিকে অনন্যভাবে উল্লেখ করার জন্য ব্যবহৃত ফর্ম্যাট আইডিগুলি ডেলিভারি ড্রপডাউনের ভিতরে নেটিভ বিভাগের অধীনে বিজ্ঞাপন ম্যানেজার UI-তে পাওয়া যাবে:

প্রতিটি কাস্টম নেটিভ বিজ্ঞাপনের ফর্ম্যাট আইডি তার নামের পাশে প্রদর্শিত হয়। নামের যেকোনো একটিতে ক্লিক করলে আপনি একটি বিশদ স্ক্রিনে চলে আসবেন যেখানে ফর্ম্যাটের ক্ষেত্রগুলি সম্পর্কে তথ্য দেখানো হবে:

এখান থেকে, পৃথক ক্ষেত্র যোগ, সম্পাদনা এবং অপসারণ করা যেতে পারে। প্রতিটি সম্পদের নাম নোট করুন। আপনার কাস্টম নেটিভ বিজ্ঞাপন ফর্ম্যাট প্রদর্শনের সময় প্রতিটি সম্পদের ডেটা পেতে নামটি ব্যবহৃত কী।

কাস্টম নেটিভ বিজ্ঞাপন ফর্ম্যাটগুলি দেখানো হচ্ছে

কাস্টম নেটিভ বিজ্ঞাপন ফর্ম্যাটগুলি সিস্টেম-সংজ্ঞায়িতগুলির থেকে আলাদা, কারণ প্রকাশকদের তাদের নিজস্ব সম্পদের তালিকা সংজ্ঞায়িত করার ক্ষমতা থাকে যা একটি বিজ্ঞাপন তৈরি করে। এই কারণে, কাস্টম নেটিভ বিজ্ঞাপন প্রদর্শনের প্রক্রিয়াটি সিস্টেম-সংজ্ঞায়িত ফর্ম্যাটের থেকে কয়েকটি উপায়ে আলাদা:

  1. যেহেতু GADCustomNativeAd আপনার তৈরি করা যেকোনো কাস্টম নেটিভ বিজ্ঞাপন ফর্ম্যাট পরিচালনা করার জন্য তৈরি, এতে কোনও নামযুক্ত সম্পদ অ্যাক্সেসর নেই। পরিবর্তে, এটি imageForKey: এবং stringForKey: এর মতো পদ্ধতিগুলি অফার করে যা ক্ষেত্রের নামকে একটি যুক্তি হিসাবে গ্রহণ করে।
  2. GADCustomNativeAd সাথে ব্যবহারের জন্য GADNativeAdView এর মতো কোনও ডেডিকেটেড বিজ্ঞাপন ভিউ ক্লাস নেই। আপনার ব্যবহারকারীর অভিজ্ঞতার জন্য যে কোনও ভিউ ব্যবহার করার জন্য আপনি স্বাধীন।
  3. যেহেতু কোনও ডেডিকেটেড বিজ্ঞাপন ভিউ ক্লাস নেই, তাই বিজ্ঞাপনের সম্পদ প্রদর্শনের জন্য আপনার ব্যবহৃত কোনও ভিউ নিবন্ধন করার প্রয়োজন নেই।

এখানে একটি বিজ্ঞাপন দৃশ্যের উদাহরণ দেওয়া হল যা একটি সাধারণ কাস্টম নেটিভ বিজ্ঞাপন প্রদর্শন করতে সক্ষম:

MySimpleNativeAdView.h সম্পর্কে

সুইফট

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

অবজেক্টিভ-সি

@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 (উদ্ধৃতাংশ)

সুইফট

...
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")
}
...

অবজেক্টিভ-সি

...
- (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"];
}
...

AdChoices আইকনটি রেন্ডার করুন

ডিজিটাল সার্ভিসেস অ্যাক্ট (DSA) সাপোর্টিং এর অংশ হিসেবে, ইউরোপীয় অর্থনৈতিক অঞ্চলে (EEA) পরিবেশিত রিজার্ভেশন বিজ্ঞাপনগুলির জন্য একটি AdChoices আইকন এবং Google এর About This Ad পৃষ্ঠার একটি লিঙ্ক প্রয়োজন। কাস্টম নেটিভ বিজ্ঞাপনগুলি বাস্তবায়নের সময়, AdChoices আইকনটি রেন্ডার করার জন্য আপনার দায়িত্ব। রেন্ডার করার জন্য পদক্ষেপ নেওয়া এবং প্রধান বিজ্ঞাপন সম্পদগুলি রেন্ডার করার সময় AdChoices আইকনের জন্য ক্লিক লিসেনার সেট করা গুরুত্বপূর্ণ।

নিম্নলিখিত উদাহরণটি AdChoices আইকনটি রেন্ডার করে এবং উপযুক্ত ক্লিক আচরণ কনফিগার করে।

সুইফট

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
    ...
  }
}

অবজেক্টিভ-সি

@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 প্রপার্টি ব্যবহার করতে পারেন। তারপর আপনার ভিউ হায়ারার্কিতে এই ভিউ যোগ করুন। যদি বিজ্ঞাপনটিতে ভিডিও কন্টেন্ট না থাকে, তাহলে ভিডিও ছাড়াই বিজ্ঞাপনটি দেখানোর জন্য বিকল্প পরিকল্পনা করুন।

নিচের উদাহরণটি বিজ্ঞাপনটিতে ভিডিও কন্টেন্ট আছে কিনা তা পরীক্ষা করে এবং যদি ভিডিও উপলব্ধ না থাকে তবে তার জায়গায় একটি ছবি প্রদর্শন করে:

সুইফট

...
  /// 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]()))
  }
...

অবজেক্টিভ-সি

...
- (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 দেখুন।

নেটিভ ভিডিওর কার্যকরী উদাহরণের জন্য অ্যাড ম্যানেজার কাস্টম রেন্ডারিং উদাহরণটি ডাউনলোড করুন।

কাস্টম নেটিভ বিজ্ঞাপন ক্লিক এবং ইম্প্রেশন পরিচালনা করা

কাস্টম নেটিভ বিজ্ঞাপন ফর্ম্যাটের জন্য, আপনার অ্যাপটি ইম্প্রেশন রেকর্ড করার জন্য এবং SDK-তে ক্লিক ইভেন্ট রিপোর্ট করার জন্য দায়ী।

রেকর্ডিং ইম্প্রেশন

একটি কাস্টম নেটিভ বিজ্ঞাপনের জন্য একটি ইম্প্রেশন রেকর্ড করতে, সংশ্লিষ্ট GADCustomNativeAdrecordImpression পদ্ধতিটি কল করুন:

সুইফট

myCustomNativeAd.recordImpression()

অবজেক্টিভ-সি

[myCustomNativeAd recordImpression];

যদি আপনার অ্যাপ ভুলবশত একই বিজ্ঞাপনের জন্য একাধিকবার পদ্ধতিটি কল করে, তাহলে SDK একটি একক অনুরোধের জন্য ডুপ্লিকেট ইম্প্রেশন রেকর্ড করা থেকে বিরত রাখে।

ক্লিক রিপোর্ট করা

কোনও অ্যাসেট ভিউতে ক্লিক হয়েছে কিনা তা SDK-কে জানাতে, সংশ্লিষ্ট GADCustomNativeAdperformClickOnAssetWithKey: পদ্ধতিতে কল করুন এবং ক্লিক করা অ্যাসেটের নামটি পাস করুন। উদাহরণস্বরূপ, যদি আপনার কাস্টম ফর্ম্যাটে "MainImage" নামক একটি অ্যাসেট থাকে এবং আপনি সেই অ্যাসেটের সাথে সম্পর্কিত ভিউতে ক্লিক রিপোর্ট করতে চান, তাহলে আপনার কোডটি এইরকম দেখাবে:

সুইফট

myCustomNativeAd.performClickOnAsset(withKey: "MainImage")

অবজেক্টিভ-সি

[myCustomNativeAd performClickOnAssetWithKey:@"MainImage"];

মনে রাখবেন যে আপনার বিজ্ঞাপনের সাথে সম্পর্কিত প্রতিটি সম্পদ দর্শনের জন্য এই পদ্ধতিটি কল করার প্রয়োজন নেই। উদাহরণস্বরূপ, যদি আপনার "ক্যাপশন" নামে আরেকটি সম্পদ থাকে, যা প্রদর্শনের জন্য তৈরি ছিল কিন্তু ব্যবহারকারী দ্বারা ক্লিক বা ট্যাপ করা হয়নি, তাহলে আপনার অ্যাপটিকে সেই দর্শনের জন্য performClickOnAssetWithKey: কল করার প্রয়োজন হবে না।

কাস্টম ক্লিক অ্যাকশনের প্রতিক্রিয়া জানানো

GADCustomNativeAd একটি বৈশিষ্ট্য customClickHandler আছে যা GADNativeAdCustomClickHandler ধরণের।

সুইফট

typealias NativeAdCustomClickHandler = (assetID: String) -> Void

অবজেক্টিভ-সি

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

এটি একটি ব্লক (অবজেক্টিভ-সি) / ক্লোজার (সুইফট) যা একটি ইনপুট প্যারামিটার হিসেবে একটি assetID গ্রহণ করে, যা ক্লিক করা সম্পদটিকে সনাক্ত করে।

যখন একটি কাস্টম নেটিভ বিজ্ঞাপনে ক্লিক করা হয়, তখন SDK থেকে তিনটি সম্ভাব্য প্রতিক্রিয়া পাওয়া যায়, এই ক্রমে চেষ্টা করা হয়:

  1. Objective-C তে customClickHandler ব্লকটি চালু করুন অথবা Swift তে ক্লোজারটি চালু করুন, যদি এটি সেট করা থাকে।
  2. বিজ্ঞাপনের ডিপলিংক ইউআরএলগুলি ঘুরে দেখুন এবং প্রথমটি খুলুন যার জন্য একটি মিলযুক্ত অ্যাপ পাওয়া যাবে।
  3. একটি ব্রাউজার খুলুন এবং বিজ্ঞাপনের ঐতিহ্যবাহী গন্তব্য URL-এ যান।

customClickHandler প্রপার্টি Objective-C তে একটি ব্লক এবং Swift তে একটি ক্লোজার গ্রহণ করে। যদি আপনি একটি ব্লক বা ক্লোজার সেট করেন, তাহলে SDK এটি চালাবে এবং আর কোনও পদক্ষেপ নেবে না। তবে যদি আপনি একটি শূন্য মান সেট করেন, তাহলে SDK বিজ্ঞাপনের সাথে নিবন্ধিত ডিপলিঙ্ক এবং/অথবা গন্তব্য URL গুলিতে ফিরে যাবে।

কাস্টম ক্লিক হ্যান্ডলারগুলি আপনার অ্যাপকে ক্লিকের প্রতিক্রিয়ায় সবচেয়ে ভালো পদক্ষেপ নেওয়ার সিদ্ধান্ত নিতে দেয়, তা সে UI আপডেট করা হোক, অন্য ভিউ কন্ট্রোলার উপস্থাপন করা হোক, অথবা কেবল ক্লিক লগ করা হোক। এখানে একটি উদাহরণ দেওয়া হল যা একটি সতর্কতা দেখায়:

সুইফট

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")

অবজেক্টিভ-সি

[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"];

নেটিভ বিজ্ঞাপন কোড পরীক্ষা করা হচ্ছে

সরাসরি বিক্রিত বিজ্ঞাপন

সরাসরি বিক্রিত নেটিভ বিজ্ঞাপনগুলি কেমন তা পরীক্ষা করে দেখতে চাইলে, আপনি এই বিজ্ঞাপন পরিচালক বিজ্ঞাপন ইউনিট আইডি ব্যবহার করতে পারেন:

/21775744923/example/native

এটি নমুনা অ্যাপ ইনস্টল এবং কন্টেন্ট বিজ্ঞাপন পরিবেশনের জন্য কনফিগার করা হয়েছে, পাশাপাশি নিম্নলিখিত সম্পদ সহ একটি কাস্টম নেটিভ বিজ্ঞাপন ফর্ম্যাটও রয়েছে:

  • শিরোনাম (টেক্সট)
  • প্রধান চিত্র (চিত্র)
  • ক্যাপশন (টেক্সট)

নেটিভ ব্যাকফিল বিজ্ঞাপন

নেটিভ ব্যাকফিল বিজ্ঞাপনের আচরণ পরীক্ষা করতে, এই বিজ্ঞাপন পরিচালক বিজ্ঞাপন ইউনিটটি ব্যবহার করুন:

/21775744923/example/native-backfill

এটি অ্যাডচয়েস ওভারলে সহ নমুনা অ্যাপ ইনস্টল এবং কন্টেন্ট বিজ্ঞাপন পরিবেশন করবে।

লাইভে আসার আগে আপনার আসল বিজ্ঞাপন ইউনিট এবং ফর্ম্যাট আইডি উল্লেখ করার জন্য আপনার কোড আপডেট করতে ভুলবেন না!