Ödüllü reklamlar

Ödüllü reklamlar, kullanıcıların uygulama içi ödüller karşılığında etkileşim kurma seçeneğine sahip olduğu reklamlardır. Bu kılavuzda, Ad Manageruygulamasındaki ödüllü reklamları bir iOS uygulamasına nasıl entegre edeceğiniz gösterilmektedir.

Ön koşullar

Her zaman test reklamlarıyla test etme

Uygulamalarınızı oluşturup test ederken canlı üretim reklamları yerine test reklamlarını 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:

/6499/example/rewarded

Her istek için test reklamı döndürecek şekilde özel olarak yapılandırılmıştır. Kodlama, test etme ve hata ayıklama sırasında bu özelliği kendi uygulamalarınızda kullanabilirsiniz. Bunun için uygulamanızı yayınlamadan önce bunu 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ı konusuna bakın.

Uygulama

Ödüllü geçiş reklamlarını entegre etmek için başlıca adımlar aşağıdaki gibidir:

  • Reklam yükle
  • [İsteğe bağlı] SSV geri çağırmalarını doğrulama
  • Geri çağırma işlevleri için kaydolun
  • Reklamı gösterin ve ödül etkinliğini yönetin.

Reklam yükle

Reklamın yüklenmesi, GADRewardedAd sınıfındaki statik loadWithAdUnitID:request:completionHandler: yöntemi kullanılarak gerçekleştirilir. Yükleme yöntemi için reklam birimi kimliğiniz, bir GAMRequest nesnesi ve reklam yükleme başarılı veya başarısız olduğunda çağrılan bir tamamlama işleyici gerekir. Yüklenen GADRewardedAd nesnesi, tamamlama işleyicide parametre olarak sağlanır. Aşağıdaki örnekte, ViewController sınıfınıza nasıl GADRewardedAd yükleneceği gösterilmektedir.

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  private var rewardedAd: GADRewardedAd?

  func loadRewardedAd() {
    do {
      rewardedAd = try await GADRewardedAd.load(
        withAdUnitID: "/6499/example/rewarded", request: GAMRequest())
    } catch {
      print("Rewarded ad failed to load with error: \(error.localizedDescription)")
    }
  }
}

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ğrulama

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 görünmez.

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: "/6499/example/rewarded", request: GAMRequest())
  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:@"/6499/example/rewarded"
              request:[GAMRequest 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 çağırma işlevleri için kaydolun

Sunu etkinlikleriyle ilgili bildirim almak için GADFullScreenContentDelegate protokolünü uygulamalı ve döndürülen reklamın fullScreenContentDelegate özelliğine atamalısınız. GADFullScreenContentDelegate protokolü, reklamın başarılı veya başarısız bir şekilde sunulması ve kapatıldığında geri çağırma işlemlerini gerçekleştirir. Aşağıdaki kod, protokolün nasıl uygulanacağını ve reklama nasıl atanacağını gösterir:

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADFullScreenContentDelegate {

  private var rewardedAd: GADRewardedAd?

  func loadRewardedAd() {
    do {
      rewardedAd = try await GADRewardedAd.load(
        withAdUnitID: "/6499/example/rewarded", request: GAMRequest())
      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.")
  }
}

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österilmeyeceği anlamına gelir. En iyi uygulama, GADFullScreenContentDelegate sitesindeki 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österin ve ödül etkinliğini yönetin.

Ödüllü reklam kullanıcılara göstermeden önce, kullanıcıya ödül karşılığında ödüllü reklam içeriğini görüntülemesi için açık bir seçenek sunmanız gerekir. Ödüllü reklamlar her zaman etkinleştirilebilen bir deneyim olmalıdır.

Reklamınızı gösterirken kullanıcı için ödülü işleyecek bir GADUserDidEarnRewardHandler nesnesi sağlamanız gerekir.

Aşağıdaki kod, ödüllü reklam görüntülemek 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.
  }
}

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ğırması 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ğine sahiptir.
İlk kullanıma hazırlama çağrısı için zaman aşımı var mı?
10 saniyeden sonra Google Mobile Ads SDK'sı, bir uyumlulaştırma ağı başlatma işlemini henüz tamamlamamış olsa bile startWithCompletionHandler: yöntemi için sağlanan GADInitializationCompletionHandler özelliğini çağırır.
Başlatma geri çağırmasını aldığımda bazı uyumlulaştırma 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'sı bu ağdan reklam ister. Böylece, bir uyumlulaştırma ağı zaman aşımından sonra ilk kullanıma hazırlamayı bitirse bile bu oturumda gelecekteki reklam isteklerine hizmet verebilir.

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 nesnesinin description özelliği, bir bağdaştırıcının reklam isteklerine hizmet sunmaya neden hazır olmadığını açıklar.

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

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

GitHub'daki örnekler

Sonraki adımlar

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