Reklamy z nagrodą

Reklamy z nagrodą to reklamy, z którymi użytkownicy mogą wchodzić w interakcje w zamian za nagrody w aplikacji. Z tego przewodnika dowiesz się, jak zintegrować reklamy z nagrodą AdMobw aplikacji na iOS. Przeczytaj kilka historii sukcesu klientów: studium przypadku 1, studium przypadku 2.

Wymagania wstępne

Zawsze korzystaj z reklam testowych

Podczas tworzenia i testowania aplikacji używaj reklam testowych, a nie aktywnych reklam produkcyjnych. Jeśli tego nie zrobisz, Twoje konto może zostać zawieszone.

Najprostszym sposobem na wczytanie reklam testowych jest użycie naszego dedykowanego identyfikatora testowej jednostki reklamowej dla reklam z nagrodą na iOS:

ca-app-pub-3940256099942544/1712485313

Został on specjalnie skonfigurowany tak, aby zwracał reklamy testowe w odpowiedzi na każde żądanie. Możesz go używać we własnych aplikacjach podczas kodowania, testowania i debugowania. Pamiętaj, by przed opublikowaniem aplikacji zastąpić go własnym identyfikatorem jednostki reklamowej.

Więcej informacji o działaniu reklam testowych z pakietu SDK do reklam mobilnych znajdziesz w artykule Reklamy testowe.

Implementacja

Aby zintegrować reklamy pełnoekranowe z nagrodą, musisz wykonać te podstawowe czynności:

  • Wczytaj reklamę
  • [Opcjonalnie] Weryfikacja wywołań zwrotnych SSV
  • Zarejestruj się na wywołania zwrotne
  • wyświetlanie reklamy i obsługa zdarzenia związanego z nagrodą,

Wczytaj reklamę

Wczytywanie reklamy odbywa się za pomocą statycznej metody loadWithAdUnitID:request:completionHandler: w klasie GADRewardedAd. Metoda wczytywania wymaga identyfikatora jednostki reklamowej, obiektu GADRequest oraz modułu obsługi zakończenia, który jest wywoływany w przypadku powodzenia lub niepowodzenia wczytywania reklamy. Wczytywany obiekt GADRewardedAd jest podany jako parametr w module obsługi ukończenia. Poniższy przykład pokazuje, jak wczytać GADRewardedAd w klasie ViewController.

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  private var rewardedAd: GADRewardedAd?

  func loadRewardedAd() {
    let request = GADRequest()
    GADRewardedAd.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313",
                       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 {
  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.");
      }];
}

[Opcjonalnie] Sprawdzanie wywołań zwrotnych weryfikacji po stronie serwera (SSV)

Aplikacje, które wymagają dodatkowych danych w wywołaniach zwrotnych weryfikacji po stronie serwera, powinny korzystać z funkcji danych niestandardowych reklam z nagrodą. Wartość ciągu znaków ustawiona w obiekcie reklamy z nagrodą jest przekazywana do parametru zapytania custom_data wywołania zwrotnego SSV. Jeśli nie ustawisz żadnej wartości danych niestandardowych, wartość parametru zapytania custom_data nie będzie podana w wywołaniu zwrotnym SSV.

Poniższy przykładowy kod pokazuje, jak ustawić dane niestandardowe w obiekcie reklamy z nagrodą przed wysłaniem żądania reklamy.

Swift

GADRewardedInterstitialAd.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313",
                       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

GADRequest *request = [GADRequest request];
[GADRewardedInterstitialAd
     loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
              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;
    }];

Zarejestruj się na wywołania zwrotne

Aby otrzymywać powiadomienia o zdarzeniach związanych z prezentacją, musisz wdrożyć protokół GADFullScreenContentDelegate i przypisać go do właściwości fullScreenContentDelegate zwróconej reklamy. Protokół GADFullScreenContentDelegate obsługuje wywołania zwrotne w przypadku pomyślnego lub nieudanego przedstawienia reklamy oraz zamknięcia. Poniższy kod pokazuje, jak wdrożyć protokół i przypisać go do reklamy:

