Ödüllü reklamlar

Ödüllü reklamlar, kullanıcıların reklamlar üzerinden dönüşüm elde etme seçeneği satın alabilirsiniz. Bu kılavuz Ad Manager'dan ödüllü reklamları nasıl entegre edebileceğinizi gösterir bir iOS uygulamasına dönüştürülebilir.

Ön koşullar

Her zaman test reklamlarıyla test etme

Uygulamalarınızı oluştururken ve test ederken, uygulamalarınızın yanı sıra üretim reklamlarıdır. 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:

/21775744923/example/rewarded

Her istek için test reklamları döndürecek şekilde özel olarak yapılandırılmıştır. kod yazma, test etme ve hata ayıklama sırasında kendi uygulamalarınızda kullanabileceğiniz ücretsiz bir araçtır. Sadece uygulamanızı yayınlamadan önce bunu kendi reklam birimi kimliğinizle değiştirdiğinizden emin olun.

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

Uygulama

Ödüllü reklamları 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österme ve ödül etkinliğini işleme

Reklam yükle

Reklamın yüklenmesi işlemi load(adUnitID:request) kullanılarak gerçekleştirilir. yöntemini GADRewardedAd sınıfında kabul edersiniz.

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  private var rewardedAd: GADRewardedAd?

  func loadRewardedAd() async {
    do {
      rewardedAd = try await GADRewardedAd.load(
        withAdUnitID: "/21775744923/example/rewarded", request: GAMRequest())
    } 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 {
  GAMRequest *request = [GAMRequest request];
  [GADRewardedAd
      loadWithAdUnitID:@"/21775744923/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ında ek veri gerektiren uygulamalar doğrulama geri çağırmaları, ödüllü reklamların özel veri özelliği. Ödüllü reklamda ayarlanan herhangi bir dize değeri nesnesi, SSV geri çağırmasının custom_data sorgu parametresine iletilir. Yanıt hayır ise özel veri değeri ayarlanırsa custom_data sorgu parametresi değeri mevcut olduğu anlamına gelir.

Aşağıdaki kod örneğinde, ödüllü reklamda özel verilerin nasıl ayarlanacağı gösterilmektedir nesnesini tanımlayın.

Swift

do {
  rewardedAd = try await GADRewardedAd.load(
    withAdUnitID: "/21775744923/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:@"/21775744923/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

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. İlgili içeriği oluşturmak için kullanılan GADFullScreenContentDelegate protokolü, reklamın şu durumlar için geri çağırmaları işler: ne zaman sunum yaptığını ve ne zaman reddedildiğini belirler. Aşağıdakiler kodu, 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() async {
    do {
      rewardedAd = try await GADRewardedAd.load(
        withAdUnitID: "/21775744923/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.")
  }
}

SwiftUI

Döndürülen reklama fullScreenContentDelegate özelliğini 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 {
  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 bir kez tekrar gösterilemez. En iyi uygulama, başka bir ödüllü reklam yüklemektir GADFullScreenContentDelegate üzerinde adDidDismissFullScreenContent: yönteminde Böylece bir sonraki ödüllü reklam, önceki reklam yayınlanır yayınlanmaz yüklenmeye başlar. kapatıldı.

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ülemek için açık seçim. Ödüllü reklamlar her zaman isteğe bağlı olarak etkinleştirilmelidir.

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ö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.
  }
}

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üntüleme modelinden ödüllü reklamı sunma:

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 bilgilerini alabilir miyim?
Evet, userDidEarnReward geri aramasından önce ödül tutarına ihtiyacınız varsa tetiklendiğinde, GADRewardedAd adReward kontrol ederek ne kadar ödeme yapacağınızı belirleyin.
İlk kullanıma hazırlama çağrısı için zaman aşımı var mı?
10 saniye sonra Google Mobile Ads SDK'sı GADInitializationCompletionHandler ile Bir uyumlulaştırma ağı henüz etkinleştirmemiş olsa bile startWithCompletionHandler: yöntemi başlatma işlemi tamamlandı.
İlklendirme geri çağırmasını aldığımda bazı uyumlulaştırma ağları hazır değilse ne olur?

Reklamın GADInitializationCompletionHandler Bir uyumlulaştırma ağı hazır olmasa bile Google Mobile Ads SDK'sı hâlâ bu ağdan reklam ister. Bir uyumlulaştırma ağı, zaman aşımı süresi dolduktan sonra başlatma işlemini tamamladığında hizmet verebilir reklam isteklerini de dahil edebilirsiniz.

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 özelliği, bağdaştırıcı, reklam isteklerine hizmet vermeye hazır değil.

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

Google Ads'de userDidEarnRewardHandler aramalarının tümü gerçekleşir adDidDismissFullScreenContent: tarihinden önce. Şurada sunulan reklamlar için: Üçüncü taraf reklam ağı uyumlulaştırma SDK'nın uygulaması, geri çağırma sırasını 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 örneklerinin tamamını tercih ettiğiniz dilde görüntüleyin:

Sonraki adımlar

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