বিডিং অ্যাডাপ্টার ডেভেলপমেন্ট,বিডিং অ্যাডাপ্টার ডেভেলপমেন্ট,বিডিং অ্যাডাপ্টার ডেভেলপমেন্ট,বিডিং অ্যাডাপ্টার ডেভেলপমেন্ট

এই নির্দেশিকাটি সেইসব অ্যাড নেটওয়ার্কের জন্য, যারা গুগল মিডিয়েশনের অধীনে রিয়েল-টাইম বিডিং (RTB)-এ অংশগ্রহণের উদ্দেশ্যে একটি বিডিং অ্যাডাপ্টার তৈরি করতে চায়। আপনি যদি একজন পাবলিশার হন, তবে পাবলিশার মিডিয়েশন নির্দেশাবলী দেখুন।

বিডিং অ্যাডাপ্টার হলো ইন্টিগ্রেশনের ক্লায়েন্ট-সাইড অংশ। এই অ্যাডাপ্টারটি আপনার অ্যাড নেটওয়ার্ক SDK-কে Google Mobile Ads SDK সাথে যোগাযোগ করতে সক্ষম করে, যার ফলে আপনার বিডার দ্বারা পরিবেশিত বিজ্ঞাপনগুলো লোড হয়।

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

একটি বিডিং অ্যাডাপ্টারের কার্যপ্রবাহ

প্রারম্ভিকীকরণ

একটি অ্যাডাপ্টারের সম্পূর্ণ অনুরোধ-প্রতিক্রিয়া-প্রদর্শন জীবনচক্রের বিস্তারিত প্রবাহ নিচে দেখানো হলো:

অ্যাডাপ্টারটি ওয়ার্কফ্লোর নিম্নলিখিত অংশগুলোর জন্য দায়ী:

  • ধাপ ৪-৭: আপনার অ্যাডাপ্টারটি ইনিশিয়ালাইজ করুন এবং ইনিশিয়ালাইজেশন সম্পন্ন হলে Google Mobile Ads SDK পুনরায় কল করুন।

  • ধাপ ১০-১৩: একটি RTB অনুরোধে অংশগ্রহণের জন্য আপনার বিডারকে পাঠানোর উদ্দেশ্যে আপনার অ্যাড নেটওয়ার্ক SDK থেকে সিগন্যাল সংগ্রহ করুন এবং সেগুলোকে Google Mobile Ads SDK-তে ফরোয়ার্ড করুন।

  • ধাপ ১৮-২১: যদি আপনার বিডার বিজয়ী বিডটি ফেরত দেয়, তবে তার প্রতিক্রিয়া অনুযায়ী বিজ্ঞাপনটি লোড করুন। লোড হয়ে গেলে, বিজ্ঞাপনটি লোড হয়েছে বলে Google Mobile Ads SDK জানান।

  • ধাপ ২৩ এবং পরবর্তী পর্যায়সমূহ: আপনার বিজ্ঞাপনটি প্রদর্শিত হওয়ার সময়, গুগল মোবাইল অ্যাডস এসডিকে-কে ইম্প্রেশন ও ক্লিক ইভেন্ট, এবং সেইসাথে আপনার বিজ্ঞাপনের উপস্থাপনা জীবনচক্র চলাকালীন ঘটা অন্যান্য বিজ্ঞাপন ইভেন্টগুলো সম্পর্কে অবহিত করুন।

বিডিং অ্যাডাপ্টার বাস্তবায়ন করা

Google Mobile Ads SDK জন্য একটি বিডিং অ্যাডাপ্টার তৈরি করতে, আপনাকে অবশ্যই RtbAdapter অ্যাবস্ট্রাক্ট ক্লাসটি এক্সটেন্ড করতে হবে। নিম্নলিখিত বিভাগগুলিতে RtbAdapter এর প্রতিটি অ্যাবস্ট্রাক্ট মেথড ব্যাখ্যা করা হয়েছে।

getSDKVersionInfo()

এখানে আপনাকে আপনার SDK-এর ভার্সনটি ফেরত দিতে হবে। এই ভার্সনটি OpenRTB অনুরোধের অংশ হিসেবে আপনার বিডারের কাছে পাঠানো হয়।

এই পদ্ধতিতে আপনাকে একটি VersionInfo রিটার্ন করতে হবে। নিচের উদাহরণে দেখানো হয়েছে, কীভাবে আপনি আপনার SDK-এর স্ট্রিং ভার্সনকে VersionInfo.

