Pré-requisitos
Conclua a configuração de eventos personalizados.
Solicitar um anúncio intersticial
Quando o item de linha do evento personalizado é alcançado na cadeia de mediação em cascata,
o método loadInterstitial:adConfiguration:completionHandler:
é chamado no
nome da classe que você forneceu ao criar um evento
personalizado. Nesse caso,
esse método está em SampleCustomEvent
, que chama
o método loadInterstitial:adConfiguration:completionHandler:
em
SampleCustomEventInterstitial
.
Para solicitar um anúncio intersticial, crie ou modifique uma classe que implemente
GADMediationAdapter
e loadInterstitial:adConfiguration:completionHandler:
.
Se uma classe que estende GADMediationAdapter
já existir, implemente
loadInterstitial:adConfiguration:completionHandler:
nela. Além disso,
crie uma nova classe para implementar GADMediationInterstitialAd
.
No nosso exemplo de evento personalizado,
SampleCustomEvent
implementa
a interface GADMediationAdapter
e delega a
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
é responsável pelas seguintes tarefas:
Carregar o anúncio intersticial e invocar um método
GADMediationInterstitialAdLoadCompletionHandler
quando o carregamento é concluído.Implementação do protocolo
GADMediationInterstitialAd
.Receber e informar callbacks de eventos de anúncios ao SDK dos anúncios para dispositivos móveis do Google.
O parâmetro opcional definido na interface é
incluído na configuração do anúncio.
O parâmetro pode ser acessado por meio de adConfiguration.credentials.settings[@"parameter"]
. Esse parâmetro é
normalmente um identificador de unidade de anúncio que um SDK da rede de publicidade exige ao
instanciar um objeto de anúncio.
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 o anúncio for buscado ou encontrar um erro, você
vai chamar GADMediationInterstitialLoadCompletionHandler
. Em caso de
sucesso, transmita a classe que implementa GADMediationInterstitialAd
com um valor nil
para o parâmetro de erro. Em caso de falha, transmita
o erro encontrado.
Normalmente, esses métodos são implementados em callbacks do
SDK de terceiros que o adaptador implementa. Para este exemplo, o SDK de exemplo
tem uma SampleInterstitialAdDelegate
com callbacks relevantes:
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
exige a implementação de um método present
para mostrar
o anúncio:
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] } }
Encaminhar eventos de mediação para o SDK dos anúncios para dispositivos móveis do Google
Depois de chamar GADMediationInterstitialLoadCompletionHandler
com um anúncio carregado, o objeto delegado GADMediationInterstitialAdEventDelegate
retornado poderá ser usado pelo adaptador para encaminhar eventos de apresentação do SDK de terceiros ao SDK dos anúncios para dispositivos móveis do Google. A classe SampleCustomEventInterstitial
implementa o protocolo SampleInterstitialAdDelegate
para encaminhar callbacks da
rede de publicidade de exemplo para o SDK dos anúncios para dispositivos móveis do Google.
É importante que seu evento personalizado encaminhe o maior número possível de callbacks para que o app receba esses eventos equivalentes do SDK dos anúncios para dispositivos móveis do Google. Confira um exemplo de uso de callbacks:
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]; }
Isso conclui a implementação de eventos personalizados para anúncios intersticiais. O exemplo completo está disponível no GitHub. É possível usá-lo com uma rede de publicidade que já tem suporte ou modificá-lo para exibir anúncios intersticiais de evento personalizados.