Reklamy z nagrodą

Reklamy z nagrodą to opcje, 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ą AdMobz aplikacją na iOS. Poznaj historie sukcesu klientów: studium przypadku 1, studium przypadku 2.

Wymagania wstępne

  • Pakiet SDK do reklam mobilnych Google w wersji 8.0.0 lub nowszej.
  • Przeczytaj wprowadzenie.

Zawsze używaj reklam testowych

Tworząc i testując aplikacje, korzystaj z reklam testowych, a nie z aktywnych reklam produkcyjnych. W przeciwnym razie możemy zawiesić Twoje konto.

Najłatwiejszym sposobem wczytywania reklam testowych jest użycie specjalnego identyfikatora jednostki reklamowej na potrzeby reklam z nagrodą na iOS.

ca-app-pub-3940256099942544/1712485313

Został tak skonfigurowany pod kątem zwracania reklam testowych dla każdego żądania i możesz używać ich we własnych aplikacjach podczas kodowania, testowania i debugowania. Pamiętaj, aby przed opublikowaniem aplikacji zastąpić go własnym identyfikatorem jednostki reklamowej.

Więcej informacji o tym, jak działają reklamy testowe pakietu SDK do reklam mobilnych, znajdziesz w artykule Reklamy testowe.

Wdrażanie

Aby zintegrować reklamy pełnoekranowe z nagrodą:

  • Wczytywanie reklamy
  • [Opcjonalnie] Zweryfikuj wywołania zwrotne SSV
  • Zarejestruj się na oddzwonienie
  • Wyświetlaj reklamę i obsługuj zdarzenie związane z nagrodą

Wczytywanie reklamy

Wczytywanie reklamy odbywa się przy użyciu statycznej metody loadWithAdUnitID:request:completionHandler: w klasie GADRewardedAd. Metoda wczytywania wymaga identyfikatora jednostki reklamowej, obiektu GADRequest i modułu obsługi ukończenia, które są wywoływane po udanym lub nieudanym wczytaniu reklamy. Wczytany obiekt GADRewardedAd jest podany jako parametr w procedurze zakończenia. Poniższy przykład pokazuje, jak wczytać klasę 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] Zweryfikuj wywołania zwrotne po stronie serwera (SSV)

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

Poniższy przykładowy kod pokazuje, jak skonfigurować 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 oddzwonienie

Aby otrzymywać powiadomienia o zdarzeniach związanych z prezentacją, musisz zaimplementować protokół GADFullScreenContentDelegate i przypisać go do właściwości fullScreenContentDelegate w zwróconej reklamie. Protokół GADFullScreenContentDelegate obsługuje wywołania zwrotne w przypadku udanych i nieudanych wyświetleń reklamy oraz jej odrzucenia. W tym kodzie pokazujemy, 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 to jednorazowy obiekt. Oznacza to, że reklamy z nagrodą nie można pokazać ponownie. Sprawdzoną metodą jest ładowanie kolejnej reklamy z nagrodą w metodzie adDidDismissFullScreenContent: GADFullScreenContentDelegate, aby następną reklamę z nagrodą zaczynało się zaraz po zamknięciu poprzedniej.

Wyświetlaj reklamę i obsługuj zdarzenie związane z nagrodą

Zanim wyświetlisz reklamę z nagrodą użytkownikom, musisz mu wyraźnie zezwolić na wyświetlenie treści reklamy z nagrodą w zamian za nagrodę. Reklamy z nagrodą zawsze muszą być włączone.

Gdy prezentujesz reklamę, musisz udostępnić obiekt GADUserDidEarnRewardHandler, by obsłużyć nagrodę dla użytkownika.

Ten kod pokazuje 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óły dotyczące nagrody w tym języku: GADRewardedAd?
Tak, jeśli potrzebujesz kwoty nagrody przed uruchomieniem wywołania zwrotnego userDidEarnReward, GADRewardedAd ma właściwość adReward, którą możesz sprawdzić po wczytaniu reklamy.
Czy istnieje czas oczekiwania na wywołanie inicjowania?
Po 10 sekundach pakiet SDK do reklam mobilnych Google wywołuje metodę GADInitializationCompletionHandler przekazaną do metody startWithCompletionHandler:, nawet jeśli proces zapośredniczenia jeszcze się nie zakończył.
Co zrobić, jeśli niektóre sieci zapośredniczenia nie są gotowe, gdy otrzymam wywołanie inicjujące?

Zalecamy wczytanie reklamy w obrębie znaczników GADInitializationCompletionHandler. Nawet jeśli sieć zapośredniczeń nie jest gotowa, pakiet SDK do reklam mobilnych Google wciąż żąda od niej sieci reklamowej. Jeśli więc sieć reklamowa zakończy proces inicjowania po upływie limitu czasu, nadal może obsługiwać przyszłe żądania reklam w ramach tej sesji.

Nadal możesz sprawdzać stan inicjowania wszystkich adapterów w trakcie sesji aplikacji, wywołując GADMobileAds.initializationStatus.

Jak 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ń reklamy.

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

W przypadku reklam Google wszystkie wywołania userDidEarnRewardHandler występują przed adDidDismissFullScreenContent:. W przypadku reklam wyświetlanych za pomocą zapośredniczenia pakiet SDK zewnętrznej sieci reklamowej określa kolejność wywołań zwrotnych. W przypadku pakietów SDK sieci reklamowej, które zapewniają pojedynczą metodę przekazywania informacji o nagrodach, adapter zapośredniczenia wywołuje userDidEarnRewardHandler przed adDidDismissFullScreenContent:.

Przykłady w usłudze GitHub

Dalsze kroki

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