@Override
public VersionInfo getSDKVersionInfo() {
  // Get your SDK's version as a string. E.g. "1.2.3"
  // String versionString = YourSdk.getVersion();
  String splits[] = versionString.split("\\.");
  if (splits.length >= 3) {
      int major = Integer.parseInt(splits[0]);
      int minor = Integer.parseInt(splits[1]);
      int micro = Integer.parseInt(splits[2]);
      return new VersionInfo(major, minor, micro);
   }

   String logMessage = String.format("Unexpected SDK version format: %s." +
           "Returning 0.0.0 for SDK version.", sdkVersion);
   Log.w(TAG, logMessage);
   return new VersionInfo(0, 0, 0);
}

getVersionInfo()

এখানে আপনাকে আপনার অ্যাডাপ্টারের ভার্সনটি ফেরত দিতে হবে। এই ভার্সনটি OpenRTB অনুরোধের অংশ হিসেবে আপনার বিডারের কাছে পাঠানো হয়।

গুগলের ওপেন সোর্স এবং ভার্সনযুক্ত অ্যাডাপ্টারগুলো ৪-সংখ্যার অ্যাডাপ্টার ভার্সন পদ্ধতি ব্যবহার করে, কিন্তু VersionInfo কেবল ৩টি সংখ্যা ব্যবহারের সুযোগ দেয়। এই সমস্যার সমাধান করতে, নিচে দেখানো পদ্ধতি অনুযায়ী শেষের দুটি সংখ্যাকে একত্রিত করে প্যাচ ভার্সন তৈরি করার পরামর্শ দেওয়া হয়।

@Override
public VersionInfo getVersionInfo() {
  // Get your adapters's version as a string. E.g. "1.2.3.0"
  String versionString = BuildConfig.VERSION_NAME;
  String splits[] = versionString.split("\\.");
  if (splits.length >= 4) {
      int major = Integer.parseInt(splits[0]);
      int minor = Integer.parseInt(splits[1]);
      int micro = Integer.parseInt(splits[2]) * 100 + Integer.parseInt(splits[3]);
      return new VersionInfo(major, minor, micro);
    }

    String logMessage = String.format("Unexpected adapter version format: %s." +
                "Returning 0.0.0 for adapter version.", versionString);
    Log.w(TAG, logMessage);
    return new VersionInfo(0, 0, 0);
}

initialize()

টাইমআউট: ৩০ সেকেন্ড

initialize() মেথডটি হলো আপনার অ্যাডাপ্টারে কল করা প্রথম মেথড। এটি প্রতি সেশনে শুধুমাত্র একবার কল করা হয়। এই মেথডটি আপনাকে MediationConfiguration অবজেক্টের একটি তালিকা প্রদান করে, যা এই অ্যাপে আপনার অ্যাড নেটওয়ার্কের জন্য কনফিগার করা সমস্ত প্লেসমেন্টের সম্পূর্ণ তালিকা উপস্থাপন করে; আপনি এই তালিকার মাধ্যমে লুপ করে প্রতিটি প্লেসমেন্টের ক্রেডেনশিয়াল পার্স করতে পারেন এবং ইনিশিয়ালাইজেশনের জন্য আপনার SDK-তে প্রাসঙ্গিক ডেটা পাঠাতে পারেন।

আপনার SDK ইনিশিয়ালাইজ হয়ে বিজ্ঞাপনের অনুরোধ গ্রহণ করার জন্য প্রস্তুত হলে, InitializationCompleteCallback এর onInitializationSucceeded() মেথডটি কল করুন। এই কলব্যাকটি অ্যাপ পাবলিশারদের কাছে পাঠানো হয়, যাতে তারা জানতে পারেন যে তারা বিজ্ঞাপন লোড করা শুরু করতে পারেন।

@Override
public void initialize(Context context,
    InitializationCompleteCallback initializationCompleteCallback,
    List<MediationConfiguration> mediationConfigurations) {
  // Initialize your ad network's SDK.
  ...

  // Invoke the InitializationCompleteCallback once initialization completes.
  initializationCompleteCallback.onInitializationSucceeded();
}

collectSignals()

টাইমআউট: ১ সেকেন্ড