Swift

class ViewController: UIViewController, GADFullScreenContentDelegate {

  private var rewardedAd: GADRewardedAd?

  func loadRewardedAd() {
    let request = GADRequest()
    GADRewarded.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313",
                     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 {
  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 jest obiektem jednorazowym. Oznacza to, że po wyświetleniu reklamy z nagrodą nie można jej wyświetlić ponownie. Sprawdzoną metodą jest wczytanie kolejnej reklamy z nagrodą za pomocą metody adDidDismissFullScreenContent: w dniu GADFullScreenContentDelegate, tak aby następna reklama z nagrodą zaczęła ładować się natychmiast po zamknięciu poprzedniej.

wyświetlanie reklamy i obsługa zdarzenia związanego z nagrodą,

Przed wyświetleniem reklamy z nagrodą musisz dać mu możliwość wyraźnego wyboru treści reklamy z nagrodą w zamian za nagrodę. Reklamy z nagrodą muszą zawsze być włączone.

Podczas wyświetlania reklamy musisz udostępnić obiekt GADUserDidEarnRewardHandler, który obsługuje nagrodę dla użytkownika.

Poniższy kod przedstawia najlepszą metodę wyświetlania reklamy z nagrodą.

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

Najczęstsze pytania

Czy mogę uzyskać szczegółowe informacje o nagrodzie za GADRewardedAd?
Tak. Jeśli potrzebujesz nagrody przed uruchomieniem wywołania zwrotnego userDidEarnReward, GADRewardedAd ma właściwość adReward, którą możesz sprawdzić, aby zweryfikować kwotę nagrody po wczytaniu reklamy.
Czy istnieje czas oczekiwania na wywołanie inicjowania?
Po 10 sekundach pakiet SDK do reklam mobilnych Google wywołuje metodę GADInitializationCompletionHandler podaną w metodzie startWithCompletionHandler:, nawet jeśli sieć zapośredniczeń nadal nie ukończyła inicjowania.
Co zrobić, jeśli niektóre sieci zapośredniczenia nie są gotowe, gdy otrzymam wywołanie zwrotne inicjowania?

Zalecamy wczytywanie reklamy w elemencie GADInitializationCompletionHandler. Nawet jeśli sieć zapośredniczeń nie jest gotowa, pakiet SDK do reklam mobilnych Google wciąż prosi ją o wyświetlenie reklamy. Jeśli więc sieć zapośredniczenia zakończy inicjowanie po upływie limitu czasu, nadal może obsługiwać przyszłe żądania reklamy w tej sesji.

Możesz nadal sondować stan inicjowania wszystkich adapterów podczas sesji aplikacji, wywołując GADMobileAds.initializationStatus.

Jak mogę sprawdzić, dlaczego dana sieć zapośredniczenia nie jest gotowa?

Właściwość description obiektu GADAdapterStatus opisuje, dlaczego adapter nie jest gotowy do obsługi żądań reklam.

Czy moduł obsługi ukończenia userDidEarnRewardHandler jest zawsze wywoływany przed metodą delegowania adDidDismissFullScreenContent:?

W przypadku reklam Google wszystkie wywołania funkcji userDidEarnRewardHandler występują przed adDidDismissFullScreenContent:. W przypadku reklam wyświetlanych za pomocą zapośredniczenia kolejność wywołań zwrotnych zależy od implementacji pakietu SDK zewnętrznej sieci reklamowej. W przypadku pakietów SDK sieci reklamowych, które udostępniają metodę pojedynczego przekazywania dostępu z informacjami o nagrodzie, adapter zapośredniczenia wywołuje polecenie userDidEarnRewardHandler przed dyrektywą adDidDismissFullScreenContent:.

Przykłady w GitHubie

Dalsze kroki

Dowiedz się więcej o prywatności użytkowników.