इनाम वाले विज्ञापन ऐसे विज्ञापन होते हैं जिन्हें उपयोगकर्ता, ऐप्लिकेशन में मिलने वाले इनाम के बदले देख सकते हैं. इस गाइड में, AdMob से iOS ऐप्लिकेशन में इनाम वाले विज्ञापनों को इंटिग्रेट करने का तरीका बताया गया है. ग्राहकों की कुछ सफलता की कहानियां पढ़ें: पहली केस स्टडी, दूसरी केस स्टडी.
ज़रूरी शर्तें
- Google Mobile Ads SDK 8.0.0 या उसके बाद का वर्शन.
- शुरुआती निर्देशों की गाइड को पूरा करें.
हमेशा टेस्ट विज्ञापनों की मदद से जांच करें
अपने ऐप्लिकेशन बनाते और टेस्ट करते समय, लाइव और प्रोडक्शन विज्ञापनों के बजाय, टेस्ट विज्ञापनों का इस्तेमाल करें. ऐसा न करने पर, आपके खाते को निलंबित किया जा सकता है.
टेस्ट विज्ञापनों को लोड करने का सबसे आसान तरीका, iOS पर इनाम वाले विज्ञापनों के लिए बने हमारे खास टेस्ट विज्ञापन यूनिट आईडी का इस्तेमाल करना है:
ca-app-pub-3940256099942544/1712485313
इसे खास तौर पर, हर अनुरोध के लिए टेस्ट विज्ञापन दिखाने के लिए कॉन्फ़िगर किया गया है. साथ ही, कोडिंग, टेस्टिंग, और डीबग करने के दौरान, अपने ऐप्लिकेशन में इसका इस्तेमाल किया जा सकता है. बस पक्का करें कि ऐप्लिकेशन पब्लिश करने से पहले, आपने इसे अपनी विज्ञापन यूनिट के आईडी से बदल दिया हो.
Mobile Ads SDK के टेस्ट विज्ञापनों के काम करने के तरीके के बारे में ज़्यादा जानने के लिए, टेस्ट विज्ञापन लेख पढ़ें.
लागू करना
इनाम वाले विज्ञापनों को इंटिग्रेट करने के लिए, यह तरीका अपनाएं:
- विज्ञापन लोड करना
- [ज़रूरी नहीं] एसएसवी कॉलबैक की पुष्टि करना
- कॉलबैक के लिए रजिस्टर करना
- विज्ञापन दिखाना और इनाम वाले इवेंट को मैनेज करना
विज्ञापन लोड करना
विज्ञापन लोड करने के लिए, GADRewardedAd
क्लास पर load(adUnitID:request)
तरीका इस्तेमाल किया जाता है.
Swift
import GoogleMobileAds
import UIKit
class ViewController: UIViewController {
private var rewardedAd: GADRewardedAd?
func loadRewardedAd() async {
do {
rewardedAd = try await GADRewardedAd.load(
withAdUnitID: "ca-app-pub-3940256099942544/1712485313", request: GADRequest())
} catch {
print("Rewarded ad failed to load with error: \(error.localizedDescription)")
}
}
}
SwiftUI
import GoogleMobileAds
class RewardedViewModel: NSObject, ObservableObject, GADFullScreenContentDelegate {
@Published var coins = 0
private var rewardedAd: GADRewardedAd?
func loadAd() async {
do {
rewardedAd = try await GADRewardedAd.load(
withAdUnitID: "ca-app-pub-3940256099942544/1712485313", request: GADRequest())
rewardedAd?.fullScreenContentDelegate = self
} catch {
print("Failed to load rewarded ad with error: \(error.localizedDescription)")
}
}
Objective-C
@import GoogleMobileAds;
@import UIKit;
@interface ViewController ()
@property(nonatomic, strong) GADRewardedAd *rewardedAd;
@end
@implementation ViewController
- (void)loadRewardedAd {
GADRequest *request = [GADRequest request];
[GADRewardedAd
loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
request:request
completionHandler:^(GADRewardedAd *ad, NSError *error) {
if (error) {
NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
return;
}
self.rewardedAd = ad;
NSLog(@"Rewarded ad loaded.");
}];
}
[ज़रूरी नहीं] सर्वर-साइड से की जाने वाली पुष्टि (SSV) के कॉलबैक की पुष्टि करना
जिन ऐप्लिकेशन को सर्वर साइड पुष्टि कॉलबैक में ज़्यादा डेटा की ज़रूरत होती है उन्हें इनाम वाले विज्ञापनों की कस्टम डेटा सुविधा का इस्तेमाल करना चाहिए. इनाम वाले विज्ञापन ऑब्जेक्ट पर सेट की गई कोई भी स्ट्रिंग वैल्यू, एसएसवी कॉलबैक के custom_data
क्वेरी पैरामीटर को पास की जाती है. अगर कोई पसंद के मुताबिक डेटा वैल्यू सेट नहीं की गई है, तो एसएसवी कॉलबैक में custom_data
क्वेरी पैरामीटर की वैल्यू मौजूद नहीं होगी.
नीचे दिए गए कोड सैंपल में, विज्ञापन का अनुरोध करने से पहले इनाम वाले विज्ञापन ऑब्जेक्ट पर कस्टम डेटा सेट करने का तरीका बताया गया है.
Swift
do {
rewardedAd = try await GADRewardedAd.load(
withAdUnitID: "ca-app-pub-3940256099942544/1712485313", request: GADRequest())
let options = GADServerSideVerificationOptions()
options.customRewardString = "SAMPLE_CUSTOM_DATA_STRING"
rewardedAd.serverSideVerificationOptions = options
} catch {
print("Rewarded ad failed to load with error: \(error.localizedDescription)")
}
Objective-C
[GADRewardedAd
loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
request:[GADRequest request];
completionHandler:^(GADRewardedAd *ad, NSError *error) {
if (error) {
// Handle Error
return;
}
self.rewardedAd = ad;
GADServerSideVerificationOptions *options =
[[GADServerSideVerificationOptions alloc] init];
options.customRewardString = @"SAMPLE_CUSTOM_DATA_STRING";
ad.serverSideVerificationOptions = options;
}];
कॉलबैक के लिए रजिस्टर करना
प्रज़ेंटेशन इवेंट की सूचनाएं पाने के लिए, आपको GADFullScreenContentDelegate
प्रोटोकॉल लागू करना होगा और उसे दिखाए गए विज्ञापन की fullScreenContentDelegate
प्रॉपर्टी को असाइन करना होगा. GADFullScreenContentDelegate
प्रोटोकॉल, विज्ञापन के दिखाए जाने या न दिखाए जाने और खारिज किए जाने के लिए कॉलबैक मैनेज करता है. नीचे दिए गए कोड में, प्रोटोकॉल को लागू करने और उसे विज्ञापन को असाइन करने का तरीका बताया गया है:
Swift
import GoogleMobileAds
import UIKit
class ViewController: UIViewController, GADFullScreenContentDelegate {
private var rewardedAd: GADRewardedAd?
func loadRewardedAd() async {
do {
rewardedAd = try await GADRewardedAd.load(
withAdUnitID: "ca-app-pub-3940256099942544/1712485313", request: GADRequest())
rewardedAd?.fullScreenContentDelegate = self
} catch {
print("Rewarded ad failed to load with error: \(error.localizedDescription)")
}
}
/// Tells the delegate that the ad failed to present full screen content.
func ad(_ ad: GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: Error) {
print("Ad did fail to present full screen content.")
}
/// Tells the delegate that the ad will present full screen content.
func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("Ad will present full screen content.")
}
/// Tells the delegate that the ad dismissed full screen content.
func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("Ad did dismiss full screen content.")
}
}
SwiftUI
दिखाए गए विज्ञापन को fullScreenContentDelegate
प्रॉपर्टी असाइन करें:
rewardedAd?.fullScreenContentDelegate = self
प्रोटोकॉल लागू करें:
func adDidRecordImpression(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func adDidRecordClick(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func ad(
_ ad: GADFullScreenPresentingAd,
didFailToPresentFullScreenContentWithError error: Error
) {
print("\(#function) called")
}
func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func adWillDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
// Clear the rewarded ad.
rewardedAd = nil
}
Objective-C
@interface ViewController () <GADFullScreenContentDelegate>
@property(nonatomic, strong) GADRewardedAd *rewardedAd;
@end
@implementation ViewController
- (void)loadRewardedAd {
GADRequest *request = [GADRequest request];
[GADRewardedAd
loadWithAdUnitID:@"ca-app-pub-3940256099942544/4806952744"
request:request
completionHandler:^(GADRewardedAd *ad, NSError *error) {
if (error) {
NSLog(@"Rewarded ad failed to load with error: %@", [error localizedDescription]);
return;
}
self.rewardedAd = ad;
NSLog(@"Rewarded ad loaded.");
self.rewardedAd.fullScreenContentDelegate = self;
}];
}
/// Tells the delegate that the ad failed to present full screen content.
- (void)ad:(nonnull id<GADFullScreenPresentingAd>)ad
didFailToPresentFullScreenContentWithError:(nonnull NSError *)error {
NSLog(@"Ad did fail to present full screen content.");
}
/// Tells the delegate that the ad will present full screen content.
- (void)adWillPresentFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
NSLog(@"Ad will present full screen content.");
}
/// Tells the delegate that the ad dismissed full screen content.
- (void)adDidDismissFullScreenContent:(nonnull id<GADFullScreenPresentingAd>)ad {
NSLog(@"Ad did dismiss full screen content.");
}
GADRewardedAd
, एक बार इस्तेमाल होने वाला ऑब्जेक्ट है. इसका मतलब है कि इनाम वाला विज्ञापन एक बार दिखने के बाद, उसे फिर से नहीं दिखाया जा सकता. सबसे सही तरीका यह है कि GADFullScreenContentDelegate
पर adDidDismissFullScreenContent:
तरीके से, इनाम वाला एक और विज्ञापन लोड किया जाए, ताकि पिछले विज्ञापन को खारिज करने के तुरंत बाद अगला इनाम वाला विज्ञापन लोड होना शुरू हो जाए.
विज्ञापन दिखाना और इनाम वाले इवेंट को मैनेज करना
उपयोगकर्ताओं को इनाम वाला विज्ञापन दिखाने से पहले, आपको उपयोगकर्ता को इनाम के बदले में इनाम वाला विज्ञापन देखने का विकल्प देना होगा. इनाम वाले विज्ञापनों के लिए, ऑप्ट-इन करना ज़रूरी है.
विज्ञापन दिखाते समय, आपको उपयोगकर्ता को इनाम देने के लिए GADUserDidEarnRewardHandler
ऑब्जेक्ट उपलब्ध कराना होगा.
नीचे दिया गया कोड, इनाम वाला विज्ञापन दिखाने का सबसे अच्छा तरीका बताता है.
Swift
func show() {
guard let rewardedAd = rewardedAd else {
return print("Ad wasn't ready.")
}
// The UIViewController parameter is an optional.
ad.present(fromRootViewController: nil) {
let reward = ad.adReward
print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)")
// TODO: Reward the user.
}
}
SwiftUI
विज्ञापन कब दिखाना है, यह तय करने के लिए व्यू में यूज़र इंटरफ़ेस (यूआई) इवेंट सुनें.
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(fromRootViewController: nil) {
let reward = rewardedAd.adReward
print("Reward amount: \(reward.amount)")
self.addCoins(reward.amount.intValue)
}
}
Objective-C
- (void)show {
if (self.rewardedAd) {
// The UIViewController parameter is nullable.
[self.rewardedAd presentFromRootViewController:nil
userDidEarnRewardHandler:^{
GADAdReward *reward =
self.rewardedAd.adReward;
// TODO: Reward the user!
}];
} else {
NSLog(@"Ad wasn't ready");
}
}
अक्सर पूछे जाने वाले सवाल
- क्या मुझे
GADRewardedAd
के लिए इनाम की जानकारी मिल सकती है? - हां, अगर आपको
userDidEarnReward
कॉलबैक ट्रिगर होने से पहले इनाम की रकम चाहिए, तोGADRewardedAd
में एकadReward
प्रॉपर्टी होती है. विज्ञापन लोड होने के बाद, इनाम की रकम की पुष्टि करने के लिए इस प्रॉपर्टी की जांच की जा सकती है. - क्या शुरुआती कॉल के लिए कोई टाइम आउट है?
- 10 सेकंड के बाद, Google Mobile Ads SDK,
GADInitializationCompletionHandler
के लिए दिए गएstartWithCompletionHandler:
तरीके को लागू करता है. भले ही, कोई मीडिएशन नेटवर्क अब भी शुरू नहीं हुआ हो. - अगर मुझे शुरू करने का कॉलबैक मिलने पर, कुछ मीडिएशन नेटवर्क तैयार नहीं हैं, तो क्या होगा?
हमारा सुझाव है कि आप
GADInitializationCompletionHandler
में विज्ञापन लोड करें. अगर कोई मीडिएशन नेटवर्क तैयार नहीं है, तो भी Google Mobile Ads SDK उस नेटवर्क से विज्ञापन का अनुरोध करता है. इसलिए, अगर कोई मीडिएशन नेटवर्क टाइम आउट के बाद शुरू हो जाता है, तो वह उस सेशन में आने वाले समय के विज्ञापन अनुरोधों को पूरा कर सकता है.GADMobileAds.initializationStatus
को कॉल करके, अपने ऐप्लिकेशन सेशन के दौरान सभी अडैप्टर के शुरू होने की स्थिति को पोल किया जा सकता है.- मुझे यह कैसे पता चलेगा कि कोई खास मीडिएशन नेटवर्क तैयार क्यों नहीं है?
GADAdapterStatus
ऑब्जेक्ट कीdescription
प्रॉपर्टी से पता चलता है कि कोई अडैप्टर, विज्ञापन अनुरोधों को पूरा करने के लिए क्यों तैयार नहीं है.- क्या
adDidDismissFullScreenContent:
डेलिगेट मेथड से पहले,userDidEarnRewardHandler
पूरा होने की सूचना देने वाले हैंडलर को हमेशा कॉल किया जाता है? Google Ads के लिए, सभी
userDidEarnRewardHandler
कॉलadDidDismissFullScreenContent:
से पहले होते हैं. मीडिएशन के ज़रिए दिखाए जाने वाले विज्ञापनों के लिए, तीसरे पक्ष की विज्ञापन नेटवर्क कंपनी के SDK टूल के लागू होने से कॉलबैक का क्रम तय होता है. इनाम की जानकारी के साथ एक ही डेलिगेट करने का तरीका उपलब्ध कराने वाले विज्ञापन नेटवर्क एसडीके के लिए, मीडिएशन अडैप्टरadDidDismissFullScreenContent:
से पहलेuserDidEarnRewardHandler
को लागू करता है.
GitHub पर मौजूद उदाहरण
अपनी पसंदीदा भाषा में, इनाम वाले विज्ञापनों के पूरे उदाहरण देखें:
अगले चरण
उपयोगकर्ता की निजता के बारे में ज़्यादा जानें.