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 metodystartWithCompletionHandler:
, 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
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 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łujeuserDidEarnRewardHandler
przedadDidDismissFullScreenContent:
.
Przykłady w usłudze GitHub
Dalsze kroki
Dowiedz się więcej o prywatności użytkowników.