পুরস্কৃত বিজ্ঞাপন

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

পূর্বশর্ত

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

সর্বদা টেস্ট অ্যাড দিয়ে পরীক্ষা করুন

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

টেস্ট অ্যাড লোড করার সবচেয়ে সহজ উপায় হলো iOS রিওয়ার্ডেড অ্যাডের জন্য আমাদের নির্দিষ্ট টেস্ট অ্যাড ইউনিট আইডি ব্যবহার করা:

/21775744923/example/rewarded

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

Google Mobile Ads SDK টেস্ট অ্যাডগুলো কীভাবে কাজ করে সে সম্পর্কে আরও তথ্যের জন্য, টেস্ট অ্যাডস দেখুন।

বাস্তবায়ন

রিওয়ার্ডেড অ্যাড ইন্টিগ্রেট করার প্রধান ধাপগুলো নিম্নরূপ:

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

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

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

সুইফট

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)")
    }
  }

উদ্দেশ্য-সি

// 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 কোয়েরি প্যারামিটারে পাস করা হয়। যদি কোনো কাস্টম ডেটা ভ্যালু সেট করা না থাকে, তাহলে custom_data কোয়েরি প্যারামিটারের ভ্যালুটি SSV কলব্যাকে উপস্থিত থাকবে না।

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

সুইফট

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)")
  }
}

উদ্দেশ্য-সি

// 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 অ্যাসাইন করতে হবে:

সুইফট

rewardedAd?.fullScreenContentDelegate = self

SwiftUI

rewardedAd?.fullScreenContentDelegate = self

উদ্দেশ্য-সি

self.rewardedAd.fullScreenContentDelegate = self;

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

সুইফট

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
}

উদ্দেশ্য-সি

- (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 অবজেক্ট প্রদান করতে হবে।

নিম্নলিখিত কোডটি একটি পুরস্কারযুক্ত বিজ্ঞাপন প্রদর্শনের সর্বোত্তম পদ্ধতি উপস্থাপন করে:

সুইফট

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

উদ্দেশ্য-সি

[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 প্রপার্টিটি বর্ণনা করে যে কেন একটি অ্যাডাপ্টার ad অনুরোধগুলি পরিষেবা দেওয়ার জন্য প্রস্তুত নয়।

userDidEarnRewardHandler কমপ্লিশন হ্যান্ডলারটি কি সবসময় adDidDismissFullScreenContent: ডেলিগেট মেথডটির আগে কল করা হয়?

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

গিটহাবে উদাহরণ

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

পরবর্তী পদক্ষেপ

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