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ą z aplikacji AdMobdo aplikacji na iOS. Przeczytaj 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.
- Wykonaj czynności opisane w przewodniku dla początkujących.
Zawsze testuj z reklamami testowymi
Tworząc i testując aplikacje, upewnij się, że używasz reklam testowych zamiast produkcyjnych. Jeśli tego nie zrobisz, Twoje konto może zostać zawieszone.
Najłatwiejszym sposobem wczytywania reklam testowych jest użycie specjalnego identyfikatora jednostki reklamowej na potrzeby reklam z nagrodą.
ca-app-pub-3940256099942544/1712485313
Został on specjalnie skonfigurowany pod kątem zwracania reklam testowych dla każdego żądania. Możesz używać go 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 działaniu reklam testowych pakietu SDK do reklam mobilnych znajdziesz w artykule Testowanie reklam.
Wdrażanie
Główne etapy integracji reklam pełnoekranowych z nagrodą:
- Wczytywanie reklamy
- [Opcjonalnie] Zweryfikuj wywołania zwrotne SSV
- Rejestrowanie połączeń zwrotnych
- wyświetlać reklamę i obsługiwać zdarzenie związane z nagrodą;
Wczytywanie reklamy
Reklama jest ładowana za pomocą statycznej metody loadWithAdUnitID:request:completionHandler:
w klasie GADRewardedAd
. Aby wczytać metodę, potrzebny jest identyfikator jednostki reklamowej, obiekt GADRequest
i moduł obsługi ukończenia, który jest wywoływany, gdy reklama się powiedzie. Wczytany obiekt GADRewardedAd
jest podany jako parametr w procedurze zakoń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] Weryfikowanie wywołań zwrotnych po stronie serwera (SSV)
Aplikacje, które wymagają dodatkowych danych w wywołaniach weryfikacji po stronie serwera, powinny używać funkcji niestandardowych danych z reklamami 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 żadnej niestandardowej wartości danych, wartość parametru zapytania custom_data
nie będzie podana w wywołaniu zwrotnym SSV.
Poniższy przykładowy kod pokazuje, jak skonfigurować dane niestandardowe w obiekcie reklamy z nagrodą, zanim prześlesz żądanie 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; }];
Rejestrowanie połączeń zwrotnych
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 udanego lub nieudanego wyświetlenia reklamy oraz jej odrzucenia. Ten 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
to obiekt jednorazowy. Oznacza to, że po wyświetleniu reklamy z nagrodą nie można jej ponownie wyświetlić. Sprawdzoną metodą jest wczytanie innej reklamy z nagrodą w metodzie adDidDismissFullScreenContent:
w aplikacji GADFullScreenContentDelegate
, aby następna reklama zaczęła się wyświetlać zaraz po odrzuceniu poprzedniej.
wyświetlać reklamę i obsługiwać zdarzenie związane z nagrodą;
Przed wyświetleniem użytkownikom reklamy z nagrodą musisz umożliwić mu wyraźne wyświetlenie treści reklamy z nagrodą w zamian za nagrodę. Reklamy z nagrodą zawsze muszą być zaakceptowane.
Gdy prezentujesz reklamę, musisz przekazać obiekt GADUserDidEarnRewardHandler
, by obsłużyć nagrodę dla użytkownika.
Ten 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 na
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
podaną w metodziestartWithCompletionHandler:
, nawet gdy sieć zapośredniczeń nie zakończy inicjowania. - Co w sytuacji, gdy niektóre sieci zapośredniczenia nie są gotowe do pobrania, 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 nadal będzie wysyłać do niej żądanie reklamy. Jeśli więc sieć zapośredniczenia kończy proces po upływie limitu czasu, może nadal obsługiwać kolejne żądania reklamy w ramach tej sesji.Możesz kontynuować ankietowanie stanu zainicjowania 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
obiektuGADAdapterStatus
opisuje, dlaczego adapter nie jest gotowy do obsługi żądań reklamy.- Czy moduł obsługi ukończenia
userDidEarnRewardHandler
jest zawsze wywoływany przed metodą przekazywaniaadDidDismissFullScreenContent:
? W przypadku reklam Google wszystkie wywołania
userDidEarnRewardHandler
występują przedadDidDismissFullScreenContent:
. W przypadku reklam wyświetlanych przy użyciu zapośredniczenia pakiet SDK zewnętrznej sieci reklamowej określa kolejność wywołań zwrotnych. W przypadku pakietów SDK sieci reklamowych, które dostarczają jedną metodę przekazywania dostępu z informacjami o nagrodach, adapter zapośredniczenia wywołuje metodęuserDidEarnRewardHandler
przedadDidDismissFullScreenContent:
.