Ödüllü reklamlar

Ödüllü reklamlar, kullanıcıların uygulama içi ödüller karşılığında etkileşime geçebileceği reklamlardır. Bu kılavuzda, AdMob'daki ödüllü reklamların iOS uygulamasına nasıl entegre edileceği gösterilmektedir. Müşteri başarı hikayelerini okuyun: örnek olay 1, örnek olay 2.

Ön koşullar

Her zaman test reklamlarıyla test yapın

Uygulamalarınızı oluşturup test ederken canlı üretim reklamları yerine test reklamları kullandığınızdan emin olun. Aksi takdirde 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

Her istek için test reklamları döndürecek şekilde özel olarak yapılandırılmıştır. 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ştirmeniz yeterlidir.

Mobile Ads SDK'sının test reklamlarının işleyiş şekli hakkında daha fazla bilgi için Test Reklamları başlıklı makaleyi inceleyin.

Uygulama

Ödüllü reklamları entegre etmek için temel adımlar şunlardır:

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

Reklam yükleme

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

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

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

Sunucu tarafı doğrulama geri çağrılarında ek veri gerektiren uygulamalar, ödüllü reklamların özel veri özelliğini kullanmalıdır. Ödüllü reklam nesnesinde ayarlanan tüm dize değerleri, SSV geri çağırma işlevinin custom_data sorgu parametresine iletilir. Özel veri değeri ayarlanmazsa custom_data sorgu parametresi değeri SSV geri çağırma işlevinde yer almaz.

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

Geri arama için kaydolun

Sunum etkinlikleriyle ilgili bildirim almak için GADFullScreenContentDelegate protokolünü uygulamanız ve döndürülen reklamın fullScreenContentDelegate mülküne atamanız gerekir. GADFullScreenContentDelegate protokolü, reklamın başarıyla veya başarısız bir şekilde gösterildiği ve kapatıldığında geri çağırma işlemlerini yönetir. Aşağıdaki kodda, protokolün nasıl uygulanacağı ve reklama nasıl atanacağı gösterilmektedir:

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 mülkünü döndürülen reklama atayın:

rewardedAd?.fullScreenContentDelegate = self

Protokolü uygulayın:

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, tek kullanımlık bir nesnedir. Bu, ödüllü bir reklamın gösterildikten sonra tekrar gösterilemeyeceği anlamına gelir. En iyi uygulama, önceki reklam kapatılır kapatılmaz bir sonraki ödüllü reklamın yüklenmeye başlaması için GADFullScreenContentDelegate yönteminde adDidDismissFullScreenContent: yöntemine başka bir ödüllü reklam yüklemektir.

Reklamı gösterme ve ödül etkinliğini işleme

Kullanıcılara ödüllü reklam göstermeden önce, ödül karşılığında ödüllü reklam içeriğini görüntüleme seçeneğini açıkça 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ü sunmak için bir GADUserDidEarnRewardHandler nesnesi sağlamanız gerekir.

Aşağıdaki kod, ödüllü reklam göstermek için en iyi yöntemi sunar.

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

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
      }

Ödüllü reklamı görüntüleme modelinden sunun:

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

SSS

GADRewardedAd ile ilgili ödül ayrıntılarını öğrenebilir miyim?
Evet, userDidEarnReward geri çağırma işlevi tetiklenmeden önce ödül tutarına ihtiyacınız varsa GADRewardedAd'de, reklam yüklendikten sonra ödül tutarını doğrulamak için kontrol edebileceğiniz bir adReward mülkü vardır.
İlklendirme çağrısı için zaman aşımı var mı?
10 saniye sonra Google Mobile Ads SDK'sı, bir uyumlulaştırma ağı ilk kullanıma hazırlama işlemini tamamlamamış olsa bile startWithCompletionHandler: yöntemine sağlanan GADInitializationCompletionHandler işlevini çağırır.
İlklendirme geri çağırmasını aldığımda bazı uyumlulaştırma ağları hazır değilse ne olur?

GADInitializationCompletionHandler içine bir reklam yüklemenizi öneririz. Bir uyumlulaştırma ağı hazır olmasa bile Google Mobile Ads SDK'sı bu ağdan reklam isteğinde bulunur. Bu nedenle, bir uyumlulaştırma ağı zaman aşımından sonra başlatılmayı tamamlarsa söz konusu oturumda gelecekteki reklam isteklerini yine sunabilir.

GADMobileAds.initializationStatus işlevini çağırarak uygulama oturumunuz boyunca tüm bağdaştırıcıların başlatma durumunu sorgulamaya devam edebilirsiniz.

Belirli bir uyumlulaştırma ağının neden hazır olmadığını nasıl öğrenebilirim?

Bir GADAdapterStatus nesnesinin description mülkü, bağdaştırıcının reklam isteklerini işlemeye hazır olmama nedenini açıklar.

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

Google reklamları için tüm userDidEarnRewardHandler aramaları adDidDismissFullScreenContent:'den ö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 uygulaması belirler. Ödül bilgileri içeren tek bir temsilci yöntemi sağlayan reklam ağı SDK'ları için uyumlulaştırma bağdaştırıcısı, adDidDismissFullScreenContent:'ten önce userDidEarnRewardHandler'ü çağırır.

GitHub'daki örnekler

Ödüllü reklam örneklerini tercih ettiğiniz dilde görüntüleyin:

Sonraki adımlar

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