প্রতিবার যখন পাবলিশার কোনো বিজ্ঞাপনের জন্য অনুরোধ করে, তখন আপনার RtbAdapter এর একটি নতুন ইনস্ট্যান্স তৈরি হয় এবং collectSignals() মেথডটি কল করা হয়। এই RtbAdapter ইনস্ট্যান্সটি সেই বিজ্ঞাপনের অনুরোধ, প্রতিক্রিয়া এবং রেন্ডারিং লাইফসাইকেল চলাকালীন ব্যবহৃত হবে। collectSignals() মেথডটি আপনার অ্যাডাপ্টারকে ডিভাইস থেকে সিগন্যাল সরবরাহ করতে সক্ষম করে, যা একটি OpenRTB অনুরোধের মাধ্যমে আপনার বিডারের কাছে পাঠানো হয়।

collectSignals() একটি ব্যাকগ্রাউন্ড থ্রেডে কল করা হয়। Google Mobile Ads SDK একই সাথে বিডিং-এ অংশগ্রহণকারী সমস্ত অ্যাডাপ্টারের কাছ থেকে সিগন্যাল চেয়ে থাকে। অনুগ্রহ করে এই সময়ে UI থ্রেডে কল সীমিত রাখুন। সিগন্যাল সংগ্রহের জন্য আপনার অ্যাডাপ্টার বা SDK-কে যে কোনো ভারী কাজ করতে হলে, তা initialize() মেথডে করে ক্যাশ করে রাখা উচিত।

আপনার সিগন্যালগুলো প্রস্তুত হয়ে গেলে, আপনার এনকোড করা সিগন্যালগুলো দিয়ে onSuccess() কলব্যাকটি কল করুন।

এখানে একটি বাস্তবায়ন উদাহরণ দেওয়া হলো:

@Override
public void collectSignals(RtbSignalData rtbSignalData,
                           SignalCallbacks signalCallbacks) {
  String signals = YourSdk.getSignals();
  signalCallbacks.onSuccess(signals);
}

যদি আপনার অ্যাডাপ্টার সিগন্যাল সংগ্রহ করতে ব্যর্থ হয়, তাহলে সংঘটিত ত্রুটিটি ব্যাখ্যা করে একটি স্ট্রিং সহ signalCallbacks.onFailure() কল করুন।

বিজ্ঞাপন লোডিং পদ্ধতি প্রয়োগ করুন

সময়সীমা: ১০ সেকেন্ড

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

ঠিক কোন লোড মেথডটি কল করা হবে তা নির্ভর করে এই অনুরোধটি কোন বিজ্ঞাপন ফরম্যাটের জন্য করা হয়েছে তার উপর:

বিজ্ঞাপনের বিন্যাস লোড পদ্ধতি
ব্যানার loadBannerAd()
ইন্টারস্টিশিয়াল loadInterstitialAd()
পুরস্কৃত loadRewardedAd()

আপনার অ্যাডাপ্টার যে বিজ্ঞাপন ফরম্যাটগুলো সমর্থন করে, সেগুলোর জন্য এই পদ্ধতিগুলো প্রয়োগ করুন।

`load` মেথডটি UI থ্রেডে, অ্যাডাপ্টারের সেই একই ইনস্ট্যান্সে কল করা হয় যেখান থেকে আপনি সিগন্যালগুলো সরবরাহ করেছেন। এই মেথডটি আপনাকে নিম্নলিখিত প্যারামিটারগুলো প্রদান করে:

  • একটি MediationAdConfiguration , যাতে বিজয়ী বিডের জন্য বিজ্ঞাপন লোড করতে আপনার SDK-এর প্রয়োজনীয় প্যারামিটারগুলো থাকে, যেমন বিড রেসপন্স এবং AdMob UI-তে পাবলিশারের কনফিগার করা যেকোনো ক্রেডেনশিয়াল।

  • একটি MediationAdLoadCallback অবজেক্ট, যা লোডিং সফল বা ব্যর্থ হলে Google Mobile Ads SDK জানানোর জন্য ব্যবহৃত হয়।

আপনার SDK বিজ্ঞাপনটি লোড করার পর, mediationAdLoadCallback.onSuccess() কল করুন। বিজ্ঞাপন লোড হতে ব্যর্থ হলে, যে ত্রুটিটি ঘটেছে তা ব্যাখ্যা করে একটি স্ট্রিং সহ mediationAdLoadCallback.onFailure() কল করুন।

mediationAdLoadCallback.onSuccess() মেথডটি ব্যবহার করার জন্য আপনাকে এমন একটি অবজেক্ট পাস করতে হবে যা Google Mobile Ads SDK দ্বারা সংজ্ঞায়িত "Ad" ইন্টারফেসগুলোর মধ্যে একটির সাথে সামঞ্জস্যপূর্ণ। এই অ্যাড ইন্টারফেসগুলো আপনাকে বিজ্ঞাপনটি সম্পর্কে কিছু তথ্য প্রদান করতে বলে।

