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

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

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

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

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

আরম্ভকরণ

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

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

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

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

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

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

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

Google মোবাইল বিজ্ঞাপন SDK-এর জন্য একটি বিডিং অ্যাডাপ্টার তৈরি করতে, আপনাকে RtbAdapter অ্যাবস্ট্রাক্ট ক্লাসটি প্রসারিত করতে হবে। নিম্নলিখিত বিভাগগুলিতে RtbAdapter এর প্রতিটি অ্যাবস্ট্রাক্ট পদ্ধতি ব্যাখ্যা করা হয়েছে।

SDKVersionInfo() পান

এখানে আপনার 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);
}

ভার্সনইনফো () পান

এখানে আপনার অ্যাডাপ্টারের সংস্করণটি ফেরত দেওয়া উচিত। এই সংস্করণটি 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);
}

আরম্ভ করুন()

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

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();
}

সংগ্রহ সংকেত()

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

প্রতিবার প্রকাশক যখনই কোনও বিজ্ঞাপনের অনুরোধ করেন, তখন আপনার 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 মোবাইল বিজ্ঞাপন SDK আপনার অ্যাডাপ্টারকে বিজয়ী বিজ্ঞাপনটি লোড করার জন্য কল করবে, এবং আপনার দরদাতা যে ডেটা ফেরত দিয়েছে এবং আপনার SDK-কে সেই বিজ্ঞাপনটি লোড করার জন্য প্রয়োজনীয় তা আপনাকে প্রদান করবে।

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

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

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

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

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

  • লোডিং সফল বা ব্যর্থ হলে Google মোবাইল বিজ্ঞাপন SDK-কে অবহিত করার জন্য ব্যবহৃত একটি MediationAdLoadCallback অবজেক্ট।

আপনার 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 মোবাইল বিজ্ঞাপন SDK-তে কলব্যাকগুলি ম্যাপ করা।

নিচের উদাহরণটি দেখায় যে কীভাবে আপনি আপনার SDK এর বিজ্ঞাপন শ্রোতা থেকে কলব্যাকগুলি Google মোবাইল বিজ্ঞাপন 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 মোবাইল বিজ্ঞাপন SDK একটি নেটিভ বিজ্ঞাপনের জন্য একটি ইম্প্রেশন রেকর্ড করে যখন বিজ্ঞাপনের ১ পিক্সেল দৃশ্যমান হয়। যদি আপনার বিজ্ঞাপন নেটওয়ার্ক SDK একটি বৈধ ইম্প্রেশন প্রদানের জন্য নির্দিষ্ট সম্পদ প্রদর্শনের প্রয়োজন হয়, তাহলে আপনার দরদাতা বিড প্রতিক্রিয়ায় এই প্রয়োজনীয় নেটিভ সম্পদগুলি নির্দেশ করতে পারেন। Google মোবাইল বিজ্ঞাপন SDK তারপর যাচাই করে যে একটি ইম্প্রেশন রেকর্ড করার আগে আপনার প্রয়োজনীয় নেটিভ সম্পদগুলি প্রদর্শিত হচ্ছে।

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

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

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

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

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

নীচের টেবিলটি দেখায় যে কীভাবে উপস্থাপনা কলব্যাক পূর্ণ স্ক্রিন বিজ্ঞাপন ফর্ম্যাটের জন্য ইম্প্রেশন রেকর্ডিংকে প্রভাবিত করে:

কলব্যাক ফলাফল
অনঅ্যাডওপেনড() Impression recorded
বিজ্ঞাপন ব্যর্থ হলে দেখান () 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, ...);
  }
}