পুরস্কারযুক্ত ইন্টারস্টিশিয়াল বিজ্ঞাপন সেট আপ করুন

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

এই নির্দেশিকায় ব্যাখ্যা করা হয়েছে কীভাবে একটি অ্যান্ড্রয়েড অ্যাপে রিওয়ার্ডেড ইন্টারস্টিশিয়াল বিজ্ঞাপন যুক্ত করতে হয়।

শুরু করার আগে

চালিয়ে যাওয়ার আগে, নিম্নলিখিতগুলি করুন:

  • GMA Next-Gen SDK সেট আপ করুন
  • পরীক্ষামূলক পুরস্কারপ্রাপ্ত ইন্টারস্টিশিয়াল বিজ্ঞাপন ইউনিট আইডি ca-app-pub-3940256099942544/5354046379 ব্যবহার করুন।
    • আপনার অ্যাপ তৈরি ও পরীক্ষা করার সময়, লাইভ বা প্রোডাকশন অ্যাডের পরিবর্তে টেস্ট অ্যাড ব্যবহার করুন। এটি করতে ব্যর্থ হলে আপনার অ্যাকাউন্ট সাসপেন্ড হতে পারে।
    • আপনার অ্যাপটি প্রকাশ করার আগে, এই আইডিটি আপনার বিজ্ঞাপন ইউনিটের আইডি দিয়ে প্রতিস্থাপন করুন।
    • GMA Next-Gen SDK টেস্ট অ্যাড সম্পর্কে বিস্তারিত জানতে, ‘টেস্ট অ্যাড সক্ষম করুন’ দেখুন।

বিজ্ঞাপন প্রি-লোডিং বুঝুন

GMA Next-Gen SDK এর অ্যাড প্রি-লোডিং ফিচারটি বিজ্ঞাপন লোডিং এবং ক্যাশিং প্রক্রিয়াকে স্বয়ংক্রিয় করে।

বিজ্ঞাপন প্রি-লোডিং নিম্নলিখিত সুবিধাগুলো প্রদান করে:

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

বিজ্ঞাপন প্রি-লোডিং শুরু করুন

বিজ্ঞাপন প্রি-লোড করা শুরু করতে, অ্যাপ চালু হওয়ার সময় একবার startPreload() মেথডটি কল করুন। startPreload() মেথডটি কল করার পর, GMA Next-Gen SDK স্বয়ংক্রিয়ভাবে বিজ্ঞাপন প্রি-লোড করে এবং প্রি-লোড করা কনফিগারেশনের জন্য ব্যর্থ হওয়া অনুরোধগুলো পুনরায় চেষ্টা করে।

নিচের উদাহরণটি দেখায় কীভাবে বিজ্ঞাপন প্রি-লোড করা শুরু করতে হয়:

কোটলিন

private fun startPreloading(adUnitId: String) {
  // Call start() once after SDK initialization.
  // Preload only one ad unit per format to optimize performance.
  val adRequest = AdRequest.Builder(adUnitId).build()
  val preloadConfig = PreloadConfiguration(adRequest)
  RewardedInterstitialAdPreloader.start(adUnitId, preloadConfig)
}

জাভা

private void startPreloading(String adUnitId) {
  // Call start() once after SDK initialization.
  // Preload only one ad unit per format to optimize performance.
  AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
  PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest);
  RewardedInterstitialAdPreloader.start(adUnitId, preloadConfig);
}

AD_UNIT_ID এর জায়গায় আপনার অ্যাড ইউনিট আইডি বসান।

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

আগে থেকে লোড করা বিজ্ঞাপনটি নিন এবং দেখান

যখন আপনি কোনো বিজ্ঞাপন দেখাতে চান, তখন pollAd() মেথডটি কল করুন। GMA Next-Gen SDK একটি উপলব্ধ বিজ্ঞাপন খুঁজে বের করে এবং স্বয়ংক্রিয়ভাবে ব্যাকগ্রাউন্ডে পরবর্তী বিজ্ঞাপনটি প্রি-লোড করে রাখে। যদি কোনো বিজ্ঞাপন উপলব্ধ না থাকে, তাহলে GMA Next-Gen SDK কোনো বিজ্ঞাপন প্রদর্শন করে না।

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

কোটলিন

private fun pollAndShowAd(activity: Activity, adUnitId: String) {
  // Polling returns the next available ad and loads another ad in the background.
  val ad = RewardedInterstitialAdPreloader.pollAd(adUnitId)
  if (ad == null) {
    Log.e(TAG, "Rewarded interstitial ad is not available.")
    return
  }

  // Interact with the ad object as needed.
  Log.d(TAG, "Rewarded interstitial ad response info: ${ad.getResponseInfo()}")
  ad.adEventCallback =
    object : RewardedInterstitialAdEventCallback {
      override fun onAdImpression() {
        Log.d(TAG, "Rewarded interstitial ad recorded an impression.")
      }
    }
  ad.show(activity) { rewardItem -> Log.d(TAG, "User earned reward: ${rewardItem.amount}") }
}