MediationAdConfiguration একটি getWatermark() মেথডও রয়েছে, যা একটি PNG ইমেজকে প্রতিনিধিত্বকারী একটি base64-এনকোডেড স্ট্রিং রিটার্ন করে। এই ইমেজটি আপনার বিজ্ঞাপনের উপর একটি স্বচ্ছ ওভারলে হিসেবে টাইল করা উচিত। ওয়াটারমার্কটি কীভাবে রেন্ডার করতে হয় সে সম্পর্কে অতিরিক্ত নির্দেশনার জন্য Google-এর সাথে যোগাযোগ করুন। এতে প্রদর্শিত বিজ্ঞাপন সম্পর্কিত মেটাডেটা থাকে, যা পাবলিশাররা প্রদর্শিত বিজ্ঞাপনের উৎস নির্ধারণ করতে ব্যবহার করেন।

ব্যানারের জন্য, আপনাকে ব্যানার ভিউ প্রদান করতে বলা হবে। ইন্টারস্টিশিয়াল এবং রিওয়ার্ডেড বিজ্ঞাপনের জন্য, পরবর্তী কোনো সময়ে বিজ্ঞাপনটি দেখানোর জন্য আপনাকে একটি show() মেথড ইমপ্লিমেন্ট করতে বলা হবে। একটি উত্তম অনুশীলন হিসেবে, আমরা সুপারিশ করি যে আপনার যে ক্লাসটি বিজ্ঞাপন লোড করার কাজ করে, সেটিই যেন এই বিজ্ঞাপন মেথডগুলো ইমপ্লিমেন্ট করার দায়িত্বে থাকে।

নিচে loadBannerAd() এর একটি নমুনা বাস্তবায়ন দেওয়া হলো। মনে রাখবেন যে আপনার অ্যাডাপ্টারের বাস্তবায়নটি ভিন্ন হবে, কারণ আপনার অ্যাডাপ্টারটি একটি ভিন্ন SDK-এর সাথে সংযুক্ত।

public final class SampleRtbAdapter extends RtbAdapter {
  ...

  @Override
  public void loadBannerAd(
      MediationBannerAdConfiguration adConfiguration,
      MediationAdLoadCallback<MediationBannerAd, MediationBannerAdCallback> callback) {

      SampleBannerRenderer bannerRenderer =
          new SampleBannerRenderer(adConfiguration, callback);
      bannerRenderer.render();
    }
}

// Renders a banner ad, and forwards callbacks to Google Mobile Ads SDK.
public class SampleBannerRenderer implements MediationBannerAd {
  private MediationBannerAdConfiguration adConfiguration;
  private final MediationAdLoadCallback<MediationBannerAd, MediationBannerAdCallback> adLoadCallback;
  private AdView adView;
  private MediationBannerAdCallback callback;

  public SampleRtbBannerRenderer(
      MediationBannerAdConfiguration adConfiguration,
      MediationAdLoadCallback<MediationBannerAd, MediationBannerAdCallback> adLoadCallback) {
    this.adConfiguration = adConfiguration;
    this.adLoadCallback = adLoadCallback;
  }

  public void render() {
    adView = new AdView(adConfiguration.getContext());
    adView.setAdSize(adConfiguration.getAdSize());
    // serverParameters are the parameters entered in the AdMob UI for your network.
    adView.setAdUnitId(adConfiguration.getServerParameters().getString("adUnitId"));

    // Map the callbacks from your SDK to Google's SDK.
    adView.setAdListener(new AdListener() {
      // See the next step for more information on callback mapping.
      // ...
    });

    // Get the bid response and watermark from the ad configuration and
    // pass the relevant information to your SDK.
    String ad = adConfiguration.getBidResponse();
    String watermark = adConfiguration.getWatermark();
    Bundle extras = new Bundle();
    extras.putString("bid", ad);
    extras.putString("watermark", watermark);
    AdRequest request = new AdRequest.Builder()
        .addNetworkExtrasBundle(AdMobAdapter.class, extras)
        .build();
    adView.loadAd(request);
  }

  // MediationBannerAd implementation

  @NonNull
  @Override
  public View getView() {
    return adView;
  }
}

রিলে বিজ্ঞাপন উপস্থাপনার জীবনচক্রের ঘটনাগুলি

