পুরস্কৃত বিজ্ঞাপন হল এমন বিজ্ঞাপন যা ব্যবহারকারীরা অ্যাপ-মধ্যস্থ পুরষ্কারের বিনিময়ে ইন্টারঅ্যাক্ট করার বিকল্প পান। এই নির্দেশিকাটি আপনাকে দেখায় কিভাবে AdMob থেকে পুরস্কৃত বিজ্ঞাপনগুলিকে iOS অ্যাপে একীভূত করতে হয়। কিছু গ্রাহক সাফল্যের গল্প পড়ুন: কেস স্টাডি 1 , কেস স্টাডি 2 ।
পূর্বশর্ত
- শুরু করুন নির্দেশিকাটি সম্পূর্ণ করুন।
সর্বদা পরীক্ষামূলক বিজ্ঞাপন দিয়ে পরীক্ষা করুন
আপনার অ্যাপ তৈরি এবং পরীক্ষা করার সময়, লাইভ, প্রোডাকশন বিজ্ঞাপনের পরিবর্তে পরীক্ষামূলক বিজ্ঞাপন ব্যবহার করুন। এটি না করলে আপনার অ্যাকাউন্ট সাসপেন্ড হতে পারে।
পরীক্ষামূলক বিজ্ঞাপন লোড করার সবচেয়ে সহজ উপায় হল iOS পুরস্কৃত বিজ্ঞাপনের জন্য আমাদের ডেডিকেটেড পরীক্ষামূলক বিজ্ঞাপন ইউনিট আইডি ব্যবহার করা:
 ca-app-pub-3940256099942544/1712485313
এটি বিশেষভাবে প্রতিটি অনুরোধের জন্য পরীক্ষামূলক বিজ্ঞাপন ফেরত দেওয়ার জন্য কনফিগার করা হয়েছে এবং কোডিং, পরীক্ষা এবং ডিবাগিংয়ের সময় আপনি এটি আপনার নিজস্ব অ্যাপে ব্যবহার করতে পারেন। আপনার অ্যাপ প্রকাশ করার আগে এটি আপনার নিজস্ব বিজ্ঞাপন ইউনিট আইডি দিয়ে প্রতিস্থাপন করুন।
Google মোবাইল বিজ্ঞাপন 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: "ca-app-pub-3940256099942544/1712485313", request: Request())
    rewardedAd?.fullScreenContentDelegate = self
  } catch {
    print("Rewarded ad failed to load with error: \(error.localizedDescription)")
  }
}
সুইফটইউআই
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:@"ca-app-pub-3940256099942544/1712485313"
              request:[GADRequest 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 কলব্যাকে উপস্থিত থাকবে না।
নিম্নলিখিত কোড নমুনাটি দেখায় যে কীভাবে কোনও বিজ্ঞাপনের অনুরোধ করার আগে একটি পুরস্কৃত বিজ্ঞাপন বস্তুতে কাস্টম ডেটা সেট করতে হয়:
সুইফট
অবজেক্টিভ-সি
SAMPLE_CUSTOM_DATA_STRING আপনার কাস্টম ডেটা দিয়ে প্রতিস্থাপন করুন।
কলব্যাকের জন্য নিবন্ধন করুন
 উপস্থাপনা ইভেন্টের বিজ্ঞপ্তি পেতে, আপনাকে অবশ্যই GADFullScreenContentDelegate ফেরত পাঠানো বিজ্ঞাপনের fullScreenContentDelegate প্রপার্টিতে অ্যাসাইন করতে হবে: 
সুইফট
rewardedAd?.fullScreenContentDelegate = self
সুইফটইউআই
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).")
}
সুইফটইউআই
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.
}
সুইফটইউআই
বিজ্ঞাপনটি কখন দেখানো হবে তা নির্ধারণ করতে ভিউতে 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 মোবাইল বিজ্ঞাপন SDK সেই নেটওয়ার্ক থেকে একটি বিজ্ঞাপনের জন্য অনুরোধ করে। তাই যদি কোনও মধ্যস্থতা নেটওয়ার্ক সময়সীমা শেষ হওয়ার পরেও শুরু করা শেষ করে, তবে এটি সেই সেশনে ভবিষ্যতের বিজ্ঞাপনের অনুরোধগুলি পরিষেবা দিতে পারে।- আপনি - GADMobileAds.initializationStatusএ কল করে আপনার অ্যাপ সেশন জুড়ে সমস্ত অ্যাডাপ্টারের ইনিশিয়ালাইজেশন স্ট্যাটাস পোল করা চালিয়ে যেতে পারেন।
- একটি নির্দিষ্ট মধ্যস্থতা নেটওয়ার্ক কেন প্রস্তুত নয় তা আমি কীভাবে খুঁজে পাব?
- GADAdapterStatusঅবজেক্টের- descriptionবৈশিষ্ট্যটি বর্ণনা করে যে কেন একটি অ্যাডাপ্টার বিজ্ঞাপনের অনুরোধগুলি পরিষেবা দেওয়ার জন্য প্রস্তুত নয়।
-  userDidEarnRewardHandlerকমপ্লিশন হ্যান্ডলার কি সবসময়adDidDismissFullScreenContent:ডেলিগেট পদ্ধতির আগে কল করা হয়?
- Google বিজ্ঞাপনের ক্ষেত্রে, সমস্ত - userDidEarnRewardHandlerকল- adDidDismissFullScreenContent:এর আগে ঘটে। মধ্যস্থতার মাধ্যমে পরিবেশিত বিজ্ঞাপনের ক্ষেত্রে, তৃতীয় পক্ষের বিজ্ঞাপন নেটওয়ার্ক SDK এর বাস্তবায়ন কলব্যাকের ক্রম নির্ধারণ করে। যেসব বিজ্ঞাপন নেটওয়ার্ক SDK পুরষ্কারের তথ্য সহ একটি একক প্রতিনিধি পদ্ধতি প্রদান করে, তাদের ক্ষেত্রে মধ্যস্থতা অ্যাডাপ্টার- adDidDismissFullScreenContent:এর আগে- userDidEarnRewardHandlerআহ্বান করে।
GitHub-এ উদাহরণ
আপনার পছন্দের ভাষায় সম্পূর্ণ পুরস্কৃত বিজ্ঞাপনের উদাহরণ দেখুন:
পরবর্তী পদক্ষেপ
ব্যবহারকারীর গোপনীয়তা সম্পর্কে আরও জানুন।