জাভা

private void pollAndShowAd(Activity activity, String adUnitId) {
  // Polling returns the next available ad and loads another ad in the background.
  final RewardedInterstitialAd ad = RewardedInterstitialAdPreloader.pollAd(adUnitId);

  // Interact with the ad object as needed.
  if (ad == null) {
    Log.e(TAG, "Rewarded interstitial ad is not available.");
    return;
  }

  Log.d(TAG, "Rewarded interstitial ad response info: " + ad.getResponseInfo());
  ad.setAdEventCallback(
      new RewardedInterstitialAdEventCallback() {
        @Override
        public void onAdImpression() {
          Log.d(TAG, "Rewarded interstitial ad recorded an impression.");
        }
      });

  // Show the ad.
  ad.show(
      activity,
      rewardItem -> {
        Log.d(TAG, "User earned reward: " + rewardItem.getAmount());
      });
}

বিজ্ঞাপন দেখানোর জন্য প্রস্তুত না হওয়া পর্যন্ত pollAd() মেথডটি কল করা থেকে বিরত থাকুন। বিজ্ঞাপন না দেখিয়ে তার রেসপন্স ইনফো পড়ার জন্য, “Read the response info” দেখুন।

বিজ্ঞাপনের ঘটনাগুলো শুনুন

বিজ্ঞাপন দেখানোর আগে, বিজ্ঞাপনের ইভেন্টগুলো শুনুন। নিচের উদাহরণটিতে দেখানো হয়েছে কীভাবে বিজ্ঞাপনের ইভেন্টগুলোর জন্য কলব্যাক নিবন্ধন করতে হয়:

কোটলিন

private fun listenToAdEvents() {
  // Listen for ad events.
  val ad = rewardedInterstitialAd
  if (ad == null) {
    Log.e(TAG, "Rewarded interstitial ad is not ready yet.")
    return
  }

  ad.adEventCallback =
    object : RewardedInterstitialAdEventCallback {
      override fun onAdShowedFullScreenContent() {
        // Rewarded interstitial ad did show.
      }

      override fun onAdDismissedFullScreenContent() {
        // Rewarded interstitial ad did dismiss.
        rewardedInterstitialAd = null
      }

      override fun onAdFailedToShowFullScreenContent(
        fullScreenContentError: FullScreenContentError
      ) {
        // Rewarded interstitial ad failed to show.
        Log.e(TAG, "Rewarded interstitial ad failed to show: ${fullScreenContentError.message}")
      }

      override fun onAdImpression() {
        // Rewarded interstitial ad did record an impression.
      }

      override fun onAdClicked() {
        // Rewarded interstitial ad did record a click.
      }
    }
}

জাভা

private void listenToAdEvents() {
  // Listen for ad events.
  if (rewardedInterstitialAd == null) {
    Log.e(TAG, "Rewarded interstitial ad is not ready yet.");
    return;
  }

  rewardedInterstitialAd.setAdEventCallback(
      new RewardedInterstitialAdEventCallback() {
        @Override
        public void onAdShowedFullScreenContent() {
          // Rewarded interstitial ad did show.
        }

        @Override
        public void onAdDismissedFullScreenContent() {
          // Rewarded interstitial ad did dismiss.
          rewardedInterstitialAd = null;
        }

        @Override
        public void onAdFailedToShowFullScreenContent(
            @NonNull FullScreenContentError fullScreenContentError) {
          // Rewarded interstitial ad failed to show.
          Log.e(
              TAG,
              "Rewarded interstitial ad failed to show: " + fullScreenContentError.getMessage());
        }

        @Override
        public void onAdImpression() {
          // Rewarded interstitial ad did record an impression.
        }

        @Override
        public void onAdClicked() {
          // Rewarded interstitial ad did record a click.
        }
      });
}

ঐচ্ছিক: সার্ভার-সাইড ভেরিফিকেশন (SSV) কলব্যাকগুলি যাচাই করুন

আপনার অ্যাপের সার্ভার-সাইড ভেরিফিকেশন কলব্যাকে অতিরিক্ত ডেটার প্রয়োজন হলে, রিওয়ার্ডেড ইন্টারস্টিশিয়াল অ্যাডের কাস্টম ডেটা ফিচারটি ব্যবহার করুন। একটি রিওয়ার্ডেড ইন্টারস্টিশিয়াল অ্যাড অবজেক্টে সেট করা যেকোনো স্ট্রিং ভ্যালু SSV কলব্যাকের custom_data কোয়েরি প্যারামিটারে পাস করা হয়। যদি কোনো কাস্টম ডেটা ভ্যালু সেট করা না থাকে, তাহলে custom_data কোয়েরি প্যারামিটারের ভ্যালুটি SSV কলব্যাকে উপস্থিত থাকবে না।

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

