कस्टम नेटिव विज्ञापन फ़ॉर्मैट

कस्टम विज्ञापन फ़ॉर्मैट

सिस्टम के तय किए गए विज्ञापन फ़ॉर्मैट की तरह, कस्टम नेटिव विज्ञापन फ़ॉर्मैट भी GADAdLoader ऑब्जेक्ट का इस्तेमाल करके लोड किए जाते हैं. GADAdLoader को शुरू करते समय, adTypes कलेक्शन में GADAdLoaderAdTypeCustomNative कॉन्सटेंट शामिल करने पर, विज्ञापन लोड करते समय पसंद के मुताबिक नेटिव फ़ॉर्मैट का अनुरोध करने के लिए, यह कॉन्फ़िगर हो जाएगा.

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;

फ़ॉर्मैट के आईडी

कस्टम नेटिव विज्ञापन फ़ॉर्मैट के बारे में बताने के लिए इस्तेमाल किए जाने वाले फ़ॉर्मैट आईडी, Ad Manager यूज़र इंटरफ़ेस (यूआई) में डिलीवरी ड्रॉपडाउन के नेटिव सेक्शन में दिखेंगे.

हर कस्टम नेटिव विज्ञापन के फ़ॉर्मैट का आईडी, उसके नाम के बगल में दिखता है. किसी भी एक नाम पर क्लिक करने से आपको एक ब्यौरे वाली स्क्रीन पर ले जाया जाता है. इस स्क्रीन पर फ़ॉर्मैट के फ़ील्ड के बारे में जानकारी दिखती है:

यहां से, अलग-अलग फ़ील्ड जोड़े, बदले, और हटाए जा सकते हैं. हर एसेट के नाम को नोट करें. नाम वह कुंजी है जिसका इस्तेमाल आपकी पसंद के मुताबिक बनाए गए नेटिव विज्ञापन फ़ॉर्मैट को दिखाते समय हर एसेट का डेटा पाने के लिए किया जाता है.

कस्टम नेटिव विज्ञापन फ़ॉर्मैट दिखाए जा रहे हैं

कस्टम नेटिव विज्ञापन फ़ॉर्मैट, सिस्टम से तय किए गए फ़ॉर्मैट से अलग होते हैं. पब्लिशर के पास उन एसेट की अपनी सूची बनाने की सुविधा होती है जो विज्ञापन बनाते हैं. यही वजह है कि पसंद के मुताबिक नेटिव विज्ञापनों को दिखाने की प्रक्रिया, सिस्टम के तय किए गए फ़ॉर्मैट की प्रक्रिया से कुछ हद तक अलग होती है:

  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: 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

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

कस्टम नेटिव विज्ञापन फ़ॉर्मैट के लिए नेटिव वीडियो

पसंद के मुताबिक फ़ॉर्मैट बनाते समय, आपके पास ऐसे फ़ॉर्मैट को वीडियो में दिखाने का विकल्प होता है.

अपने ऐप्लिकेशन में, वीडियो का व्यू पाने के लिए 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]];
  [self.mainPlaceholder
      addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[mainView]|"
                                                             options:0
                                                             metrics:nil
                                                               views:viewDictionary]];
}
...

अपनी पसंद के मुताबिक नेटिव विज्ञापन के वीडियो अनुभव को पसंद के मुताबिक बनाने का तरीका जानने के लिए, GADVideoController देखें.

नेटिव वीडियो को सही तरीके से दिखाने के लिए, Ad Manager की कस्टम रेंडरिंग का उदाहरण डाउनलोड करें.

कस्टम नेटिव विज्ञापन के क्लिक और इंप्रेशन मैनेज करना

कस्टम नेटिव विज्ञापन फ़ॉर्मैट के लिए, इंप्रेशन रिकॉर्ड करने और 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 को इनपुट पैरामीटर के तौर पर स्वीकार करता है. इससे उस ऐसेट की पहचान होती है जिस पर क्लिक किया गया है.

जब पसंद के मुताबिक बनाए गए नेटिव विज्ञापन पर कोई क्लिक किया जाता है, तब SDK टूल की ओर से इस क्रम में तीन जवाब मिलते हैं. SDK टूल की ओर से ऐसे जवाब देने की कोशिश की जाती है:

  1. अगर कोई सेट किया गया था, तो ऑब्जेक्टिव-सी में customClickHandler ब्लॉक को शुरू करें या स्विफ़्ट में उसे बंद करें.
  2. विज्ञापन के डीपलिंक यूआरएल को देखें और वह पहला यूआरएल खोलें जिसके लिए कोई मिलता-जुलता ऐप्लिकेशन मिल सकता है.
  3. एक ब्राउज़र खोलें और विज्ञापन के पारंपरिक गंतव्य URL पर नेविगेट करें.

customClickHandler प्रॉपर्टी, ऑब्जेक्टिव-सी में ब्लॉक और स्विफ़्ट में क्लोज़र को स्वीकार करती है. अगर आपने कोई रोक लगाई है या उसे बंद किया है, तो SDK टूल उसे चलाएगा और कोई कार्रवाई नहीं करेगा. हालांकि, अगर शून्य वैल्यू सेट की जाती है, तो SDK टूल, विज्ञापन के साथ रजिस्टर किए गए डीपलिंक और/या डेस्टिनेशन यूआरएल पर वापस चला जाएगा.

कस्टम क्लिक हैंडलर की मदद से आपका ऐप्लिकेशन यह तय कर सकता है कि किसी क्लिक के जवाब में, उपयोगकर्ता सबसे सही कौनसी कार्रवाई कर सकता है. जैसे, यूज़र इंटरफ़ेस (यूआई) अपडेट करना, दूसरा व्यू कंट्रोलर प्रज़ेंट करना या सिर्फ़ क्लिक को लॉग करना. यहां एक उदाहरण दिया गया है जो चेतावनी दिखाता है:

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 विज्ञापन यूनिट आईडी का इस्तेमाल करें:

/6499/example/native

इसे ऐप्लिकेशन इंस्टॉल और कॉन्टेंट विज्ञापनों के सैंपल के साथ-साथ, नीचे दिए गए एसेट के साथ पसंद के मुताबिक बनाया गया नेटिव विज्ञापन फ़ॉर्मैट दिखाने के लिए कॉन्फ़िगर किया गया है:

  • हेडलाइन (टेक्स्ट)
  • मुख्य इमेज (इमेज)
  • कैप्शन (टेक्स्ट)

नेटिव बैकफ़िल विज्ञापन

नेटिव बैकफ़िल विज्ञापनों के व्यवहार की जांच करने के लिए, इस Ad Manager विज्ञापन यूनिट का इस्तेमाल करें:

/6499/example/native-backfill

यह, AdChoices ओवरले वाले ऐप्लिकेशन इंस्टॉल और कॉन्टेंट विज्ञापन के नमूने दिखाएगा.

लाइव होने से पहले, अपनी असल विज्ञापन यूनिट और फ़ॉर्मैट आईडी देखने के लिए, कोड को अपडेट करना न भूलें!