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
- Pakiet SDK do reklam mobilnych Google w wersji 8.0.0 lub nowszej.
- Wykonaj czynności opisane w przewodniku dla początkujących.
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 metodziestartWithCompletionHandler:
, 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
obiektuGADAdapterStatus
opisuje, dlaczego adapter nie jest gotowy do obsługi żądań reklam.- Czy moduł obsługi ukończenia
userDidEarnRewardHandler
jest zawsze wywoływany przed metodą delegowaniaadDidDismissFullScreenContent:
? W przypadku reklam Google wszystkie wywołania funkcji
userDidEarnRewardHandler
występują przedadDidDismissFullScreenContent:
. 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 polecenieuserDidEarnRewardHandler
przed dyrektywąadDidDismissFullScreenContent:
.
Przykłady w GitHubie
- Przykład reklam z nagrodą: Swift | Objective-C
Dalsze kroki
Dowiedz się więcej o prywatności użytkowników.