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ą Ad Managerw aplikacji na iOS.
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:
/6499/example/rewarded
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 GAMRequest
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() {
do {
rewardedAd = try await GADRewardedAd.load(
withAdUnitID: "/6499/example/rewarded", request: GAMRequest())
} 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 {
GAMRequest *request = [GAMRequest request];
[GADRewardedAd
loadWithAdUnitID:@"/6499/example/rewarded"
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
do {
rewardedAd = try await GADRewardedAd.load(
withAdUnitID: "/6499/example/rewarded", request: GAMRequest())
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:@"/6499/example/rewarded"
request:[GAMRequest 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 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
import GoogleMobileAds
import UIKit
class ViewController: UIViewController, GADFullScreenContentDelegate {
private var rewardedAd: GADRewardedAd?
func loadRewardedAd() {
do {
rewardedAd = try await GADRewardedAd.load(
withAdUnitID: "/6499/example/rewarded", request: GAMRequest())
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 {
GAMRequest *request = [GAMRequest 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() {
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ę 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.