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

প্ল্যাটফর্ম বেছে নিন: Android iOS Android (Legacy)

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

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

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;

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

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

প্রতিটি কাস্টম নেটিভ বিজ্ঞাপনের ফর্ম্যাট আইডি তার নামের পাশে দেখা যায়। কোনও একটি নামের উপর ক্লিক করলে আপনি একটি বিবরণ স্ক্রিনে পৌঁছে যাবেন যেখানে ফর্ম্যাটের ফিল্ড সম্পর্কে তথ্য দেখানো হয়:

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

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

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

  1. যেহেতু GADCustomNativeAd আপনার তৈরি করা যেকোনও কাস্টম নেটিভ বিজ্ঞাপন ফর্ম্যাট ম্যানেজ করার জন্য, তাই এতে নামযুক্ত অ্যাসেট অ্যাক্সেসর নেই। পরিবর্তে, এটি imageForKey: এবং stringForKey:-এর মতো পদ্ধতি অফার করে যা ফিল্ডের নামকে আর্গুমেন্ট হিসেবে গ্রহণ করে।
  2. GADCustomNativeAd-এর সাথে ব্যবহার করার জন্য GADNativeAdView-এর মতো কোনও নির্দিষ্ট বিজ্ঞাপন ভিউ ক্লাস নেই। আপনার ব্যবহারকারীর অভিজ্ঞতার জন্য যে ভিউ উপযুক্ত বলে মনে হয় সেটি আপনি ব্যবহার করতে পারেন।
  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"];
}
...

AdChoices আইকন রেন্ডার করা

ডিজিটাল সার্ভিস অ্যাক্ট (DSA) মেনে চলার অংশ হিসেবে, ইউরোপীয় অর্থনৈতিক অঞ্চলে (EEA) দেখানো রিজার্ভেশন বিজ্ঞাপনে 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:
      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 ক্লাস দেখুন।

কাস্টম নেটিভ ভিডিও প্রয়োগ করার জন্য, Ad Manager কাস্টম রেন্ডারিংয়ের উদাহরণ Swift এবং Objective-C-তে দেখুন।

কাস্টম নেটিভ বিজ্ঞাপনে ক্লিক ও ইম্প্রেশন ম্যানেজ করা

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

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

কাস্টম নেটিভ বিজ্ঞাপনের জন্য ইম্প্রেশন রেকর্ড করতে, সংশ্লিষ্ট GADCustomNativeAd-এ recordImpression মেথড কল করুন:

Swift

myCustomNativeAd.recordImpression()

Objective-C

[myCustomNativeAd recordImpression];

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

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

অ্যাসেট ভিউতে ক্লিক করা হয়েছে বলে SDK-কে জানাতে, সংশ্লিষ্ট GADCustomNativeAd-এ performClickOnAssetWithKey: মেথড কল করুন এবং যে অ্যাসেটে ক্লিক করা হয়েছে তার নাম পাস করুন। যেমন, আপনার কাস্টম ফর্ম্যাটে "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. Objective-C-তে customClickHandler ব্লক বা Swift-এ ক্লোজার ইনভোক করুন, যদি কোনও একটি সেট করা থাকে।
  2. বিজ্ঞাপনের ডিপলিঙ্ক URL-এর মাধ্যমে লুপ করুন এবং প্রথমটি খুলুন যার জন্য একটি ম্যাচিং অ্যাপ খুঁজে পাওয়া যাবে।
  3. ব্রাউজার খুলে বিজ্ঞাপনের প্রচলিত গন্তব্য URL-এ যান।

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

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

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

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

সরাসরি বিক্রি হওয়া বিজ্ঞাপন

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

/21775744923/example/native

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

  • শিরোনাম (টেক্সট)
  • MainImage (image)
  • ক্যাপশন (টেক্সট)

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

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

/21775744923/example/native-backfill

এটি স্যাম্পেল অ্যাপ ইনস্টল ও কন্টেন্ট বিজ্ঞাপন দেখাবে যার মধ্যে AdChoices ওভারলে অন্তর্ভুক্ত থাকবে।

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