পুরস্কার প্রদানকারী বিজ্ঞাপন হল এমন বিজ্ঞাপন যেগুলির সাথে ব্যবহারকারীরা ইন-অ্যাপ পুরস্কারের বিনিময়ে ইন্টার্যাক্ট করতে পারেন। এই নির্দেশিকা আপনাকে দেখায় কীভাবে iOS অ্যাপে AdMob থেকে পুরস্কার প্রদানকারী বিজ্ঞাপন ইন্টিগ্রেট করতে হয়। গ্রাহকদের সাফল্যের কিছু গল্প পড়ুন: কেস স্টাডি ১, কেস স্টাডি ২।
পূর্বশর্ত
চালিয়ে যাওয়ার আগে, Google Mobile Ads SDK সেট-আপ করুন।
সবসময় টেস্ট বিজ্ঞাপন দিয়ে পরীক্ষা করুন
আপনার অ্যাপ তৈরি ও পরীক্ষা করার সময়, লাইভ, প্রোডাকশন বিজ্ঞাপনের পরিবর্তে পরীক্ষামূলক বিজ্ঞাপন ব্যবহার করছেন কিনা তা ভালো করে দেখে নিন। এটি না করলে আপনার অ্যাকাউন্ট সাসপেন্ড করা হতে পারে।
টেস্ট বিজ্ঞাপন লোড করার সবচেয়ে সহজ উপায় হল iOS পুরস্কার প্রদানকারী বিজ্ঞাপনের জন্য আমাদের নির্দিষ্ট টেস্ট বিজ্ঞাপন ইউনিট আইডি ব্যবহার করা:
ca-app-pub-3940256099942544/1712485313
প্রতিটি অনুরোধের জন্য পরীক্ষামূলক বিজ্ঞাপন দেখানোর জন্য এটি বিশেষভাবে কনফিগার করা হয়েছে এবং কোডিং, টেস্টিং ও ডিবাগিং করার সময় আপনি নিজের অ্যাপে এটি ব্যবহার করতে পারবেন। তবে, অ্যাপ প্রকাশ করার আগে আপনার নিজের বিজ্ঞাপন ইউনিট আইডি দিয়ে এটি পরিবর্তন করতে ভুলবেন না।
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: "ca-app-pub-3940256099942544/1712485313", request: Request())
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:@"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 কোয়েরি প্যারামিটারে পাস করা হয়। কোনও কাস্টম ডেটা ভ্যালু সেট করা না থাকলে, SSV কলব্যাকে custom_data কোয়েরি প্যারামিটারের ভ্যালু
থাকবে না।
বিজ্ঞাপনের অনুরোধ করার আগে পুরস্কার প্রদানকারী বিজ্ঞাপন অবজেক্টে কীভাবে কাস্টম ডেটা সেট করতে হয় তা নিম্নলিখিত কোড স্যাম্পেল থেকে জানতে পারবেন:
Swift
Objective-C
আপনার কাস্টম ডেটা দিয়ে SAMPLE_CUSTOM_DATA_STRING পরিবর্তন করুন।
কলব্যাকের জন্য রেজিস্টার করা
প্রেজেন্টেশন ইভেন্টের জন্য বিজ্ঞপ্তি পেতে, আপনাকে অবশ্যই
GADFullScreenContentDelegatereturned ad-এর fullScreenContentDelegate প্রপার্টিতে
অ্যাসাইন করতে হবে:
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
GADInitializationCompletionHandler-এ প্রদান করাstartWithCompletionHandler:মেথডকে ইনভোক করে, এমনকি কোনও মধ্যস্থতা নেটওয়ার্ক এখনও ইনিশিয়ালাইজেশন সম্পূর্ণ না করে থাকলেও। - আমি যখন ইনিশিয়ালাইজেশন কলব্যাক পাই, তখন কিছু মধ্যস্থতা নেটওয়ার্ক রেডি না থাকলে কী হবে?
আমরা সাজেস্ট করি যে
GADInitializationCompletionHandler-এর মধ্যে বিজ্ঞাপন লোড করুন। এমনকি কোনও মধ্যস্থতা নেটওয়ার্ক রেডি না থাকলেও, Google Mobile Ads SDK সেই নেটওয়ার্ককে বিজ্ঞাপন দেখাতে বলে। তাই, কোনও মধ্যস্থতা নেটওয়ার্ক টাইম-আউটের পরে ইনিশিয়ালাইজ করা শেষ করলে, এটি এখনও সেই সেশনে ভবিষ্যতের বিজ্ঞাপন অনুরোধ পরিবেশন করতে পারে।GADMobileAds.initializationStatusকল করে আপনার অ্যাপ সেশন জুড়ে সব অ্যাডাপ্টরের ইনিশিয়ালাইজেশন স্ট্যাটাস পোল করা চালিয়ে যেতে পারবেন।- কোনও নির্দিষ্ট মধ্যস্থতা নেটওয়ার্ক কেন রেডি নয় তা আমি কীভাবে জানব?
GADAdapterStatusঅবজেক্টেরdescriptionপ্রপার্টি থেকে জানা যায় যে কেন কোনও অ্যাডাপ্টর বিজ্ঞাপনের অনুরোধ পরিষেবা দেওয়ার জন্য প্রস্তুত নয়।userDidEarnRewardHandlerসম্পূর্ণতা হ্যান্ডলার কি সবসময়adDidDismissFullScreenContent:ডেলিগেট পদ্ধতির আগে কল করা হয়?Google Ads-এর ক্ষেত্রে, সব
userDidEarnRewardHandlerকলadDidDismissFullScreenContent:-এর আগে হয়। মধ্যস্থতার মাধ্যমে পরিবেশিত বিজ্ঞাপনের ক্ষেত্রে, থার্ড-পার্টি বিজ্ঞাপন নেটওয়ার্কের SDK প্রয়োগ করার পদ্ধতি কলব্যাক অর্ডার নির্ধারণ করে। পুরস্কার সংক্রান্ত তথ্য সহ একটিমাত্র ডেলিগেট পদ্ধতি প্রদান করে এমন বিজ্ঞাপন নেটওয়ার্ক SDK-এর জন্য, মধ্যস্থতা অ্যাডাপ্টারadDidDismissFullScreenContent:-এর আগেuserDidEarnRewardHandlerইনভোক করে।
GitHub-এ উদাহরণ
আপনার পছন্দসই ভাষায় পুরস্কার প্রদানকারী বিজ্ঞাপনের সম্পূর্ণ উদাহরণ দেখুন:
পরবর্তী ধাপ
ব্যবহারকারীর গোপনীয়তা সম্পর্কে আরও জানুন।