Ödüllü reklamlar

Platform seçin: Android iOS Unity Flutter

Ödüllü reklamlar, kullanıcıların uygulama içi ödüller karşılığında etkileşime girebileceği reklamlardır. Bu kılavuzda, AdMob'dan alınan ödüllü reklamları iOS uygulamasına nasıl entegre edeceğiniz açıklanmaktadır. Müşterilerin başarı hikayelerinden bazılarını okuyun: 1. örnek olay, 2. örnek olay.

Ön koşullar

Her zaman test reklamlarıyla test yapın

Uygulamalarınızı oluşturup test ederken canlı yayınlanan üretim reklamları yerine test reklamlarını kullandığınızdan emin olun. Bu işlemi yapmazsanız hesabınız askıya alınabilir.

Test reklamlarını yüklemenin en kolay yolu, iOS ödüllü reklamları için özel test reklam birimi kimliğimizi kullanmaktır:

ca-app-pub-3940256099942544/1712485313

Bu kimlik, her istek için test reklamları döndürecek şekilde özel olarak yapılandırılmıştır ve kodlama, test etme ve hata ayıklama sırasında kendi uygulamalarınızda 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 çalışma şekli hakkında daha fazla bilgi için Test Reklamları başlıklı makaleyi inceleyin.

Uygulama

Ödüllü reklamları entegre etmeyle ilgili temel adımlar şunlardır:

  • Reklam yükleme
  • [İsteğe bağlı] SSV geri çağırmalarını doğrulama
  • Geri arama için kaydolma
  • Reklamı gösterin ve ödül etkinliğini işleyin

Reklam yükleme

Reklam yükleme işlemi, GADRewardedAd sınıfındaki load(adUnitID:request) yöntemi kullanılarak gerçekleştirilir.

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;
    }];

[İsteğe bağlı] Sunucu tarafı doğrulama (SSV) geri çağırmalarını doğrulama

Sunucu tarafı doğrulama geri çağırmalarında ek veriler gerektiren uygulamalar, ödüllü reklamların özel veri özelliğini kullanmalıdır. Bir ödüllü reklam nesnesinde ayarlanan tüm dize değerleri, SSV geri çağırmasının custom_data sorgu parametresine iletilir. Özel veri değeri ayarlanmamışsa custom_data sorgu parametresi değeri SSV geri çağırmasında bulunmaz.

Aşağıdaki kod örneğinde, reklam isteğinde bulunmadan önce ödüllü reklam nesnesinde özel verilerin nasıl ayarlanacağı gösterilmektedir:

Swift

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())
  let options = ServerSideVerificationOptions()
  options.customRewardText = "SAMPLE_CUSTOM_DATA_STRING"
  rewardedAd?.serverSideVerificationOptions = options
} catch {
  print("Rewarded ad failed to load 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;
                GADServerSideVerificationOptions *options =
                    [[GADServerSideVerificationOptions alloc] init];
                options.customRewardString = @"SAMPLE_CUSTOM_DATA_STRING";
                ad.serverSideVerificationOptions = options;
              }];

Geri arama için kaydolma

Sunum etkinlikleriyle ilgili bildirim almak için döndürülen reklamın GADFullScreenContentDelegate to thefullScreenContentDelegate özelliğini atamanız gerekir:

Swift

rewardedAd?.fullScreenContentDelegate = self

SwiftUI

rewardedAd?.fullScreenContentDelegate = self

Objective-C

self.rewardedAd.fullScreenContentDelegate = self;

GADFullScreenContentDelegate protokolü, reklamın başarıyla veya başarısızlıkla sunulduğu ve kapatıldığı zamanlardaki geri çağırmaları işler. Aşağıdaki kodda, protokolün nasıl uygulanacağı gösterilmektedir:

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

Reklamı gösterin ve ödül etkinliğini işleyin

Kullanıcılara ödüllü reklam göstermeden önce, ödül karşılığında ödüllü reklam içeriğini görüntüleme konusunda açık bir seçim sunmanız gerekir. Ödüllü reklamlar her zaman isteğe bağlı bir deneyim olmalıdır.

Reklamınızı sunarken, kullanıcıya ödül vermek için bir GADUserDidEarnRewardHandler nesnesi sağlamanız gerekir.

Aşağıdaki kod, ödüllü reklam göstermenin en iyi yöntemini sunmaktadır:

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

Reklamın ne zaman gösterileceğini belirlemek için görünümdeki kullanıcı arayüzü etkinliklerini dinleyin.

var body: some View {
  VStack(spacing: 20) {
      Button("Watch video for additional 10 coins") {
        viewModel.showAd()
        showWatchVideoButton = false
      }

Görünüm modelinden ödüllü reklamı sunun:

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.
                      }];

SSS

GADRewardedAd ile ilgili ödül ayrıntılarını alabilir miyim?
Evet, userDidEarnReward geri çağırma işlemi tetiklenmeden önce ödül tutarına ihtiyacınız varsa GADRewardedAd, reklam yüklendikten sonra ödül tutarını doğrulamak için kontrol edebileceğiniz bir adReward özelliği içerir.
İlk kullanıma hazırlama çağrısı için zaman aşımı var mı?
10 saniye sonra, bir uyumlulaştırma ağı ilk kullanıma hazırlama işlemini tamamlamamış olsa bile Google Mobile Ads SDK, GADInitializationCompletionHandler yöntemine sağlanan startWithCompletionHandler: işlevini çağırır.
Başlatma geri araması aldığımda bazı arabuluculuk ağları 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, bu ağdan reklam ister. Bu nedenle, bir uyumlulaştırma ağı başlatma işlemini zaman aşımından sonra tamamlarsa oturumdaki gelecekteki reklam isteklerine hizmet vermeye devam edebilir.

GADMobileAds.initializationStatus işlevini çağırarak uygulama oturumunuz boyunca 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 nesnesinin description özelliği, bir bağdaştırıcının neden reklam isteklerine hizmet vermeye hazır olmadığını açıklar.

userDidEarnRewardHandler tamamlama işleyicisi her zaman adDidDismissFullScreenContent: temsilci yönteminden önce mi çağrılır?

Google reklamları için tüm userDidEarnRewardHandler çağrıları adDidDismissFullScreenContent:'dan önce gerçekleşir. Uyumlulaştırma aracılığıyla yayınlanan reklamlarda geri çağırma sırasını üçüncü taraf reklam ağı SDK'sının uygulanması belirler. Ödül bilgileriyle tek bir temsilci yöntemi sağlayan reklam ağı SDK'ları için uyumlulaştırma bağdaştırıcısı, adDidDismissFullScreenContent:'den önce userDidEarnRewardHandler yöntemini çağırır.

GitHub'daki örnekler

Ödüllü reklam örneklerinin tamamını tercih ettiğiniz dilde görüntüleyin:

Sonraki adımlar

Kullanıcı gizliliği hakkında daha fazla bilgi edinin.