পুরস্কার প্রদানকারী বিজ্ঞাপন

প্ল্যাটফর্ম বেছে নিন: Android iOS Unity Flutter Android (পুরনো)

পুরস্কার প্রদানকারী বিজ্ঞাপন হল এমন বিজ্ঞাপন যেগুলির সাথে ব্যবহারকারীরা ইন-অ্যাপ পুরস্কারের বিনিময়ে ইন্টার‍্যাক্ট করতে পারেন। এই গাইড আপনাকে দেখায় কীভাবে Ad Manager থেকে পুরস্কার প্রদানকারী বিজ্ঞাপন iOS অ্যাপে ইন্টিগ্রেট করতে হয়।

পূর্বশর্ত

চালিয়ে যাওয়ার আগে, Google Mobile Ads SDK সেট-আপ করুন।

সবসময় টেস্ট বিজ্ঞাপন দিয়ে পরীক্ষা করুন

আপনার অ্যাপ তৈরি ও পরীক্ষা করার সময়, লাইভ, প্রোডাকশন বিজ্ঞাপনের পরিবর্তে পরীক্ষামূলক বিজ্ঞাপন ব্যবহার করতে ভুলবেন না। এটি না করলে আপনার অ্যাকাউন্ট সাসপেন্ড করা হতে পারে।

টেস্ট বিজ্ঞাপন লোড করার সবচেয়ে সহজ উপায় হল iOS-এর জন্য পুরস্কার প্রদানকারী বিজ্ঞাপনের ক্ষেত্রে আমাদের নির্দিষ্ট টেস্ট বিজ্ঞাপন ইউনিট আইডি ব্যবহার করা:

/21775744923/example/rewarded

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

Google Mobile Ads SDK টেস্ট বিজ্ঞাপন কীভাবে কাজ করে সেই সম্পর্কে আরও জানতে, টেস্ট বিজ্ঞাপন দেখুন।

প্রয়োগ

পুরস্কার প্রদানকারী বিজ্ঞাপন ইন্টিগ্রেট করার প্রাথমিক ধাপগুলি নিচে উল্লেখ করা হল:

  • বিজ্ঞাপন লোড করা
  • [ঐচ্ছিক] SSV কলব্যাক যাচাই করুন
  • কলব্যাকের জন্য রেজিস্টার করা
  • বিজ্ঞাপন দেখান এবং পুরস্কার ইভেন্ট ম্যানেজ করুন

বিজ্ঞাপন লোড করা

GADRewardedAd ক্লাসে load(adUnitID:request) মেথড ব্যবহার করে বিজ্ঞাপন লোড করা হয়।

Swift

func loadRewardedAd() async {
  do {
    rewardedAd = try await RewardedAd.load(
      // Replace this ad unit ID with your own ad unit ID.
      with: "/21775744923/example/rewarded", request: AdManagerRequest())
    rewardedAd?.fullScreenContentDelegate = self
  } catch {
    print("Rewarded ad failed to load with error: \(error.localizedDescription)")
  }
}

SwiftUI

import GoogleMobileAds

class RewardedViewModel: NSObject, ObservableObject, FullScreenContentDelegate {
  @Published var coins = 0
  private var rewardedAd: RewardedAd?