অ্যাডাপ্টারের চূড়ান্ত দায়িত্ব হলো যেকোনো প্রেজেন্টেশন লাইফসাইকেল ইভেন্ট সম্পর্কে Google Mobile Ads SDK অবহিত করা, যাতে সেগুলো পাবলিশারের কাছে ফরোয়ার্ড করা যায়। বিজ্ঞাপনটি যে অ্যাড নেটওয়ার্কই পরিবেশন করুক না কেন, পাবলিশার নির্দিষ্ট সময়ে এই কলব্যাকগুলো আশা করেন। তাই, এই কলব্যাকগুলোর যত বেশি সম্ভব এবং সঠিক সময়ে চালু করা গুরুত্বপূর্ণ, যাতে Google Mobile Ads SDK সেগুলো পাবলিশারের কাছে ফরোয়ার্ড করতে পারে।

প্রযোজ্য ক্ষেত্রে অ্যাডাপ্টারগুলো নিম্নলিখিত ইভেন্টগুলো আহ্বান করবে:

সকল ফরম্যাটের জন্য সাধারণ
পদ্ধতি কখন ফোন করতে হবে
reportAdClicked() বিজ্ঞাপনটিতে ক্লিক করা হয়েছিল।
reportAdImpression() বিজ্ঞাপনটি একটি ধারণা তৈরি করেছিল।
onAdOpened() বিজ্ঞাপনটিতে পূর্ণ স্ক্রিন ভিউ দেখানো হয়েছিল।
onAdClosed() বিজ্ঞাপনটির পূর্ণ স্ক্রিন ভিউ বন্ধ করা হয়েছে।
onAdLeftApplication() বিজ্ঞাপনটির কারণে ব্যবহারকারী অ্যাপ্লিকেশনটি ছেড়ে চলে যান।
পুরস্কৃত বিজ্ঞাপন
onRewarded() ব্যবহারকারীকে একটি পুরস্কার প্রদান করা হয়।
ভিডিও কলব্যাক (পুরস্কৃত এবং নেটিভ বিজ্ঞাপন)
onVideoStarted() বিজ্ঞাপনটির ভিডিও শুরু হলো।
onVideoCompleted() বিজ্ঞাপনটির ভিডিও সম্পন্ন হয়েছে।

mediationAdLoadCallback.onSuccess() কল করার পর অ্যাডাপ্টারটি একটি MediationAdLoadCallback<MediationAdT, MediationAdCallbackT> অবজেক্ট ফেরত পায়। অ্যাডাপ্টারগুলোর এই অবজেক্টটি ধরে রাখার এবং আপনার অ্যাডে ঘটা প্রেজেন্টেশন ইভেন্টগুলো চালু করার জন্য এটি ব্যবহার করার কথা।

সাধারণত, এই ইভেন্টগুলোর বেশিরভাগই আপনার অ্যাড নেটওয়ার্কের SDK দ্বারা চালিত হয়। অ্যাডাপ্টারের ভূমিকা হলো কেবল আপনার অ্যাড নেটওয়ার্ক SDK থেকে আসা কলব্যাকগুলোকে Google Mobile Ads SDK তে ম্যাপ করা।

নিম্নলিখিত উদাহরণটি দেখায় যে আপনি কীভাবে আপনার SDK-এর অ্যাড লিসেনার থেকে Google Mobile Ads SDK তে কলব্যাকগুলি ফরওয়ার্ড করবেন:

adView.setAdListener(new AdListener() {
    public void onAdLoaded() {
        callback = adLoadCallback.onSuccess(SampleBannerRenderer.this);
    }

    public void onAdImpression() {
        if (callback != null) {
            callback.reportAdImpression();
        }
    }

    public void onAdFailedToLoad(LoadAdError adError) {
        adLoadCallback.onFailure("Error: " + adError.toString());
    }

    public void onAdClosed() {
        if (callback != null) {
            callback.onAdClosed();
        }
    }

    public void onAdOpened() {
        if (callback != null) {
            callback.onAdOpened();
            callback.reportAdClicked();
        }
    }

    public void onAdLeftApplication() {
        if (callback != null) {
            callback.onAdLeftApplication();
        }
    }
});

নেটিভ বিজ্ঞাপন ইম্প্রেশন ট্র্যাকিংয়ের জন্য প্রয়োজনীয় অ্যাসেট

