Ödüllü reklamlar, kullanıcıların uygulama içi ödüller karşılığında etkileşim seçeneğine sahip olduğu reklamlardır. Bu kılavuzda, Ad Managerödüllü reklamların iOS uygulamasına nasıl entegre edileceği gösterilmektedir.
Ön koşullar
- Google Mobile Ads SDK'sı 8.0.0 veya sonraki sürümler.
- Başlangıç kılavuzunu tamamlayın.
Her zaman test reklamlarıyla test etme
Uygulamalarınızı oluştururken ve test ederken canlı, üretim reklamları yerine test reklamlarını kullandığınızdan emin olun. Bunu yapmazsanız hesabınız askıya alınabilir.
Test reklamlarını yüklemenin en kolay yolu, iOS ödüllü reklamlara yönelik özel test reklam birimi kimliğimizi kullanmaktır:
/6499/example/rewarded
Her istek için test reklamı döndürecek şekilde özel olarak yapılandırılmıştır. Kodlama, test ve hata ayıklama sırasında bu özelliği kendi uygulamalarınızda da kullanabilirsiniz. Uygulamanızı yayınlamadan önce bu kimliği kendi reklam birimi kimliğinizle değiştirdiğinizden emin olun.
Mobile Ads SDK'sının test reklamlarının nasıl çalıştığı hakkında daha fazla bilgi için Test Reklamları konusuna bakın.
Uygulama
Ödüllü geçiş reklamlarını entegre etmenin birincil adımları şunlardır:
- Reklam yükle
- [İsteğe bağlı] SSV geri aramalarını doğrulayın
- Geri çağırmalara kaydolun
- Reklamı gösterme ve ödül etkinliğini yönetme
Reklam yükle
Reklam yükleme işlemi, GADRewardedAd
sınıfındaki statik loadWithAdUnitID:request:completionHandler:
yöntemi kullanılarak gerçekleştirilir. Yükleme yöntemi, reklam birimi kimliğinizi, bir GAMRequest
nesnesini ve reklam yükleme başarılı veya başarısız olduğunda çağrılan bir tamamlama işleyicisini gerektirir. Yüklenen GADRewardedAd
nesnesi, tamamlama işleyicisinde bir parametre olarak sağlanır. Aşağıdaki örnekte, ViewController
sınıfınızda bir GADRewardedAd
öğesinin nasıl
yükleneceği gösterilmektedir.
Swift
import GoogleMobileAds import UIKit class ViewController: UIViewController { private var rewardedAd: GADRewardedAd? func loadRewardedAd() { let request = GAMRequest() GADRewardedAd.load(withAdUnitID:"/6499/example/rewarded", request: request, completionHandler: { [self] ad, error in if let error = error { print("Failed to load rewarded ad with error: \(error.localizedDescription)") return } rewardedAd = ad print("Rewarded ad loaded.") } ) } }
Objective-C
@import GoogleMobileAds; @import UIKit; @interface ViewController () @property(nonatomic, strong) GADRewardedAd *rewardedAd; @end @implementation ViewController - (void)loadRewardedAd { GAMRequest *request = [GAMRequest request]; [GADRewardedAd loadWithAdUnitID:@"/6499/example/rewarded" 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."); }]; }
[İsteğe bağlı] Sunucu tarafı doğrulama (SSV) geri çağırmalarını doğrulayın
Sunucu tarafı doğrulama geri çağırmalarında ekstra veri gerektiren uygulamalar, ödüllü reklamların özel veri özelliğini kullanmalıdır. Ödüllü reklam nesnesinde ayarlanan herhangi bir dize değeri, SSV geri çağırmasının custom_data
sorgu parametresine iletilir. Herhangi bir özel veri değeri ayarlanmazsa custom_data
sorgu parametresi değeri SSV geri çağırmasında yer almaz.
Aşağıdaki kod örneğinde, reklam istemeden önce ödüllü reklam nesnesinde özel verilerin nasıl ayarlanacağı gösterilmektedir.
Swift
GADRewardedInterstitialAd.load(withAdUnitID:"/6499/example/rewarded", request: request, completionHandler: { [self] ad, error in if let error != error { rewardedInterstitialAd = ad let options = GADServerSideVerificationOptions() options.customRewardString = "SAMPLE_CUSTOM_DATA_STRING" rewardedInterstitialAd.serverSideVerificationOptions = options }
Objective-C
GAMRequest *request = [GAMRequest request]; [GADRewardedInterstitialAd loadWithAdUnitID:@"/6499/example/rewarded" request:request completionHandler:^(GADRewardedInterstitialAd *ad, NSError *error) { if (error) { // Handle Error return; } self.rewardedInterstitialAd = ad; GADServerSideVerificationOptions *options = [[GADServerSideVerificationOptions alloc] init]; options.customRewardString = @"SAMPLE_CUSTOM_DATA_STRING"; ad.serverSideVerificationOptions = options; }];
Geri çağırmalara kaydolun
Sunum etkinlikleriyle ilgili bildirim almak için GADFullScreenContentDelegate
protokolünü uygulamanız ve döndürülen reklamın fullScreenContentDelegate
özelliğine atamanız gerekir. GADFullScreenContentDelegate
protokolü, reklam başarıyla veya başarısız olarak sunulduğunda ve reddedildiğinde geri çağırmaları işler. Aşağıdaki kod, protokolün nasıl uygulanacağını ve reklama nasıl atanacağını gösterir:
Swift
class ViewController: UIViewController, GADFullScreenContentDelegate { private var rewardedAd: GADRewardedAd? func loadRewardedAd() { let request = GAMRequest() GADRewarded.load(withAdUnitID:"/6499/example/rewarded", request: request, completionHandler: { [self] ad, error in if let error = error { print("Failed to load rewarded ad with error: \(error.localizedDescription)") return } rewardedAd = ad print("Rewarded ad loaded.") rewardedAd?.fullScreenContentDelegate = self } ) } /// 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.") } }
Objective-C
@interface ViewController ()<GADFullScreenContentDelegate> @property(nonatomic, strong) GADRewardedAd *rewardedAd; @end @implementation ViewController - (void)loadRewardedAd { GAMRequest *request = [GAMRequest 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
tek kullanımlık bir nesnedir. Bu, ödüllü reklamın gösterildikten sonra tekrar gösterilemeyeceği anlamına gelir. En iyi uygulama, GADFullScreenContentDelegate
tarihinde adDidDismissFullScreenContent:
yönteminde başka bir ödüllü reklam yüklemektir. Böylece, sonraki ödüllü reklam, önceki reklam kapatılır kapatılmaz yüklenmeye başlar.
Reklamı gösterme ve ödül etkinliğini yönetme
Kullanıcılara ödüllü reklam göstermeden önce, ödüllü reklam içeriğini ödül karşılığında görüntülemesi için açık bir seçenek sunmanız gerekir. Ödüllü reklamlar her zaman isteğe bağlı bir deneyim olmalıdır.
Reklamınızı sunarken kullanıcının ödülü işlemesi için bir GADUserDidEarnRewardHandler
nesnesi sağlamanız gerekir.
Aşağıdaki kod, ödüllü reklam görüntülemenin en iyi yöntemini sunar.
Swift
func show() { if let ad = rewardedAd { ad.present(fromRootViewController: self) { let reward = ad.adReward print("Reward received with currency \(reward.amount), amount \(reward.amount.doubleValue)") // TODO: Reward the user. } } else { print("Ad wasn't ready") } }
Objective-C
- (void)show { ... if (self.rewardedAd) { [self.rewardedAd presentFromRootViewController:self userDidEarnRewardHandler:^{ GADAdReward *reward = self.rewardedAd.adReward; // TODO: Reward the user! }]; } else { NSLog(@"Ad wasn't ready"); } }
SSS
GADRewardedAd
için ödül bilgilerini alabilir miyim?- Evet.
userDidEarnReward
geri çağırması tetiklenmeden önce ödül tutarına ihtiyacınız varsaGADRewardedAd
, reklam yüklendikten sonra ödül tutarını doğrulamak için kontrol edebileceğiniz biradReward
özelliğine sahiptir. - Başlatma çağrısı için zaman aşımı var mı?
- 10 saniye sonra Google Mobile Ads SDK'sı, uyumlulaştırma ağı başlatma işlemini henüz tamamlamamış olsa bile
startWithCompletionHandler:
yöntemine sağlananGADInitializationCompletionHandler
yöntemini çağırır. - Bazı uyumlulaştırma ağları başlatma geri çağırmasını aldığımda hazır değilse ne olur?
GADInitializationCompletionHandler
içinde bir reklam yüklemenizi öneririz. Bir uyumlulaştırma ağı hazır olmasa bile, Google Mobile Ads SDK'sı yine de bu ağdan bir reklam ister. Dolayısıyla, bir uyumlulaştırma ağı zaman aşımından sonra başlatılmasını bitirirse bu oturumda gelecekteki reklam istekleri sunmaya devam edebilir.Uygulama oturumunuz boyunca
GADMobileAds.initializationStatus
yöntemini çağırarak tüm bağdaştırıcıların başlatma durumunu yoklamaya devam edebilirsiniz.- Belirli bir uyumlulaştırma ağının neden hazır olmadığını nasıl öğrenebilirim?
GADAdapterStatus
nesnesinindescription
özelliği, bağdaştırıcının neden reklam istekleri sunmaya hazır olmadığını açıklar.userDidEarnRewardHandler
tamamlama işleyicisi her zamanadDidDismissFullScreenContent:
yetki verme yönteminden önce mi çağrılıyor?Google Ads için
userDidEarnRewardHandler
çağrılarının tamamıadDidDismissFullScreenContent:
tarihinden önce gerçekleşir. Uyumlulaştırma aracılığıyla yayınlanan reklamlar için üçüncü taraf reklam ağı SDK'sının uygulaması, geri çağırma sırasını belirler. Ödül bilgilerini içeren tek bir yetki verme yöntemi sağlayan reklam ağı SDK'ları için uyumlulaştırma bağdaştırıcısı,adDidDismissFullScreenContent:
öncesindeuserDidEarnRewardHandler
yöntemini çağırır.
GitHub'daki örnekler
- Ödüllü reklamlar örneği: Swift | Objective-C
Sonraki adımlar
Kullanıcı gizliliği hakkında daha fazla bilgi edinin.