  func loadAd() async {
    do {
      rewardedAd = try await RewardedAd.load(
        with: "ca-app-pub-3940256099942544/1712485313", request: Request())
      rewardedAd?.fullScreenContentDelegate = self
    } catch {
      print("Failed to load rewarded ad with error: \(error.localizedDescription)")
    }
  }

Objective-C

// Replace this ad unit ID with your own ad unit ID.
[GADRewardedAd loadWithAdUnitID:@"/21775744923/example/rewarded"
              request:[GAMRequest request]
    completionHandler:^(GADRewardedAd *ad, NSError *error) {
      if (error) {
        NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
        return;
      }
      self.rewardedAd = ad;
      self.rewardedAd.fullScreenContentDelegate = self;
    }];

[ঐচ্ছিক] সার্ভার-সাইড যাচাইকরণ (SSV) কলব্যাক যাচাই করুন

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

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

Swift

private func validateAdManagerServerSideVerification() async {
  do {
    rewardedAd = try await RewardedAd.load(
      // Replace this ad unit ID with your own ad unit ID.
      with: "/21775744923/example/rewarded", request: AdManagerRequest())
    let options = ServerSideVerificationOptions()
    options.customRewardText = "SAMPLE_CUSTOM_DATA_STRING"
    rewardedAd?.serverSideVerificationOptions = options
  } catch {
    print("Rewarded ad failed to load with error: \(error.localizedDescription)")
  }
}

Objective-C

// Replace this ad unit ID with your own ad unit ID.
[GADRewardedAd loadWithAdUnitID:@"/21775744923/example/rewarded"
                        request:[GAMRequest request]
              completionHandler:^(GADRewardedAd *ad, NSError *error) {
                if (error) {
                  NSLog(@"Rewarded ad failed to load with error: %@", error.localizedDescription);
                  return;
                }
                self.rewardedAd = ad;
                GADServerSideVerificationOptions *options =
                    [[GADServerSideVerificationOptions alloc] init];
                options.customRewardString = @"SAMPLE_CUSTOM_DATA_STRING";
                ad.serverSideVerificationOptions = options;
              }];

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

কলব্যাকের জন্য রেজিস্টার করুন

প্রেজেন্টেশন ইভেন্টের জন্য বিজ্ঞপ্তি পেতে, আপনাকে অবশ্যই ফেরত আসা বিজ্ঞাপনের fullScreenContentDelegate প্রপার্টিতে GADFullScreenContentDelegate অ্যাসাইন করতে হবে:

Swift

rewardedAd?.fullScreenContentDelegate = self

SwiftUI

rewardedAd?.fullScreenContentDelegate = self

Objective-C

self.rewardedAd.fullScreenContentDelegate = self;

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

Swift

func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
  print("\(#function) called.")
}

func adDidRecordClick(_ ad: FullScreenPresentingAd) {
  print("\(#function) called.")
}

func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called.")
}

func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called.")
}

func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called.")
  // Clear the rewarded ad.
  rewardedAd = nil
}

func ad(
  _ ad: FullScreenPresentingAd,
  didFailToPresentFullScreenContentWithError error: Error
) {
  print("\(#function) called with error: \(error.localizedDescription).")
}

SwiftUI

func adDidRecordImpression(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidRecordClick(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func ad(
  _ ad: FullScreenPresentingAd,
  didFailToPresentFullScreenContentWithError error: Error
) {
  print("\(#function) called")
}

func adWillPresentFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adWillDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
}

func adDidDismissFullScreenContent(_ ad: FullScreenPresentingAd) {
  print("\(#function) called")
  // Clear the rewarded ad.
  rewardedAd = nil
}

Objective-C

- (void)adDidRecordImpression:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adDidRecordClick:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adWillPresentFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adWillDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
}

- (void)adDidDismissFullScreenContent:(id<GADFullScreenPresentingAd>)ad {
  NSLog(@"%s called", __PRETTY_FUNCTION__);
  // Clear the rewarded ad.
  self.rewardedAd = nil;
}

- (void)ad:(id)ad didFailToPresentFullScreenContentWithError:(NSError *)error {
  NSLog(@"%s called with error: %@", __PRETTY_FUNCTION__, error.localizedDescription);
}

বিজ্ঞাপন দেখানো এবং পুরস্কার ইভেন্ট ম্যানেজ করা

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

আপনার বিজ্ঞাপন দেখানোর সময়, ব্যবহারকারীর জন্য পুরস্কার ম্যানেজ করতে আপনাকে অবশ্যই একটি GADUserDidEarnRewardHandler অবজেক্ট প্রদান করতে হবে।

