Prerequisiti
Completa la configurazione degli eventi personalizzati.
Richiedere un annuncio interstitial
Quando l'elemento pubblicitario dell'evento personalizzato viene raggiunto nella catena di mediazione a cascata,
il metodo loadInterstitial:adConfiguration:completionHandler:
viene chiamato
il nome del corso che hai fornito durante la creazione di un'immagine
. In questo caso,
questo metodo è in SampleCustomEvent
, che quindi chiama
il metodo loadInterstitial:adConfiguration:completionHandler:
in
SampleCustomEventInterstitial
.
Per richiedere un annuncio interstitial, crea o modifica una classe che implementa
GADMediationAdapter
e loadInterstitial:adConfiguration:completionHandler:
.
Se esiste già una classe che estende GADMediationAdapter
, implementa
loadInterstitial:adConfiguration:completionHandler:
lì. Inoltre,
crea una nuova classe per implementare GADMediationInterstitialAd
.
Nel nostro esempio di evento personalizzato,
SampleCustomEvent
implementa
all'interfaccia GADMediationAdapter
e poi delega
SampleCustomEventInterstitial
.
Swift
import GoogleMobileAds class SampleCustomEvent: NSObject, GADMediationAdapter { fileprivate var interstitialAd: SampleCustomEventInterstitial? ... func loadInterstitial( for adConfiguration: GADMediationInterstitialAdConfiguration, completionHandler: @escaping GADMediationInterstitialLoadCompletionHandler ) { self.interstitialAd = SampleCustomEventInterstitial() self.interstitialAd?.loadInterstitial( for: adConfiguration, completionHandler: completionHandler) } }
Objective-C
#import "SampleCustomEvent.h" @implementation SampleCustomEvent SampleCustomEventInterstitial *sampleInterstitial; - (void)loadInterstitialForAdConfiguration: (GADMediationInterstitialAdConfiguration *)adConfiguration completionHandler: (GADMediationInterstitialLoadCompletionHandler) completionHandler { sampleInterstitial = [[SampleCustomEventInterstitial alloc] init]; [sampleInterstitial loadInterstitialForAdConfiguration:adConfiguration completionHandler:completionHandler]; }
SampleCustomEventInterstitial
è responsabile delle seguenti attività:
Caricamento dell'annuncio interstitial e chiamata di un metodo
GADMediationInterstitialAdLoadCompletionHandler
al termine del caricamento.Implementazione del protocollo
GADMediationInterstitialAd
.Ricevere e segnalare i callback degli eventi correlati agli annunci all'SDK Google Mobile Ads.
Il parametro facoltativo definito nell' UI è
incluse nella configurazione dell'annuncio.
È possibile accedere al parametro tramite
adConfiguration.credentials.settings[@"parameter"]
. Questo parametro è
di solito un identificatore di unità pubblicitaria richiesto dall'SDK della rete pubblicitaria quando
creare un'istanza di un oggetto annuncio.
Swift
import GoogleMobileAds class SampleCustomEventInterstitial: NSObject, GADMediationInterstitialAd { /// The Sample Ad Network interstitial ad. var interstitial: SampleInterstitial? /// The ad event delegate to forward ad rendering events to the Google Mobile Ads SDK. var delegate: GADMediationInterstitialAdEventDelegate? var completionHandler: GADMediationInterstitialLoadCompletionHandler? func loadInterstitial( for adConfiguration: GADMediationInterstitialAdConfiguration, completionHandler: @escaping GADMediationInterstitialLoadCompletionHandler ) { interstitial = SampleInterstitial.init( adUnitID: adConfiguration.credentials.settings["parameter"] as? String) interstitial?.delegate = self let adRequest = SampleAdRequest() adRequest.testMode = adConfiguration.isTestRequest self.completionHandler = completionHandler interstitial?.fetchAd(adRequest) } func present(from viewController: UIViewController) { if let interstitial = interstitial, interstitial.isInterstitialLoaded { interstitial.show() } } }
Objective-C
#import "SampleCustomEventInterstitial.h" @interface SampleCustomEventInterstitial () <SampleInterstitialAdDelegate, GADMediationInterstitialAd> { /// The sample interstitial ad. SampleInterstitial *_interstitialAd; /// The completion handler to call when the ad loading succeeds or fails. GADMediationInterstitialLoadCompletionHandler _loadCompletionHandler; /// The ad event delegate to forward ad rendering events to the Google Mobile /// Ads SDK. id <GADMediationInterstitialAdEventDelegate> _adEventDelegate; } @end - (void)loadInterstitialForAdConfiguration: (GADMediationInterstitialAdConfiguration *)adConfiguration completionHandler: (GADMediationInterstitialLoadCompletionHandler) completionHandler { __block atomic_flag completionHandlerCalled = ATOMIC_FLAG_INIT; __block GADMediationInterstitialLoadCompletionHandler originalCompletionHandler = [completionHandler copy]; _loadCompletionHandler = ^id<GADMediationInterstitialAdEventDelegate>( _Nullable id<GADMediationInterstitialAd> ad, NSError *_Nullable error) { // Only allow completion handler to be called once. if (atomic_flag_test_and_set(&completionHandlerCalled)) { return nil; } id<GADMediationInterstitialAdEventDelegate> 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"]; _interstitialAd = [[SampleInterstitial alloc] initWithAdUnitID:adUnit]; _interstitialAd.delegate = self; SampleAdRequest *adRequest = [[SampleAdRequest alloc] init]; adRequest.testMode = adConfiguration.isTestRequest; [_interstitialAd fetchAd:adRequest]; }
Se l'annuncio viene recuperato correttamente o se riscontra un errore,
chiama GADMediationInterstitialLoadCompletionHandler
. Nel caso in cui
successo, passa alla lezione che implementa GADMediationInterstitialAd
con un valore nil
per il parametro di errore; in caso di errore, supera
tramite l'errore che hai riscontrato.
In genere, questi metodi sono implementati all'interno dei callback
SDK di terze parti implementato
dall'adattatore. Per questo esempio, l'SDK di esempio
ha un SampleInterstitialAdDelegate
con callback pertinenti:
Swift
func interstitialDidLoad(_ interstitial: SampleInterstitial) { if let handler = completionHandler { delegate = handler(self, nil) } } func interstitial( _ interstitial: SampleInterstitial, didFailToLoadAdWith errorCode: SampleErrorCode ) { let error = SampleCustomEventUtilsSwift.SampleCustomEventErrorWithCodeAndDescription( code: SampleCustomEventErrorCodeSwift .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)interstitialDidLoad:(SampleInterstitial *)interstitial { _adEventDelegate = _loadCompletionHandler(self, nil); } - (void)interstitial:(SampleInterstitial *)interstitial 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); }
GADMediationInterstitialAd
richiede l'implementazione di un metodo present
per essere visualizzata
dell'annuncio:
Swift
func present(from viewController: UIViewController) { if let interstitial = interstitial, interstitial.isInterstitialLoaded { interstitial.show() } }
Objective-C
- (void)presentFromViewController:(UIViewController *)viewController { if ([_interstitialAd isInterstitialLoaded]) { [_interstitialAd show]; } else { NSError *error = SampleCustomEventErrorWithCodeAndDescription( SampleCustomEventErrorAdNotLoaded, [NSString stringWithFormat:@"The interstitial ad failed to present " @"because the ad was not loaded."]); [_adEventDelegate didFailToPresentWithError:error] } }
Inoltrare gli eventi di mediazione all'SDK Google Mobile Ads
Dopo aver chiamato GADMediationInterstitialLoadCompletionHandler
con un
l'oggetto delegato GADMediationInterstitialAdEventDelegate
restituito può
quindi essere utilizzato dall'adattatore per inoltrare gli eventi di presentazione dalla terza parte
SDK all'SDK Google Mobile Ads. Il corso SampleCustomEventInterstitial
implementa il protocollo SampleInterstitialAdDelegate
per inoltrare i callback
rete pubblicitaria di esempio all'SDK Google Mobile Ads.
È importante che l'evento personalizzato inoltri il maggior numero possibile di questi callback, in modo che l'app riceva questi eventi equivalenti dall'SDK Google Mobile Ads. Ecco un esempio di utilizzo delle richiamate:
Swift
func interstitialWillPresentScreen(_ interstitial: SampleInterstitial) { delegate?.willPresentFullScreenView() delegate?.reportImpression() } func interstitialWillDismissScreen(_ interstitial: SampleInterstitial) { delegate?.willDismissFullScreenView() } func interstitialDidDismissScreen(_ interstitial: SampleInterstitial) { delegate?.didDismissFullScreenView() } func interstitialWillLeaveApplication(_ interstitial: SampleInterstitial) { delegate?.reportClick() }
Objective-C
- (void)interstitialWillPresentScreen:(SampleInterstitial *)interstitial { [_adEventDelegate willPresentFullScreenView]; [_adEventDelegate reportImpression]; } - (void)interstitialWillDismissScreen:(SampleInterstitial *)interstitial { [_adEventDelegate willDismissFullScreenView]; } - (void)interstitialDidDismissScreen:(SampleInterstitial *)interstitial { [_adEventDelegate didDismissFullScreenView]; } - (void)interstitialWillLeaveApplication:(SampleInterstitial *)interstitial { [_adEventDelegate reportClick]; }
In questo modo, l'implementazione degli eventi personalizzati per gli annunci interstitial è completata. L'intero è disponibile GitHub. Puoi utilizzarlo con una rete pubblicitaria già supportata o modificarlo in visualizzare annunci interstitial con eventi personalizzati.