কোটলিন

RewardedInterstitialAd.load(
  context,
  AD_UNIT_ID,
  AdRequest.Builder().build(),
  object : RewardedInterstitialAdLoadCallback() {
    override fun onAdLoaded(ad: RewardedInterstitialAd) {
      rewardedInterstitialAd = ad
      val options =
        ServerSideVerificationOptions.Builder().setCustomData("SAMPLE_CUSTOM_DATA_STRING").build()
      rewardedInterstitialAd?.setServerSideVerificationOptions(options)
    }
  },
)

জাভা

RewardedInterstitialAd.load(
    context,
    AD_UNIT_ID,
    new AdRequest.Builder().build(),
    new RewardedInterstitialAdLoadCallback() {
      @Override
      public void onAdLoaded(RewardedInterstitialAd ad) {
        rewardedInterstitialAd = ad;
        ServerSideVerificationOptions options =
            new ServerSideVerificationOptions.Builder()
                .setCustomData("SAMPLE_CUSTOM_DATA_STRING")
                .build();
        rewardedInterstitialAd.setServerSideVerificationOptions(options);
      }
    });

SAMPLE_CUSTOM_DATA_STRING আপনার নিজস্ব ডেটা দিয়ে প্রতিস্থাপন করুন।

ঐচ্ছিক: প্রি-লোডিং ইভেন্টগুলি শুনুন

আপনি যখন বিজ্ঞাপন প্রি-লোড করা শুরু করবেন, তখন প্রি-লোড ইভেন্টের জন্য নিবন্ধন করুন, যাতে বিজ্ঞাপন সফলভাবে প্রি-লোড হলে, প্রি-লোড করতে ব্যর্থ হলে, বা বিজ্ঞাপনের ক্যাশে শেষ হয়ে গেলে আপনাকে জানানো হয়।

নিম্নলিখিত উদাহরণটি দেখায় কিভাবে বিজ্ঞাপন ইভেন্ট প্রি-লোড করার জন্য নিবন্ধন করতে হয়:

কোটলিন

val preloadCallback =
  // [Important] Don't call ad preloader start() or pollAd() within the PreloadCallback.
  object : PreloadCallback {
    override fun onAdFailedToPreload(preloadId: String, adError: LoadAdError) {
      Log.d(
        TAG,
        "Rewarded interstitial preload ad $preloadId failed to load with error: ${adError.message}",
      )
    }

    override fun onAdsExhausted(preloadId: String) {
      Log.i(TAG, "Rewarded interstitial preload ad $preloadId is not available")
      // [Important] Don't call ad preloader start() or pollAd() from onAdsExhausted.
    }

    override fun onAdPreloaded(preloadId: String, responseInfo: ResponseInfo) {
      Log.i(TAG, "Rewarded interstitial preload ad $preloadId is available")
    }
  }
val adRequest = AdRequest.Builder(adUnitId).build()
val preloadConfig = PreloadConfiguration(adRequest)
RewardedInterstitialAdPreloader.start(adUnitId, preloadConfig, preloadCallback)

জাভা

PreloadCallback preloadCallback =
    // [Important] Don't call ad preloader start() or pollAd() within the PreloadCallback.
    new PreloadCallback() {
      @Override
      public void onAdFailedToPreload(@NonNull String preloadId, @NonNull LoadAdError adError) {
        Log.d(
            TAG,
            String.format(
                "Rewarded interstitial preload ad %s failed to load with error: %s",
                preloadId, adError.getMessage()));
        // [Optional] Get the error response info for additional details.
        // ResponseInfo responseInfo = adError.getResponseInfo();
      }

      @Override
      public void onAdsExhausted(@NonNull String preloadId) {
        Log.i(TAG, "Rewarded interstitial preload ad " + preloadId + " is not available");
        // [Important] Don't call ad preloader start() or pollAd() from onAdsExhausted.
      }

      @Override
      public void onAdPreloaded(@NonNull String preloadId, @NonNull ResponseInfo responseInfo) {
        Log.i(TAG, "Rewarded interstitial preload ad " + preloadId + " is available");
      }
    };
AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest);
RewardedInterstitialAdPreloader.start(adUnitId, preloadConfig, preloadCallback);

যখন কোনো বিজ্ঞাপন লোড হতে ব্যর্থ হয়, তখন GMA Next-Gen SDK স্বয়ংক্রিয়ভাবে বিজ্ঞাপনগুলো প্রি-লোড করে এবং প্রি-লোড করা কনফিগারেশনগুলোর জন্য ব্যর্থ অনুরোধগুলো পুনরায় চেষ্টা করে।

ঐচ্ছিক: বিজ্ঞাপনের প্রাপ্যতা যাচাই করুন।

