Esta guía está dirigida a los editores que quieran añadir eventos personalizados de banner e intersticiales a la mediación de AdMob.
Con los eventos personalizados puedes incluir la vista que quieras en tu espacio publicitario,
así como monetizar tu aplicación con redes publicitarias que no sean directamente compatibles con la mediación.
Un evento personalizado se implementa mediante los protocolos GADCustomEventBanner
o GADCustomEventInterstitial
.
Requisitos previos
Para poder integrar eventos personalizados de anuncios de banner o intersticiales, primero debes incorporar ese formato de anuncio en tu aplicación. Estas son las guías más importantes al respecto:
Red publicitaria de ejemplo
En esta guía se explica cómo publicar anuncios de banner e intersticiales desde la red publicitaria de ejemplo mediante las clases de eventos personalizados SampleCustomEventBanner
y SampleCustomEventInterstital
.
El SDK de la red publicitaria de ejemplo es ficticio y se ha desarrollado para ilustrar el proceso real de implementación de un evento personalizado. Contiene clases representativas de las que ofrecen la mayoría de las redes publicitarias.
Consulta la implementación completa del SDK de ejemplo para obtener más información acerca de estas clases.
Evento de banner personalizado
En el siguiente ejemplo, primero deberás crear un evento de banner personalizado en la mediación de AdMob. Para ello, tendrás que definir un evento personalizado que dirija a esa clase específica en tu aplicación a través de la UI de AdMob. Después, deberás implementar un evento de banner personalizado para devolver una vista.
Definir un evento personalizado
Los eventos personalizados se deben definir en la UI de AdMob. En el artículo Añadir un evento personalizado encontrarás instrucciones sobre cómo desplazarte por la UI.
En esta captura de pantalla se muestran algunos ejemplos de ajustes de eventos personalizados:
La tabla que aparece a continuación te servirá de orientación cuando vayas a rellenar estos parámetros.
Nombre de clase | Escribe el nombre completo de la clase que implementa el evento personalizado. Si el lenguaje con el que has implementado tu clase es Swift, debes añadir al nombre de la clase un prefijo que indique el módulo de la aplicación o del framework (por ejemplo, appName.className). Si el proyecto tiene varios destinos o no se llama igual que el destino seleccionado, debes indicar el nombre del destino en cuestión. Con el nombre de destino, el aspecto sería el siguiente: appName_targetName.className. Además, recuerda que tienes que sustituir todos los caracteres no alfanuméricos, como los guiones, por guiones bajos. Para obtener más información, consulta este ejemplo. |
Etiqueta | Introduce un nombre descriptivo para el evento. |
Parámetro | Si quieres transferir un argumento al evento personalizado, introduce la cadena correspondiente. |
Solicitar un banner
En las solicitudes de banner de los eventos personalizados, se realiza una llamada al método requestBannerAd:parameter:label:request:
inmediatamente después de que se cree la instancia de la clase de evento personalizado.
Este método no devuelve nada, ya que se presupone que el evento personalizado obtendrá el anuncio de forma asíncrona a través de la red. El evento personalizado debe actuar como delegado del SDK para recibir las retrollamadas.
Si el SDK no es compatible con el tamaño de anuncio indicado ni con los anuncios de banner, realiza una llamada al método customEventBanner:didFailAd:
del delegado de evento personalizado.
Los parámetros serverParameter
y serverLabel
se corresponden con los campos de parámetros y etiquetas definidos al crear un evento personalizado en la UI de AdMob.
A continuación se muestra un ejemplo de implementación de requestBannerAd:parameter:label:request:
mediante la red publicitaria de ejemplo:
Swift
func requestBannerAd(adSize: GADAdSize, parameter serverParameter: String!,
label serverLabel: String!, request: GADCustomEventRequest!) {
// Create a banner view with the appropriate size.
bannerAd = SampleBanner(frame: CGRectMake(
0, 0, adSize.size.width, adSize.size.height))
bannerAd.delegate = self
bannerAd.adUnit = serverParameter
let adRequest = SampleAdRequest()
adRequest.testMode = request.isTesting
adRequest.keywords = request.userKeywords
bannerAd.fetchAd(adRequest)
}
Objective‑C
- (void)requestBannerAd:(GADAdSize)adSize
parameter:(NSString *)serverParameter
label:(NSString *)serverLabel
request:(GADCustomEventRequest *)request {
// Create the bannerView with the appropriate size.
self.bannerAd =
[[SampleBanner alloc] initWithFrame:CGRectMake(0,
0,
adSize.size.width,
adSize.size.height)];
self.bannerAd.delegate = self;
self.bannerAd.adUnit = serverParameter;
SampleAdRequest *adRequest = [[SampleAdRequest alloc] init];
adRequest.testMode = request.isTesting;
adRequest.keywords = request.userKeywords;
[self.bannerAd fetchAd:adRequest];
}
Enviar parámetros adicionales de la red publicitaria en las solicitudes de eventos personalizados
Para enviar parámetros adicionales de la red publicitaria junto con la solicitud que debe gestionar el evento personalizado, tienes que utilizar la función GADRequest registerAdNetworkExtras:
. Debes crear una instancia de GADCustomEventExtras
(que se ajuste al protocolo GADAdNetworkExtras
) para que se rellene una propiedad GADCustomEventRequest.additionalParameters
. Para transferir los parámetros adicionales, realiza una llamada al método GADCustomEventExtras setExtras:forLabel:
y transfiere los parámetros como un diccionario y la etiqueta del evento personalizado que hayas definido en la UI de AdMob.
En este fragmento de código puedes ver cómo se transmite un parámetro SampleExtra
a nuestra etiqueta SampleCustomEvent
definida anteriormente:
Swift
let request = GADRequest()
let extras = GADCustomEventExtras()
extras.setExtras(["SampleExtra": true], forLabel: "SampleCustomEvent")
request.register(extras)
Objective‑C
GADRequest *request = [GADRequest request];
GADCustomEventExtras *extras = [[GADCustomEventExtras alloc] init];
[extras setExtras:@{@"SampleExtra": @(YES)} forLabel:@"SampleCustomEvent"];
[request registerAdNetworkExtras:extras];
Si no registras una instancia de GADCustomEventExtras
para una solicitud de evento personalizado, el valor de la propiedad additionalParameters
de GADCustomEventRequest
será nil
.
Notificar a la mediación de AdMob
Implementa el procesador de anuncios de tu red e invoca las retrollamadas pertinentes en el delegado del evento personalizado para devolver mensajes a la mediación. En el siguiente ejemplo se implementa la interfaz SampleBannerAdDelegate
de la red publicitaria de ejemplo para enviar estos mensajes:
Swift
/// Type property for Sample Ad Network custom event error domain.
static let customEventErrorDomain = "com.google.CustomEvent"
// Sent when banner ad has loaded.
func bannerDidLoad(banner: SampleBanner!) {
delegate.customEventBanner(self, didReceiveAd: banner)
}
// Sent when banner has failed to load.
func banner(banner: SampleBanner!, didFailToLoadAdWithErrorCode error: SampleErrorCode) {
let nsError = NSError(domain: SampleCustomEventBanner.customEventErrorDomain,
code: error.rawValue, userInfo: nil)
delegate.customEventBanner(self, didFailAd: nsError)
}
// Sent when a banner is clicked and an external application is launched
func bannerWillLeaveApplication(banner: SampleBanner!) {
delegate.customEventBannerWasClicked(self)
delegate.customEventBannerWillLeaveApplication(self)
}
Objective‑C
/// Constant for Sample Ad Network custom event error domain.
static NSString *const customEventErrorDomain = @"com.google.CustomEvent";
// Sent when banner ad has loaded.
- (void)bannerDidLoad:(SampleBanner *)banner {
[self.delegate customEventBanner:self didReceiveAd:banner];
}
// Sent when banner has failed to load.
- (void)banner:(SampleBanner *)banner
didFailToLoadAdWithErrorCode:(SampleErrorCode)errorCode {
NSError *error = [NSError errorWithDomain:customEventErrorDomain
code:errorCode
userInfo:nil];
[self.delegate customEventBanner:self didFailAd:error];
}
// Sent when a banner is clicked and an external application is launched.
- (void)bannerWillLeaveApplication:(SampleBanner *)banner {
[self.delegate customEventBannerWasClicked:self];
[self.delegate customEventBannerWillLeaveApplication:self];
}
La mediación de AdMob admite las siguientes retrollamadas:
Anuncios de banner
Método | Cuándo llamarlo |
---|---|
customEventBanner:didReceiveAd: |
La solicitud de banner se ha realizado correctamente. |
customEventBanner:didFailAd: |
Se ha producido un error al realizar la solicitud de banner. |
customEventBannerWillPresentModal: |
El banner presentará una vista modal de pantalla completa. |
customEventBannerWillDismissModal: |
El banner cerrará una vista modal de pantalla completa. |
customEventBannerDidDismissModal: |
El banner ha cerrado una vista modal de pantalla completa. |
customEventBannerWillLeaveApplication: |
El banner ha provocado que el usuario salga de la aplicación. |
customEventBannerWasClicked: |
Se ha hecho clic en el banner. |
Anuncios intersticiales
Método | Cuándo llamarlo |
---|---|
customEventInterstitial:DidReceiveAd: |
La solicitud de intersticial se ha realizado correctamente. |
customEventInterstitial:didFailAd: |
Se ha producido un error al realizar la solicitud de intersticial. |
customEventInterstitialWillPresent: |
Se mostrará el intersticial, presentando una vista modal de pantalla completa. |
customEventInterstitialWillDismiss: |
El intersticial cerrará una vista modal de pantalla completa. |
customEventInterstitialDidDismiss: |
El intersticial ha cerrado una vista modal de pantalla completa. |
customEventInterstitialWillLeaveApplication: |
El intersticial ha provocado que el usuario salga de la aplicación. |
customEventInterstitialWasClicked: |
Se ha hecho clic en el intersticial. |
Para obtener más información, consulta la implementación de ejemplo de un banner de evento personalizado.
Evento de intersticial personalizado
Los eventos de intersticial personalizados se implementan de forma similar a los eventos de banner personalizados, con la principal diferencia de que la clase de los primeros debe seguir el protocolo GADCustomEventInterstitial
en lugar de GADCustomEventBanner
.
Definir un evento personalizado
Los eventos personalizados se deben definir en la UI de AdMob. En el artículo Añadir un evento personalizado encontrarás instrucciones sobre cómo desplazarte por la UI.
En esta captura de pantalla se muestran algunos ejemplos de ajustes de eventos personalizados:
La tabla que aparece a continuación te servirá de orientación cuando vayas a rellenar estos parámetros.
Nombre de clase | Escribe el nombre completo de la clase que implementa el evento personalizado. Si el lenguaje con el que has implementado tu clase es Swift, debes añadir al nombre de la clase un prefijo que indique el módulo de la aplicación o del framework (por ejemplo, appName.className). Si el proyecto tiene varios destinos o no se llama igual que el destino seleccionado, debes indicar el nombre del destino en cuestión. Con el nombre de destino, el aspecto sería el siguiente: appName_targetName.className. Además, recuerda que tienes que sustituir todos los caracteres no alfanuméricos, como los guiones, por guiones bajos. Para obtener más información, consulta este ejemplo. |
Etiqueta | Introduce un nombre descriptivo para el evento. |
Parámetro | Si quieres transferir un argumento al evento personalizado, introduce la cadena correspondiente. |
Solicitar un intersticial
En las solicitudes de intersticiales de los eventos personalizados, se realiza una llamada al método requestInterstitialAdWithParameter:label:request:
inmediatamente después de que se cree una instancia de la clase de evento personalizado. Este método no devuelve nada, ya que se presupone que el evento personalizado obtendrá el anuncio de forma asíncrona a través de la red.
El evento personalizado debe actuar como delegado del SDK para recibir las retrollamadas.
Los parámetros serverParameter
y serverLabel
se corresponden con los campos de parámetros y etiquetas definidos al crear un evento personalizado en la UI de AdMob.
A continuación se muestra un ejemplo de implementación de requestInterstitialAdWithParameter:label:request:
mediante la red publicitaria de ejemplo:
Swift
func requestInterstitialAdWithParameter(serverParameter: String!,
label serverLabel: String!, request: GADCustomEventRequest!) {
interstitial = SampleInterstitial()
interstitial.delegate = self
interstitial.adUnit = serverParameter
let adRequest = SampleAdRequest()
adRequest.testMode = request.isTesting
adRequest.keywords = request.userKeywords
interstitial.fetchAd(adRequest)
}
Objective‑C
- (void)requestInterstitialAdWithParameter:(NSString *)serverParameter
label:(NSString *)serverLabel
request:(GADCustomEventRequest *)request {
self.interstitial = [[SampleInterstitial alloc] init];
self.interstitial.delegate = self;
self.interstitial.adUnit = serverParameter;
SampleAdRequest *adRequest = [[SampleAdRequest alloc] init];
adRequest.testMode = request.isTesting;
adRequest.keywords = request.userKeywords;
[self.interstitial fetchAd:adRequest];
}
El protocolo de eventos personalizados GADCustomEventInterstitial
requiere que implementes el método presentFromRootViewController:
.
Cuando solicitas al SDK de anuncios de Google para móviles que muestre el intersticial, la mediación invoca dicho método de la siguiente manera:
Swift
func presentFromRootViewController(rootViewController: UIViewController!) {
if interstitial.interstitialLoaded {
interstitial.show()
}
}
Objective‑C
- (void)presentFromRootViewController:(UIViewController *)rootViewController {
if ([self.interstitial isInterstitialLoaded]) {
[self.interstitial show];
}
}
Enviar parámetros adicionales de la red publicitaria en las solicitudes de eventos personalizados
Para enviar parámetros adicionales de la red publicitaria junto con la solicitud que debe gestionar el evento personalizado, tienes que utilizar la función GADRequest registerAdNetworkExtras:
. Debes crear una instancia de GADCustomEventExtras
(que se ajuste al protocolo GADAdNetworkExtras
) para que se rellene una propiedad GADCustomEventRequest.additionalParameters
. Para transferir los parámetros adicionales, realiza una llamada al método GADCustomEventExtras setExtras:forLabel:
y transfiere los parámetros como un diccionario y la etiqueta del evento personalizado que hayas definido en la UI de AdMob.
En el siguiente fragmento de código se muestra cómo transferir un parámetro SampleExtra
de la etiqueta SampleCustomEvent
que hemos definido anteriormente:
Swift
let request = GADRequest()
let extras = GADCustomEventExtras()
extras.setExtras(["SampleExtra": true], forLabel: "SampleCustomEvent")
request.register(extras)
Objective‑C
GADRequest *request = [GADRequest request];
GADCustomEventExtras *extras = [[GADCustomEventExtras alloc] init];
[extras setExtras:@{@"SampleExtra": @(YES)} forLabel:@"SampleCustomEvent"];
[request registerAdNetworkExtras:extras];
Si no registras una instancia de GADCustomEventExtras
para una solicitud de evento personalizado, el valor de la propiedad additionalParameters
de GADCustomEventRequest
será nil
.
Notificar a la mediación de AdMob
Al igual que con el evento de banner personalizado, debes implementar el procesador de anuncios de tu red para enviar mensajes de vuelta a la mediación. En el siguiente ejemplo se muestra la implementación de la interfaz SampleInterstitialAdDelegate
de la red publicitaria de ejemplo:
Swift
/// Type property for Sample Ad Network custom event error domain.
static let customEventErrorDomain = "com.google.CustomEvent"
// Sent when an interstitial ad has loaded.
func interstitialDidLoad(interstitial: SampleInterstitial!) {
delegate.customEventInterstitialDidReceiveAd(self)
}
// Sent when interstitial ad has failed to load.
func interstitial(interstitial: SampleInterstitial!,
didFailToLoadAdWithErrorCode errorCode: SampleErrorCode) {
let nsError = NSError(domain: SampleCustomEventInterstitial.customEventErrorDomain,
code: errorCode.rawValue, userInfo: nil)
delegate.customEventInterstitial(self, didFailAd: nsError)
}
// Sent when an interstitial is about to be shown.
func interstitialWillPresentScreen(interstitial: SampleInterstitial!) {
delegate.customEventInterstitialWillPresent(self)
}
// Sent when an interstitial is about to be dismissed.
func interstitialWillDismissScreen(interstitial: SampleInterstitial!) {
delegate.customEventInterstitialWillDismiss(self)
}
// Sent when an interstitial has been dismissed.
func interstitialDidDismissScreen(interstitial: SampleInterstitial!) {
delegate.customEventInterstitialDidDismiss(self)
}
// Sent when an interstitial is clicked and an external application is launched.
func interstitialWillLeaveApplication(interstitial: SampleInterstitial!) {
delegate.customEventInterstitialWasClicked(self)
delegate.customEventInterstitialWillLeaveApplication(self)
}
Objective‑C
/// Constant for Sample Ad Network custom event error domain.
static NSString *const customEventErrorDomain = @"com.google.CustomEvent";
// Sent when an interstitial ad has loaded.
- (void)interstitialDidLoad:(SampleInterstitial *)interstitial {
[self.delegate customEventInterstitialDidReceiveAd:self];
}
// Sent when an interstitial ad has failed to load.
- (void)interstitial:(SampleInterstitial *)interstitial
didFailToLoadAdWithErrorCode:(SampleErrorCode)errorCode {
NSError *error = [NSError errorWithDomain:customEventErrorDomain
code:errorCode
userInfo:nil];
[self.delegate customEventInterstitial:self didFailAd:error];
}
// Sent when an interstitial is about to be shown.
- (void)interstitialWillPresentScreen:(SampleInterstitial *)interstitial {
[self.delegate customEventInterstitialWillPresent:self];
}
// Sent when an interstitial is about to be dismissed.
- (void)interstitialWillDismissScreen:(SampleInterstitial *)interstitial {
[self.delegate customEventInterstitialWillDismiss:self];
}
// Sent when an interstitial has been dismissed.
- (void)interstitialDidDismissScreen:(SampleInterstitial *)interstitial {
[self.delegate customEventInterstitialDidDismiss:self];
}
// Sent when an interstitial is clicked and an external application is launched.
- (void)interstitialWillLeaveApplication:(SampleInterstitial *)interstitial {
[self.delegate customEventInterstitialWasClicked:self];
[self.delegate customEventInterstitialWillLeaveApplication:self];
}
El envío de mensajes a la mediación permite que prosiga el flujo de mediación.
Para obtener más información, consulta este ejemplo de implementación de un evento intersticial personalizado.