যখন কোনো নেটিভ অ্যাডের ১ পিক্সেল দৃশ্যমান হয়, তখন Google Mobile Ads SDK সেটির জন্য একটি ইম্প্রেশন রেকর্ড করে। যদি আপনার অ্যাড নেটওয়ার্ক এসডিকে-র একটি বৈধ ইম্প্রেশন রেন্ডার করার জন্য নির্দিষ্ট অ্যাসেট প্রদর্শনের প্রয়োজন হয়, তবে আপনার বিডার বিড রেসপন্সে এই প্রয়োজনীয় নেটিভ অ্যাসেটগুলো উল্লেখ করতে পারেন। এরপর Google Mobile Ads SDK একটি ইম্প্রেশন রেকর্ড করার আগে যাচাই করে নেয় যে আপনার প্রয়োজনীয় নেটিভ অ্যাসেটগুলো প্রদর্শিত হয়েছে কি না।

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

বিজ্ঞাপনের ত্রুটি দেখান

ইন্টারস্টিশিয়াল এবং রিওয়ার্ডেড অ্যাডের মতো ফুল স্ক্রিন ফরম্যাটের জন্য, সাকসেস লোড কলব্যাকে আপনাকে MediationInterstitialAd বা MediationRewardedAd এর একটি ইমপ্লিমেন্টেশন প্রদান করতে হবে, যাতে Google Mobile Ads SDK আপনার অ্যাডাপ্টারকে বিজ্ঞাপনটি দেখানোর জন্য অনুরোধ করতে পারে।

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

তবে, এমন কিছু ব্যতিক্রমী পরিস্থিতি থাকতে পারে যেখানে আপনি বিজ্ঞাপনটি দেখাতে পারবেন না। যদি আপনি বিজ্ঞাপনটি দেখাতে না পারেন, তাহলে ইম্প্রেশনটি বাতিল করার জন্য onAdFailedToShow() কলব্যাকটি কল করুন।

নিচের সারণিতে দেখানো হয়েছে কিভাবে প্রেজেন্টেশন কলব্যাকগুলো ফুল স্ক্রিন বিজ্ঞাপন ফরম্যাটের জন্য ইম্প্রেশন রেকর্ডিংকে প্রভাবিত করে:

কলব্যাক ফলাফল
onAdOpened() Impression recorded
onAdFailedToShow() Impression failure 1
কয়েক সেকেন্ডের জন্য উপরের কোনোটিই নয় Impression recorded

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

নিম্নলিখিত নমুনা উদাহরণটি একটি লোড/শো লাইফসাইকেল প্রদর্শন করে, যেখানে একটি বিজ্ঞাপন দেখানোর কল ব্যর্থ হতে পারে।

final class SampleRtbAdapter extends RtbAdapter implements MediationRewardedAd {

 private MediationRewardedAdCallback callback;
 private RewardedAd rewardedAd;

 ...

  @Override
  public void loadRewardedAd(
      MediationRewardedAdConfiguration adConfiguration,
      final MediationAdLoadCallback<MediationRewardedAd, MediationRewardedAdCallback> loadCallback) {

    // Load an ad. This mock example uses Google's SDK, but in practice
    // your adapter will load the ad using your ad network's SDK.
    RewardedAd.load(adConfiguration.getContext(),
        "ca-app-pub-3940256099942544/5224354917",
        new AdRequest.Builder().build(),
        new RewardedAdLoadCallback() {
          @Override
          public void onAdLoaded(@NonNull RewardedAd rewardedAd) {
            // When the ad loads, invoke the load success callback.
            callback = loadCallback.onSuccess(SampleRtbAdapter.this);
          }
        });
  }

  @Override
  public void showAd(Context context) {
    // In this mock example, your ad network requires an activity context, but
    // didn't receive one, making you unable to show the ad.
    if (!(context instanceof Activity)) {
      AdError error = new AdError(1, "Context must be an activity",
          "com.google.ads.mediation.sample");
      callback.onAdFailedToShow(error);
    }

    // This example shows Google SDK's callbacks, but it's likely your SDK
    // has similar presentation callbacks.
    rewardedAd.setFullScreenContentCallback(new FullScreenContentCallback() {
      @Override
      public void onAdShowedFullScreenContent() {
        // Your ad network SDK successfully showed the ad. Call onAdOpened().
        callback.onAdOpened();
      }

      @Override
      public void onAdFailedToShowFullScreenContent(AdError adError) {
        // Your ad network SDK failed to show the ad, invoke onAdFailedToShow.
        // In practice, you will map your SDK's error to an AdError.
        AdError error = new AdError(adError.getCode(), adError.getMessage(),
            adError.getDomain());
        callback.onAdFailedToShow(adError);
      }
    });


    rewardedAd.show((Activity) context, ...);
  }
}