Pré-requisitos
Conclua a configuração de eventos personalizados.
Solicitar um anúncio de banner
Quando o item de linha do evento personalizado é alcançado na cadeia de mediação em cascata,
o método loadBanner: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 loadBanner:adConfiguration:completionHandler:
em
SampleCustomEventBanner
.
Para solicitar um anúncio de banner, crie ou modifique uma classe que implemente
GADMediationAdapter
e loadBanner:adConfiguration:completionHandler:
. Se uma
classe que estende GADMediationAdapter
já existir, implemente
loadBanner:adConfiguration:completionHandler:
nela. Além disso, crie uma
nova classe para implementar GADMediationBannerAd
.
Em nosso exemplo de evento personalizado,
SampleCustomEvent
implementa
a interface GADMediationAdapter
e delega para
SampleCustomEventBanner
.
Swift
import GoogleMobileAds class SampleCustomEvent: NSObject, GADMediationAdapter { fileprivate var bannerAd: SampleCustomEventBanner? ... func loadBanner( for adConfiguration: GADMediationBannerAdConfiguration, completionHandler: @escaping GADMediationBannerLoadCompletionHandler ) { self.bannerAd = SampleCustomEventBanner() self.bannerAd?.loadBanner( for: adConfiguration, completionHandler: completionHandler) } }
Objective-C
#import "SampleCustomEvent.h" @implementation SampleCustomEvent ... SampleCustomEventBanner *sampleBanner; - (void)loadBannerForAdConfiguration: (GADMediationBannerAdConfiguration *)adConfiguration completionHandler:(GADMediationBannerLoadCompletionHandler) completionHandler { sampleBanner = [[SampleCustomEventBanner alloc] init]; [sampleBanner loadBannerForAdConfiguration:adConfiguration completionHandler:completionHandler]; }
SampleCustomEventBanner
é responsável pelas seguintes tarefas:
Carregar o anúncio de banner e invocar um método
GADMediationBannerLoadCompletionHandler
após o término do carregamento.Implementação do protocolo
GADMediationBannerAd
.Receber e informar callbacks de eventos de anúncios para o SDK dos anúncios para dispositivos móveis do Google
O parâmetro opcional definido na interface do Ad Manager é
incluído na configuração do anúncio.
O parâmetro pode ser acessado usando
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
class SampleCustomEventBanner: NSObject, GADMediationBannerAd { /// The Sample Ad Network banner ad. var bannerAd: SampleBanner? /// The ad event delegate to forward ad rendering events to the Google Mobile Ads SDK. var delegate: GADMediationBannerAdEventDelegate? /// Completion handler called after ad load var completionHandler: GADMediationBannerLoadCompletionHandler? func loadBanner( for adConfiguration: GADMediationBannerAdConfiguration, completionHandler: @escaping GADMediationBannerLoadCompletionHandler ) { // Create the bannerView with the appropriate size. let adSize = adConfiguration.adSize bannerAd = SampleBanner( frame: CGRect(x: 0, y: 0, width: adSize.size.width, height: adSize.size.height)) bannerAd?.delegate = self bannerAd?.adUnit = adConfiguration.credentials.settings["parameter"] as? String let adRequest = SampleAdRequest() adRequest.testMode = adConfiguration.isTestRequest self.completionHandler = completionHandler bannerAd?.fetchAd(adRequest) } }
Objective-C
#import "SampleCustomEventBanner.h" @interface SampleCustomEventBanner () <SampleBannerAdDelegate, GADMediationBannerAd> { /// The sample banner ad. SampleBanner *_bannerAd; /// The completion handler to call when the ad loading succeeds or fails. GADMediationBannerLoadCompletionHandler _loadCompletionHandler; /// The ad event delegate to forward ad rendering events to the Google Mobile /// Ads SDK. id <GADMediationBannerAdEventDelegate> _adEventDelegate; } @end @implementation SampleCustomEventBanner - (void)loadBannerForAdConfiguration: (GADMediationBannerAdConfiguration *)adConfiguration completionHandler:(GADMediationBannerLoadCompletionHandler) completionHandler { __block atomic_flag completionHandlerCalled = ATOMIC_FLAG_INIT; __block GADMediationBannerLoadCompletionHandler originalCompletionHandler = [completionHandler copy]; _loadCompletionHandler = ^id<GADMediationBannerAdEventDelegate>( _Nullable id<GADMediationBannerAd> ad, NSError *_Nullable error) { // Only allow completion handler to be called once. if (atomic_flag_test_and_set(&completionHandlerCalled)) { return nil; } id<GADMediationBannerAdEventDelegate> 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"]; _bannerAd = [[SampleBanner alloc] initWithFrame:CGRectMake(0, 0, adConfiguration.adSize.size.width, adConfiguration.adSize.size.height)]; _bannerAd.adUnit = adUnit; _bannerAd.delegate = self; SampleAdRequest *adRequest = [[SampleAdRequest alloc] init]; adRequest.testMode = adConfiguration.isTestRequest; [_bannerAd fetchAd:adRequest]; }
Se o anúncio for buscado ou encontrar um erro, você
vai chamar GADMediationBannerLoadCompletionHandler
. Em caso de sucesso,
transmita a classe que implementa GADMediationBannerAd
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 SampleBannerAdDelegate
com callbacks relevantes:
Swift
func bannerDidLoad(_ banner: SampleBanner) { if let handler = completionHandler { delegate = handler(self, nil) } } func banner( _ banner: SampleBanner, 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)bannerDidLoad:(SampleBanner *)banner { _adEventDelegate = _loadCompletionHandler(self, nil); } - (void)banner:(SampleBanner *)banner 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); }
GADMediationBannerAd
requer a implementação de uma propriedade UIView
:
Swift
var view: UIView { return bannerAd ?? UIView() }
Objective-C
- (nonnull UIView *)view { return _bannerAd; }
Encaminhar eventos de mediação para o SDK dos anúncios para dispositivos móveis do Google
Depois de chamar GADMediationBannerLoadCompletionHandler
com um anúncio carregado,
o objeto delegado GADMediationBannerAdEventDelegate
retornado pode ser
usado pelo adaptador para encaminhar eventos de apresentação do SDK de terceiros para
o SDK dos anúncios para dispositivos móveis do Google. A classe SampleCustomEventBanner
implementa o
protocolo SampleBannerAdDelegate
para encaminhar callbacks da rede de anúncios
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 desses callbacks para que seu 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 bannerWillLeaveApplication(_ banner: SampleBanner) { delegate?.reportClick() }
Objective-C
- (void)bannerWillLeaveApplication:(SampleBanner *)banner { [_adEventDelegate reportClick]; }
Isso conclui a implementação de eventos personalizados para anúncios de banner. 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 de banner de evento personalizados.