পুরস্কার প্রদানকারী বিজ্ঞাপন দেখানোর সবচেয়ে ভালো পদ্ধতি নিম্নলিখিত কোডে দেখানো হয়েছে:

Swift

rewardedAd.present(from: self) {
  let reward = rewardedAd.adReward
  print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)")

  // TODO: Reward the user.
}

SwiftUI

কখন বিজ্ঞাপন দেখাতে হবে তা নির্ধারণ করতে ভিউতে UI ইভেন্ট শুনুন।

var body: some View {
  VStack(spacing: 20) {
      Button("Watch video for additional 10 coins") {
        viewModel.showAd()
        showWatchVideoButton = false
      }

ভিউ মডেল থেকে পুরস্কার প্রদানকারী বিজ্ঞাপন দেখান:

func showAd() {
  guard let rewardedAd = rewardedAd else {
    return print("Ad wasn't ready.")
  }

  rewardedAd.present(from: nil) {
    let reward = rewardedAd.adReward
    print("Reward amount: \(reward.amount)")
    self.addCoins(reward.amount.intValue)
  }
}

Objective-C

[self.rewardedAd presentFromRootViewController:self
                      userDidEarnRewardHandler:^{
                        GADAdReward *reward = self.rewardedAd.adReward;
                        NSString *rewardMessage = [NSString
                            stringWithFormat:@"Reward received with currency %@ , amount %lf",
                                             reward.type, [reward.amount doubleValue]];
                        NSLog(@"%@", rewardMessage);

                        // TODO: Reward the user.
                      }];

প্রায়শই জিজ্ঞাসিত প্রশ্ন

আমি কি GADRewardedAd-এর জন্য পুরস্কারের বিবরণ পেতে পারি?
হ্যাঁ, userDidEarnReward কলব্যাক ট্রিগার হওয়ার আগে পুরস্কারের পরিমাণ জানতে চাইলে, GADRewardedAd-এ adReward প্রপার্টি আছে যা বিজ্ঞাপন লোড হওয়ার পরে পুরস্কারের পরিমাণ যাচাই করার জন্য চেক করতে পারেন।
ইনিশিয়ালাইজেশন কলের জন্য কি কোনও টাইম-আউট আছে?
১০ সেকেন্ড পরে, Google Mobile Ads SDK startWithCompletionHandler: পদ্ধতিতে প্রদান করা GADInitializationCompletionHandler ইনভোক করে, এমনকি কোনও মিডিয়েশন নেটওয়ার্ক এখনও ইনিশিয়ালাইজেশন সম্পূর্ণ না করলেও।
ইনিশিয়ালাইজেশন কলব্যাক পাওয়ার সময় কিছু মিডিয়েশন নেটওয়ার্ক রেডি না থাকলে কী হবে?

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

GADMobileAds.initializationStatus কল করে আপনার অ্যাপ সেশন জুড়ে সব অ্যাডাপ্টরের ইনিশিয়ালাইজেশন স্ট্যাটাস পোল করা চালিয়ে যেতে পারবেন।

কোনও নির্দিষ্ট মিডিয়েশন নেটওয়ার্ক কেন রেডি নয় তা আমি কীভাবে খুঁজে পাব?

GADAdapterStatus অবজেক্টের description প্রপার্টি থেকে জানা যায় যে কেন কোনও অ্যাডাপ্টর বিজ্ঞাপনের অনুরোধ পরিষেবা দেওয়ার জন্য প্রস্তুত নয়।

userDidEarnRewardHandler সম্পূর্ণকরণ হ্যান্ডলার কি সবসময় adDidDismissFullScreenContent: ডেলিগেট পদ্ধতির আগে কল করা হয়?

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

GitHub-এ উদাহরণ

আপনার পছন্দসই ভাষায় পুরস্কার প্রদানকারী বিজ্ঞাপনের সম্পূর্ণ উদাহরণ দেখুন:

পরবর্তী ধাপ

ব্যবহারকারীর গোপনীয়তা সম্পর্কে আরও জানুন।