Wymagania wstępne
Dokończ konfigurowanie zdarzeń niestandardowych.
Prośba o wyświetlenie reklamy z nagrodą
Gdy w łańcuchu zapośredniczenia kaskadowego zostanie osiągnięty element zamówienia zdarzenia niestandardowego, metoda loadRewarded:adConfiguration:completionHandler: zostanie wywołana w nazwie klasy podanej podczas tworzenia zdarzenia niestandardowego. W tym przypadku metoda znajduje się w klasie SampleCustomEvent
, która wywołuje metodę loadRewarded:adConfiguration:completionHandler:
w klasie SampleCustomEventRewarded
.
Aby poprosić o reklamę z nagrodą, utwórz lub zmodyfikuj klasę, która implementuje interfejsy GADMediationAdapter
i loadRewarded:adConfiguration:completionHandler:
. Jeśli klasa rozszerzająca klasę GADMediationAdapter
już istnieje, zaimplementuj w niej funkcję loadRewarded:adConfiguration:completionHandler:
. Dodatkowo utwórz nową klasę, aby zaimplementować GADMediationRewardedAd
.
W naszym przykładzie zdarzenia niestandardowego funkcja SampleCustomEvent
implementuje interfejs GADMediationAdapter
, a potem przekazuje sterowanie do funkcji SampleCustomEventRewarded
.
Swift
import GoogleMobileAds class SampleCustomEvent: NSObject, GADMediationAdapter { fileprivate var rewardedAd: SampleCustomEventRewarded? ... func loadRewarded( for adConfiguration: GADMediationRewardedAdConfiguration, completionHandler: @escaping GADMediationRewardedLoadCompletionHandler ) { self.rewardedAd = SampleCustomEventRewarded() self.rewardedAd?.loadRewarded( for: adConfiguration, completionHandler: completionHandler) } }
Objective-C
#import "SampleCustomEvent.h" @implementation SampleCustomEvent ... SampleCustomEventRewarded *sampleRewarded; - (void)loadRewardedForAdConfiguration: (GADMediationRewardedAdConfiguration *)adConfiguration completionHandler: (GADMediationRewardedLoadCompletionHandler) completionHandler { sampleRewarded = [[SampleCustomEventRewarded alloc] init]; [sampleRewarded loadRewardedForAdConfiguration:adConfiguration completionHandler:completionHandler]; }
SampleCustomEventRewarded
odpowiada za te zadania:
Wczytywanie reklamy z nagrodą.
Zaimplementuj protokół
GADMediationRewardedAd
.Odbieranie i zgłaszanie do pakietu SDK do reklam mobilnych Google wywołań zwrotnych zdarzeń reklamy.
Opcjonalny parametr zdefiniowany w interfejsie Ad Managera jest uwzględniany w konfiguracji reklamy.
Dostęp do parametru można uzyskać za pomocą adConfiguration.credentials.settings[@"parameter"]
. Ten parametr to zwykle identyfikator jednostki reklamowej, którego pakiet SDK sieci reklamowej wymaga do utworzenia obiektu reklamy.
Swift
class SampleCustomEventRewarded: NSObject, GADMediationRewardedAd { /// The Sample Ad Network rewarded ad. var nativeAd: SampleRewarded? /// The ad event delegate to forward ad rendering events to the Google Mobile Ads SDK. var delegate: GADMediationRewardedAdEventDelegate? /// Completion handler called after ad load. var completionHandler: GADMediationRewardedLoadCompletionHandler? func loadRewarded( for adConfiguration: GADMediationRewardedAdConfiguration, completionHandler: @escaping GADMediationRewardedLoadCompletionHandler ) { rewarded = SampleRewarded.init( adUnitID: adConfiguration.credentials.settings["parameter"] as? String) rewarded?.delegate = self let adRequest = SampleAdRequest() adRequest.testMode = adConfiguration.isTestRequest self.completionHandler = completionHandler rewarded?.fetchAd(adRequest) } }
Objective-C
#import "SampleCustomEventRewarded.h" @interface SampleCustomEventRewarded () <SampleRewardedAdDelegate, GADMediationRewardedAd> { /// The sample rewarded ad. SampleRewarded *_rewardedAd; /// The completion handler to call when the ad loading succeeds or fails. GADMediationRewardedLoadCompletionHandler _loadCompletionHandler; /// The ad event delegate to forward ad rendering events to the Google Mobile Ads SDK. id <GADMediationRewardedAdEventDelegate> _adEventDelegate; } @end - (void)loadRewardedAdForAdConfiguration:(GADMediationRewardedAdConfiguration *)adConfiguration completionHandler: (GADMediationRewardedLoadCompletionHandler)completionHandler { __block atomic_flag completionHandlerCalled = ATOMIC_FLAG_INIT; __block GADMediationRewardedLoadCompletionHandler originalCompletionHandler = [completionHandler copy]; _loadCompletionHandler = ^id<GADMediationRewardedAdEventDelegate>( _Nullable id<GADMediationRewardedAd> ad, NSError *_Nullable error) { // Only allow completion handler to be called once. if (atomic_flag_test_and_set(&completionHandlerCalled)) { return nil; } id<GADMediationRewardedAdEventDelegate> delegate = nil; if (originalCompletionHandler) { // Call original handler and hold on to its return value. delegate = originalCompletionHandler(ad, error); } // Release reference to handler. Objects retained by the handler will also be released. originalCompletionHandler = nil; return delegate; }; NSString *adUnit = adConfiguration.credentials.settings[@"parameter"]; _rewardedAd = [[SampleRewardedAd alloc] initWithAdUnitID:adUnit]; _rewardedAd.delegate = self; SampleAdRequest *adRequest = [[SampleAdRequest alloc] init]; adRequest.testMode = adConfiguration.isTestRequest; [_rewardedAd fetchAd:adRequest]; }
Bez względu na to, czy udało się pobrać reklamę, czy wystąpił błąd, wywołasz funkcję GADMediationRewardedLoadCompletionHandler
. W przypadku powodzenia prześlij klasę implementującą GADMediationRewardedAd
z wartością nil
dla parametru błędu. W przypadku niepowodzenia prześlij wygenerowany błąd.
Zwykle te metody są implementowane w ramach wywołań zwrotnych z zewnętrznego pakietu SDK, który jest używany przez adapter. W tym przykładzie pakiet SDK Sample ma element SampleRewardedAdDelegate
z odpowiednimi wywołaniami zwrotnymi:
Swift
func rewardedDidLoad(_ interstitial: SampleRewarded) { if let handler = completionHandler { delegate = handler(self, nil) } } func rewarded( rewarded: SampleRewarded, didFailToLoadAdWith errorCode: SampleErrorCode ) { let error = SampleCustomEventUtils.SampleCustomEventErrorWithCodeAndDescription( code: SampleCustomEventErrorCode .SampleCustomEventErrorAdLoadFailureCallback, description: "Sample SDK returned an ad load failure callback with error code: \(errorCode)" ) if let handler = completionHandler { delegate = handler(nil, error) } }
Objective-C
- (void)rewardedDidLoad:(SampleRewarded *)rewarded { _adEventDelegate = _loadCompletionHandler(self, nil); } - (void)rewarded:(SampleInterstitial *)rewarded didFailToLoadAdWithErrorCode:(SampleErrorCode)errorCode { NSError *error = SampleCustomEventErrorWithCodeAndDescription( SampleCustomEventErrorAdLoadFailureCallback, [NSString stringWithFormat:@"Sample SDK returned an ad load failure " @"callback with error code: %@", errorCode]); _adEventDelegate = _loadCompletionHandler(nil, error); }
GADMediationrewardedAd
wymaga zaimplementowania metody present(viewController:)
, aby wyświetlić reklamę:
Swift
func present(from viewController: UIViewController) { if let rewarded = rewarded, rewarded.isRewardedLoaded { rewarded.show() } }
Objective-C
- (void)presentFromViewController:(UIViewController *)viewController { if ([_rewardedAd isRewardedLoaded]) { [_rewardedAd show]; } else { NSError *error = SampleCustomEventErrorWithCodeAndDescription( SampleCustomEventErrorAdNotLoaded, [NSString stringWithFormat: @"The rewarded ad failed to present because the ad was not loaded."]); [_adEventDelegate didFailToPresentWithError:error] } }
Przekazywanie zdarzeń zapośredniczenia do pakietu SDK do reklam mobilnych Google
Po wywołaniu metody GADMediationRewardedLoadCompletionHandler
z załadowaną reklamą adapter może użyć zwróconego obiektu GADMediationRewardedAdEventDelegate
, aby przekazywać zdarzenia związane z prezentacją z zewnętrznego pakietu SDK do pakietu SDK do reklam mobilnych Google. Klasa SampleCustomEventRewarded
implementuje protokół SampleRewardedAdDelegate
, aby przekazywać wywołania zwrotne z próbnej sieci reklamowej do pakietu SDK do reklam mobilnych Google.
Ważne jest, aby Twoje zdarzenie niestandardowe przekazywało jak najwięcej wywołań zwrotnych, aby aplikacja otrzymywała te zdarzenia od pakietu SDK do reklam mobilnych Google. Oto przykład użycia wywołań zwrotnych:
Swift
func rewardedAdDidPresent(_ rewarded: SampleRewardedAd) { delegate?.willPresentFullScreenVideo() delegate?.didStartVideo() } func rewardedAdUserDidEarnReward(_ rewarded: SampleRewardedAd) { GADAdReward aReward = GADAdReward("", rewarded) delegate.didRewardUser() }
Objective-C
- (void)rewardedAdDidPresent:(SampleRewardedAd *)rewardedAd { [_adEventDelegate willPresentFullScreenView]; [_adEventDelegate didStartVideo]; } - (void)rewardedAd:(nonnull SampleRewardedAd *)rewardedAd userDidEarnReward:(NSUInteger)reward { GADAdReward *aReward = [[GADAdReward alloc] initWithRewardType:@"" rewardAmount:[NSDecimalNumber numberWithUnsignedInt:reward]]; [_adEventDelegate didRewardUserWithReward]; }
To kończy implementację zdarzeń niestandardowych w przypadku reklam z nagrodą. Pełny przykład jest dostępny na GitHub. Możesz go używać z siecią reklamową, która jest już obsługiwana, lub zmodyfikować go, aby wyświetlać reklamy z nagrodą oparte na zdarzeniach niestandardowych.