El SDK de anuncios de Google para dispositivos móviles también admite estilos del anuncio de búsqueda personalizados. Si su aplicación ya utiliza el SDK de anuncios de Google para dispositivos móviles, le recomendamos Versión del SDK de AFSMA en su lugar.
Si estás actualizando a la versión 19.0.0 o a una posterior desde la versión 18.1.0 o una anterior, consulta nuestra guía de migración.
Requisitos previos
En esta guía de implementación, se supone que estás familiarizado con los siguientes elementos:
- Anuncios de búsqueda personalizados de AdSense con estilos del anuncio de búsqueda personalizados
- Desarrollo de apps para Android
Importa el SDK nativo de AFS
Cómo agregar el SDK
Para agregar el SDK nativo de AFS a tu app, haz lo siguiente:
Abre el archivo build.gradle
dentro del directorio del módulo de tu aplicación.
Agrega una nueva regla de compilación en dependencies
para la versión más reciente del SDK:
dependencies {
implementation 'com.google.android.gms:play-services-afs-native:19.1.0'
}
Asegúrate de que tu build.gradle
de nivel superior contenga una referencia a google()
.
repo o a maven { url "https://maven.google.com" }
.
Sigue estas instrucciones.
para incluir el complemento de comparador de versiones independientes de Google Play en tu proyecto.
Aplicar este complemento genera un error de compilación de Gradle cuando se inhabilita el SDK nativo de AFS.
usan una versión incompatible de los Servicios de Google Play, en lugar de permitir
que cree la aplicación, pero
lo que podría causar fallas en el tiempo de ejecución. O bien, aplica el
failOnVersionConflict()
ResolutionStrategy
en tu proyecto para causar un error de compilación cuando se usen versiones incompatibles de Google Play
Los servicios se usan en tu proyecto.
Guarda los cambios y haz clic en Sync Project with Gradle Files en
la barra de herramientas.
Cómo usar AndroidX en lugar de las bibliotecas de compatibilidad de Android
A partir de la versión 17.0.0
del SDK, tu app debe usar Jetpack (AndroidX).
en lugar de las bibliotecas de compatibilidad de Android. Requisitos de compatibilidad:
- Configura
com.android.tools.build:gradle
como 3.2.1 o una versión posterior. - Establece
compileSdkVersion
en 28 o una versión posterior. - Actualiza tu app para usar Jetpack (AndroidX). sigue las instrucciones de Cómo migrar a AndroidX.
Clases
Para publicar anuncios nativos de AFS en tu app, implementa las siguientes clases:
- Esta clase se encarga de solicitar anuncios de manera asíncrona, almacenar en caché y la recuperación y la renderización de anuncios.
- Cada contexto de anuncio necesita un
SearchAdController
diferente; por ejemplo, si tienen una pantalla que muestra anuncios junto a una lista de resultados de la búsqueda y otra que muestra anuncios junto a los detalles de un producto específico, deberías Crea dos instancias separadas deSearchAdController
, una para cada caso. - Se le debe proporcionar al constructor tu código de propiedad web (ID del publicador)
style ID para aplicar
anuncios mostrados y
SearchAdOptions
. ElContext
proporcionado en el constructor debe ser elActivity
que contiene elSearchAdController
y donde colocará el anuncioView
. - Llama a
loadAds
para indicar una nueva búsqueda de usuario y, luego, inicia un anuncio asíncrono. para cada solicitud. Los anuncios cargados a partir de llamadas anteriores aloadAds
se borran de la caché de anuncios interna cuando se realice una llamada nueva. - Crea un
View
concreateAdView
para mostrar creatividades de anuncios. - Una vez que se carguen los anuncios, llama a
populateAdView
con unView
generado anteriormente concreateAdView
para renderizar un anuncio almacenado en caché en eseView
. Además del artículoView
, que se debe propagar, proporciona unadKey
, una cadena arbitraria a identificar el anuncio de manera inequívoca. De este modo, se asocia la creatividad del anuncio específica que se devuelve en almacenar en caché con eseadKey
, por lo que, cuando se pase el mismoadKey
a una llamada futura apopulateAdView
, se devolverá el mismo anuncio. Por ejemplo, Se llama apopulateAdView
por primera vez conadKey="keyA"
y renderiza un anuncio para botas de excursionismo, cada llamada posterior apopulateAdView
conadKey="keyA"
propagará el mismo anuncio para botas de excursionismo. (Si haces una nueva llamada aloadAds
borra todos los anuncios almacenados en caché y las claves de anuncio asociadas).
- Pasa este objeto al constructor
SearchAdController
para personalizar la forma en que se muestran los anuncios. se solicitan y muestran los datos. Llama abuild()
en unSearchAdOptions.Builder
para crea un objetoSearchAdOptions
.
View
- Crea un objeto
View
para retener anuncios. Para ello, llama acreateAdView()
en elSearchAdController
Muestra, como máximo, un anuncio a la vez, pero sí se puede modificar el mismoView
se reciclen para mostrar diferentes anuncios a lo largo del tiempo.
- Llama al método
loadAds
enSearchAdController
con unSearchAdRequest
. para iniciar una solicitud de anuncio asíncrona. Llamar abuild()
en unSearchAdRequest.Builder
para crear un objetoSearchAdRequest
.
- Implementa esta interfaz y pásala al constructor
SearchAdController
para registrar devoluciones de llamada para varios estados. - Nota: No se realizarán devoluciones de llamada de
AdListener
en una solicitud cancelada (una llamada aloadAds
que se interrumpió por otra llamada aloadAds
antes de la primera llamada resuelta).
Ejemplo de implementación
En el siguiente ejemplo, se muestra cómo crear un SearchAdController
en una muestra
Activity
// MainActivity.java implementation
// (MainActivity is a subclass of Activity)
SearchAdController adController;
// adContainer where we will place our ads in this example.
ViewGroup adContainer;
protected void onCreate(Bundle bundle){
super.onCreate(bundle);
adContainer = (ViewGroup) findViewById(...);
// Specify ad options (not required).
SearchAdOptions.Builder adOptionsBuilder = new SearchAdOptions.Builder();
adOptionsBuilder.setAdType(SearchAdOptions.AD_TYPE_TEXT);
adOptionsBuilder.setPrefetch(true);
adOptionsBuilder.setNumAdsRequested(3);
// Provide a callback to trigger when ads are loaded.
AdListener adListener = new AdListener() {
public void onAdLoaded() {
createAndShowAd();
}
};
// Instantiate the SearchAdController.
adController = new SearchAdController(this, "your-client-id", "your-style-id",
adOptionsBuilder.build(), adListener);
}
Cuando el usuario inicie una consulta, crea un SearchAdRequest
y llama a loadAds
.
en SearchAdController
para iniciar una solicitud de anuncio asíncrona.
// Create the request.
SearchAdRequest.Builder requestBuilder = new SearchAdRequest.Builder();
requestBuilder.setQuery("user query here");
// Load the ads.
adController.loadAds(requestBuilder.build());
Implementa la devolución de llamada onAdLoaded
para propagar un anuncio cargado en una vista de anuncio.
private void createAndShowAd() {
// Create a new view that will contain the ad.
View adView = adController.createAdView();
// Attach the new view to the view hierarchy.
adContainer.addView(adView);
// Display the ad inside the adView. We need to provide an adKey to
// indicate which ad is to be displayed in the adView. In this example,
// since we only have one ad, we can provide any constant string. However,
// if you intend to display multiple ads, each ad you wish to display
// should be given a unique adKey of your choosing.
adController.populateAdView(adView, "demoAd");
}
Un anuncio relacionado con la búsqueda especificada ahora aparecerá en adView
.
Investiga errores
SearchAdController
requiere un objeto AdListener
con onAdLoaded()
.
para notificar a tu app que los anuncios están listos para mostrarse. También debes
Implementa el método onAdFailedToLoad()
para detectar y corregir errores.
Por ejemplo, puedes usar el siguiente AdListener
para depurar tu
implementación:
AdListener adListener = new AdListener() {
public void onAdLoaded() {
// Called when an ad is loaded.
Toast.makeText(MainActivity.this, "Ad Loaded",
Toast.LENGTH_SHORT).show();
Log.d(MainActivity.class.getSimpleName(), "Ad Loaded");
}
public void onAdLeftApplication() {
// Called when an ad leaves the application
// (to go to the browser for example).
Toast.makeText(MainActivity.this, "Ad Left Application",
Toast.LENGTH_SHORT).show();
Log.d(MainActivity.class.getSimpleName(), "Ad Left Application");
}
@Override
public void onAdFailedToLoad(int errorCode) {
// Called when an ad request failed.
Toast.makeText(MainActivity.this, "Ad Failed to Load: " + errorCode,
Toast.LENGTH_SHORT).show();
Log.e(MainActivity.class.getSimpleName(), "Ad Failed to Load: " +
errorCode);
}
};
Constantes usadas en el método de devolución de llamada onAdFailedToLoad()
se definen en AdListener.