Reklamy z nagrodą to reklamy, z którymi użytkownicy mogą wchodzić w interakcję w zamian do nagród w aplikacji. Ten przewodnik pokazuje, jak zintegrować reklamy z nagrodą z Ad Managera. w aplikację na iOS.
Wymagania wstępne
- Pakiet SDK do reklam mobilnych Google w wersji 8.0.0 lub nowszej.
- Zapoznaj się z przewodnikiem dla początkujących.
Zawsze korzystaj z reklam testowych
Podczas tworzenia i testowania aplikacji używaj reklam testowych, a nie reklam, aktywne reklamy. Jeśli tego nie zrobisz, możemy zawiesić Twoje konto.
Najłatwiejszym sposobem wczytywania reklam testowych jest użycie naszego dedykowanego testowego identyfikatora jednostki reklamowej do systemu iOS reklamy z nagrodą:
/21775744923/example/rewarded
Został on specjalnie skonfigurowany tak, aby wyświetlać reklamy testowe w odpowiedzi na każde żądanie. do wykorzystania we własnych aplikacjach przy kodowaniu, testowaniu i debugowaniu. Po prostu zrób zastąp go identyfikatorem jednostki reklamowej przed opublikowaniem aplikacji.
Więcej informacji o działaniu reklam testowych w pakiecie SDK do reklam mobilnych znajdziesz w artykule Testowanie Reklamy.
Implementacja
Oto główne etapy integracji reklam z nagrodą:
- Wczytywanie reklamy
- [Opcjonalnie] Zweryfikuj wywołania zwrotne SSV
- Zarejestruj się na wywołania zwrotne
- Wyświetl reklamę i obsługuje zdarzenie nagrody
Wczytywanie reklamy
Ładowanie reklamy odbywa się za pomocą metody load(adUnitID:request)
w klasie GADRewardedAd
.
Swift
import GoogleMobileAds
import UIKit
class ViewController: UIViewController {
private var rewardedAd: GADRewardedAd?
func loadRewardedAd() async {
do {
rewardedAd = try await GADRewardedAd.load(
withAdUnitID: "/21775744923/example/rewarded", request: GAMRequest())
} catch {
print("Rewarded ad failed to load with error: \(error.localizedDescription)")
}
}
}
SwiftUI
import GoogleMobileAds
class RewardedViewModel: NSObject, ObservableObject, GADFullScreenContentDelegate {
@Published var coins = 0
private var rewardedAd: GADRewardedAd?
func loadAd() async {
do {
rewardedAd = try await GADRewardedAd.load(
withAdUnitID: "ca-app-pub-3940256099942544/1712485313", request: GADRequest())
rewardedAd?.fullScreenContentDelegate = self
} catch {
print("Failed to load rewarded ad 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:@"/21775744923/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] Weryfikacja wywołań zwrotnych weryfikacji po stronie serwera (SSV)
Aplikacje, które wymagają dodatkowych danych po stronie serwera
weryfikacji powinny używać funkcji
funkcji danych niestandardowych w przypadku reklam z nagrodą. Dowolny ciąg znaków ustawiony w reklamie z nagrodą
jest przekazywany do parametru zapytania custom_data
w wywołaniu zwrotnym SSV. Jeśli nie ustawisz wartości danych niestandardowych, parametr zapytania custom_data
nie będzie obecny w wywołaniu zwrotnym SSV.
Przeanalizuj przykładowy kod poniżej pokazuje, jak skonfigurować dane niestandardowe w reklamie z nagrodą przed wysłaniem żądania reklamy.
Swift
do {
rewardedAd = try await GADRewardedAd.load(
withAdUnitID: "/21775744923/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:@"/21775744923/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 wydarzeniach prezentacji, musisz zaimplementować
protokół GADFullScreenContentDelegate
i przypisz go do
właściwość fullScreenContentDelegate
zwróconej reklamy.
Protokół GADFullScreenContentDelegate
obsługuje wywołania zwrotne, gdy reklama
jest wyświetlany prawidłowo lub nieskutecznie oraz kiedy jest zamykany. Poniżej
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() async {
do {
rewardedAd = try await GADRewardedAd.load(
withAdUnitID: "/21775744923/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.")
}
}
SwiftUI
Przypisz właściwość fullScreenContentDelegate
do zwróconej reklamy:
rewardedAd?.fullScreenContentDelegate = self
Wdrożenie protokołu:
func adDidRecordImpression(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func adDidRecordClick(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func ad(
_ ad: GADFullScreenPresentingAd,
didFailToPresentFullScreenContentWithError error: Error
) {
print("\(#function) called")
}
func adWillPresentFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func adWillDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
}
func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) {
print("\(#function) called")
// Clear the rewarded ad.
rewardedAd = nil
}
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
to obiekt jednorazowy. Oznacza to, że gdy reklama z nagrodą zostanie
nie można pokazać ponownie. Sprawdzoną metodą jest wczytanie kolejnej reklamy z nagrodą
w metodzie adDidDismissFullScreenContent:
w GADFullScreenContentDelegate
aby następna reklama z nagrodą zaczęła się wczytywać, gdy tylko poprzednia
odrzucono.
Wyświetlanie reklamy i obsługa zdarzenia nagrody
Przed wyświetleniem użytkownikom reklam z nagrodą musisz przedstawić im wyraźną decyzję o wyświetleniu treści reklamy z nagrodą w zamian za nagrodę. Reklama z nagrodą reklamy muszą być zawsze opcjonalne.
Gdy wyświetlasz reklamę, musisz podać obiekt GADUserDidEarnRewardHandler
aby obsługiwać 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.
}
}
SwiftUI
Wykrywaj zdarzenia interfejsu w widoku, aby określić, kiedy wyświetlić reklamę.
var body: some View {
VStack(spacing: 20) {
Button("Watch video for additional 10 coins") {
viewModel.showAd()
showWatchVideoButton = false
}
Zaprezentuj reklamę z nagrodą na podstawie modelu wyświetlenia:
func showAd() {
guard let rewardedAd = rewardedAd else {
return print("Ad wasn't ready.")
}
rewardedAd.present(fromRootViewController: nil) {
let reward = rewardedAd.adReward
print("Reward amount: \(reward.amount)")
self.addCoins(reward.amount.intValue)
}
}
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ę poznać szczegóły nagrody w postaci aplikacji
GADRewardedAd
? - Tak, jeśli potrzebujesz nagrody o wartości przed wywołaniem zwrotnym (
userDidEarnReward
) jest uruchamiany,GADRewardedAd
maadReward
którą możesz sprawdzić, aby zweryfikować kwotę nagrody po wczytaniu reklamy. - Czy istnieje limit czasu oczekiwania na wywołanie inicjujące?
- Po 10 sekundach pakiet SDK do reklam mobilnych Google wywołuje komponent
GADInitializationCompletionHandler
przekazany dostartWithCompletionHandler:
, nawet jeśli sieć zapośredniczenia nie ukończono inicjalizację. - Co zrobić, jeśli niektóre sieci zapośredniczenia nie są gotowe, gdy otrzymam wywołanie zwrotne inicjujące?
Zalecamy wczytywanie reklamy wewnątrz
GADInitializationCompletionHandler
Nawet jeśli sieć zapośredniczeń nie jest gotowa, pakiet SDK do reklam mobilnych Google nadal wysyła do tej sieci żądanie reklamy. Jeśli więc sieć zapośredniczenia zakończy inicjowanie po upływie czasu oczekiwania, może nadal działać. żądań reklamy w tej sesji.Możesz nadal przeprowadzać sondowanie stanu inicjowania wszystkich adapterów przez cały czas w sesji aplikacji po wywołaniu usługi
GADMobileAds.initializationStatus
.- Jak sprawdzić, dlaczego dana sieć zapośredniczenia nie jest gotowa?
Właściwość
description
obiektuGADAdapterStatus
wyjaśnia, dlaczego Adapter nie jest gotowy do obsługi żądań reklamy.- Czy moduł obsługi uzupełniania
userDidEarnRewardHandler
zawsze jest wywoływany przed metodą przekazywaniaadDidDismissFullScreenContent:
? W przypadku Google Ads wszystkie
userDidEarnRewardHandler
połączenia są wykonywane przedadDidDismissFullScreenContent:
. W przypadku reklam wyświetlanych przez zapośredniczenie, zewnętrzna sieć reklamowa, Kolejność wywołań zwrotnych zależy od implementacji pakietu SDK. W przypadku pakietów SDK sieci reklamowych, udostępnia jedną metodę przekazywania informacji z informacjami o nagrodzie, adapter zapośredniczenia wywołuje funkcjęuserDidEarnRewardHandler
przedadDidDismissFullScreenContent:
.
Przykłady w GitHub
Zobacz przykłady pełnych reklam z nagrodą w wybranym języku:
Dalsze kroki
Dowiedz się więcej o prywatności użytkowników.