কোনো বিজ্ঞাপন উপলব্ধ আছে কিনা তা জানতে, বিজ্ঞাপনের প্রাপ্যতা পরীক্ষা করুন। নিচের উদাহরণটিতে দেখানো হয়েছে কীভাবে আগে থেকে লোড করা কোনো বিজ্ঞাপন উপলব্ধ আছে কিনা তা পরীক্ষা করতে হয়:

কোটলিন

private fun isAdAvailable(adUnitId: String): Boolean {
  return RewardedInterstitialAdPreloader.isAdAvailable(adUnitId)
}

জাভা

private boolean isAdAvailable(String adUnitId) {
  return RewardedInterstitialAdPreloader.isAdAvailable(adUnitId);
}

ঐচ্ছিক: বাফার সাইজ সেট করুন

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

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

কোটলিন

private fun setBufferSize(adUnitId: String) {
  val adRequest = AdRequest.Builder(adUnitId).build()
  // Define a PreloadConfiguration and set the buffer size to 2 preloaded ads.
  val preloadConfig = PreloadConfiguration(adRequest, bufferSize = 2)
  RewardedInterstitialAdPreloader.start(adUnitId, preloadConfig)
}

জাভা

private void setBufferSize(String adUnitId) {
  AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
  // Define a PreloadConfiguration and set the buffer size to 2 preloaded ads.
  PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest, 2);
  RewardedInterstitialAdPreloader.start(adUnitId, preloadConfig);
}

প্রিলোড ক্যাশে সীমা

GMA Next-Gen SDK সমস্ত অ্যাড ইউনিট এবং প্রিলোড আইডি জুড়ে প্রিলোড করা বিজ্ঞাপনের মোট সংখ্যার উপর একটি অ্যাপ-ব্যাপী সীমা আরোপ করে:

  • ডিফল্ট সীমা: গুগল মেমরিতে সর্বাধিক ছয়টি প্রি-লোডেড বিজ্ঞাপন ধারণ করে। এই সীমাটি সমস্ত ফরম্যাট এবং প্রি-লোড আইডি জুড়ে প্রযোজ্য।
  • আমরা প্রতিটি প্রিলোড আইডির জন্য দুইয়ের একটি বাফার সাইজ রাখার পরামর্শ দিই।

ঐচ্ছিক: বিজ্ঞাপন প্রি-লোড করা বন্ধ করুন

সেশনে কোনো নির্দিষ্ট প্রিলোড আইডির জন্য যদি আপনার আর বিজ্ঞাপন দেখানোর প্রয়োজন না হয়, তাহলে আপনি বিজ্ঞাপন প্রিলোড করা বন্ধ করতে পারেন। কোনো নির্দিষ্ট প্রিলোড আইডির জন্য বিজ্ঞাপন লোড করা বন্ধ করতে, প্রিলোড আইডিটি দিয়ে destroy() মেথডটি কল করুন। destroy() মেথডটি কল করলে ক্যাশে থেকে সেই প্রিলোড আইডির সাথে যুক্ত সমস্ত প্রিলোড করা বিজ্ঞাপন মুছে যায়।

নিচের উদাহরণটি দেখায় কীভাবে বিজ্ঞাপন প্রি-লোডিং বন্ধ করতে হয়:

কোটলিন

private fun stopPreloading(adUnitId: String) {
  // Stops the preloading and destroy preloaded ads.
  RewardedInterstitialAdPreloader.destroy(adUnitId)
}

জাভা

private void stopPreloading(String adUnitId) {
  // Stops the preloading and destroy preloaded ads.
  RewardedInterstitialAdPreloader.destroy(adUnitId);
}

ঐচ্ছিক: প্রতিক্রিয়ার তথ্য পড়ুন।

ক্যাশ থেকে বিজ্ঞাপনটি না সরিয়েই পরবর্তী প্রি-লোডেড বিজ্ঞাপনের প্রতিক্রিয়া তথ্য পড়ুন।

নিম্নলিখিত উদাহরণটি দেখায় কিভাবে পরবর্তী প্রি-লোড করা বিজ্ঞাপনের প্রতিক্রিয়া তথ্য পড়তে হয়:

কোটলিন

val responseInfo = RewardedInterstitialAdPreloader.peekAdResponseInfo(preloadId)
if (responseInfo == null) {
  Log.e(TAG, "Failed to peek ad response info.")
  return
}

Log.d(TAG, "Peeked ad response ID: ${responseInfo.responseId}")

জাভা

ResponseInfo responseInfo = RewardedInterstitialAdPreloader.peekAdResponseInfo(preloadId);
if (responseInfo == null) {
  Log.e(TAG, "Failed to peek ad response info.");
  return;
}

Log.d(TAG, "Peeked ad response ID: " + responseInfo.getResponseId());