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ą AdMob z aplikacją na iOS. Poznaj historie 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 produkcyjnych reklam. Jeśli tego nie zrobisz, możemy zawiesić Twoje konto.

Najłatwiejszym sposobem wczytania reklam testowych jest użycie naszego dedykowanego testowego identyfikatora jednostki reklamowej przeznaczonej do reklam z nagrodą w iOS:

ca-app-pub-3940256099942544/1712485313

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

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

Implementacja

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

  • Wczytywanie reklamy
  • [Opcjonalnie] Zweryfikuj wywołania zwrotne SSV
  • Zarejestruj się na wywołania zwrotne
  • Wyświetl reklamę i obsługuje zdarzenie nagrody

Wczytywanie reklamy

Reklamę można wczytać za pomocą statycznej metody loadWithAdUnitID:request:completionHandler: w klasie GADRewardedAd. Metoda wczytywania wymaga identyfikatora jednostki reklamowej, obiektu GADRequest i modułu obsługi ukończenia, który jest wywoływany w przypadku udanego lub nieudanego wczytywania reklamy. Wczytany obiekt GADRewardedAd jest podawany jako parametr w module obsługi uzupełniania. Poniższy przykład pokazuje, jak wczytać obiekt GADRewardedAd w klasie ViewController.

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController {

  private var rewardedAd: GADRewardedAd?

  func loadRewardedAd() {
    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)")
    }
  }
}

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] Weryfikacja wywołań zwrotnych weryfikacji po stronie serwera (SSV)

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

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

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

Zarejestruj się na wywołania zwrotne

Aby otrzymywać powiadomienia o zdarzeniach prezentacji, zaimplementuj protokół GADFullScreenContentDelegate i przypisz go do właściwości fullScreenContentDelegate zwróconej reklamy. Protokół GADFullScreenContentDelegate obsługuje wywołania zwrotne, gdy reklama wyświetla się prawidłowo lub nie udało się wyświetlić, i kiedy ją zamyka. Ten kod pokazuje, jak wdrożyć protokół i przypisać go do reklamy:

Swift

import GoogleMobileAds
import UIKit

class ViewController: UIViewController, GADFullScreenContentDelegate {

  private var rewardedAd: GADRewardedAd?

  func loadRewardedAd() {
    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.")
  }
}

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 to obiekt jednorazowy. Oznacza to, że po wyświetleniu reklamy z nagrodą nie można jej wyświetlić ponownie. Zalecamy wczytanie kolejnej reklamy z nagrodą w metodzie adDidDismissFullScreenContent: w dniu GADFullScreenContentDelegate, tak aby następna reklama z nagrodą zaczęła się wczytywać zaraz po zamknięciu poprzedniej.

Wyświetl reklamę i obsługuje zdarzenie nagrody

Przed wyświetleniem użytkownikom reklamy z nagrodą musisz dać im wyraźną zgodę na obejrzenie jej treści w zamian za nagrodę. Reklamy z nagrodą muszą być zawsze opcjonalne.

Gdy wyświetlasz reklamę, musisz podać obiekt GADUserDidEarnRewardHandler do obsługi nagrody dla użytkownika.

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

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

Najczęstsze pytania

Czy mogę poznać szczegóły nagrody w postaci aplikacji GADRewardedAd?
Tak. Jeśli potrzebujesz kwoty nagrody przed uruchomieniem wywołania zwrotnego userDidEarnReward, GADRewardedAd ma właściwość adReward, którą możesz sprawdzić, aby sprawdzić kwotę nagrody po wczytaniu reklamy.
Czy istnieje limit czasu oczekiwania na wywołanie inicjujące?
Po 10 sekundach pakiet SDK do reklam mobilnych Google wywołuje metodę GADInitializationCompletionHandler przesłaną do metody startWithCompletionHandler:, nawet jeśli sieć zapośredniczenia jeszcze nie zakończyła inicjowania.
Co zrobić, jeśli niektóre sieci zapośredniczenia nie są gotowe, gdy otrzymam wywołanie zwrotne inicjujące?

Zalecamy wczytanie reklamy wewnątrz GADInitializationCompletionHandler. Nawet jeśli sieć zapośredniczeń nie jest gotowa, pakiet SDK do reklam mobilnych Google wysyła do niej żądanie reklamy. Jeśli więc sieć zapośredniczenia zakończy się inicjowaniem po upływie czasu oczekiwania, może nadal obsługiwać przyszłe żądania reklamy w tej sesji.

Możesz nadal przeprowadzać sondowanie stanu inicjowania wszystkich adapterów w trakcie sesji aplikacji, wywołując funkcję GADMobileAds.initializationStatus.

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

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

Czy moduł obsługi uzupełniania userDidEarnRewardHandler zawsze jest wywoływany przed metodą przekazywania adDidDismissFullScreenContent:?

W przypadku Google Ads wszystkie wywołania userDidEarnRewardHandler mają miejsce przed adDidDismissFullScreenContent:. Kolejność wywołań zwrotnych w przypadku reklam wyświetlanych w ramach zapośredniczenia określa implementacja pakietu SDK zewnętrznej sieci reklamowej. W przypadku pakietów SDK sieci reklamowych, które udostępniają informacje o nagrodzie w pojedynczej metodzie przekazywania, adapter zapośredniczenia wywołuje userDidEarnRewardHandler przed adDidDismissFullScreenContent:.

Przykłady w GitHubie

Dalsze kroki

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