Skills de publicidad: Google Ads, Data Manager e IMA SDK
Skills de publicidad: Google Ads, Data Manager e IMA SDK
De los 103 skills del catálogo, 89 viven bajo skills/cloud/, 2 bajo
skills/analytics/ y 12 bajo skills/ads/. Esos 12 son el bloque más homogéneo
del repositorio: todos declaran category: GoogleAds en su metadata, todos
vienen de equipos de producto de publicidad y ninguno comparte convenciones con
los skills de Cloud de los capítulos
8 y
9.
Es un área interesante porque concentra los tres modelos de uso que puede tener un skill: escribir código de integración en un SDK, llamar a una API de datos desde un script, y —el caso más ilustrativo de este curso— instalar un servidor MCP para que el propio agente consulte la cuenta en lenguaje natural. Recordatorio del capítulo 1: el README marca el repositorio como under active development, y veremos que un par de estos skills citan hermanos que aún no están publicados.
Mapa del área
flowchart TD
ADS[skills/ads/ - 12 skills - category GoogleAds]
ADS --> DM[Data Manager API - 3 skills]
ADS --> API[Google Ads API - 3 skills]
ADS --> GMA[Google Mobile Ads SDK - 5 skills]
ADS --> IMA[IMA SDK - 1 skill]
DM --> DM1[setup, audience-ingestion, event-ingestion]
API --> API1[quickstart, account-diagnostics, mcp-setup]
GMA --> G1[get-started, banner, interstitial, rewarded]
GMA --> G2[android-migrate-to-next-gen]
IMA --> I1[ima-sdk-basics]
Cada nombre de directorio da título a las secciones que siguen; ninguno lleva
prefijo de categoría, el agrupamiento por producto vive solo en el README y en el
campo category.
La migración a GMA Next-Gen
google-mobile-ads-android-migrate-to-next-gen
Es el skill más largo del área: 196 líneas de SKILL.md, sin references/, todo
en un archivo. Su descripción no deja espacio a la ambigüedad —“Migrates Android
applications from the old, legacy Google Mobile Ads (GMA) SDK
(com.google.android.gms:play-services-ads) to the new GMA Next-Gen SDK
(com.google.android.libraries.ads.mobile.sdk:ads-mobile-sdk)”.
Qué hace. Convierte un codebase Android completo de un SDK al otro. El grueso del archivo son dos tablas —API Mapping de clases e imports, Method Mapping de firmas— para que el agente no adivine el equivalente sino que lo busque.
Antes de tocar código pasa por Gradle, y la versión no está hardcodeada: el skill trae el comando para resolverla desde Maven.
curl -sS https://dl.google.com/dl/android/maven2/com/google/android/libraries/ads/mobile/sdk/ads-mobile-sdk/maven-metadata.xml | sed -n 's/.*<latest>\(.*\)<\/latest>.*/\1/p'
Exige además minSdk 24 o superior, compileSdk 34 o superior, y excluir
globalmente play-services-ads y play-services-ads-lite para evitar símbolos
duplicados. Cierra con gradle build -x test.
Las tres reglas que más cambian el código, de la sección Core Migration
Rules: el applicationId de InitializationConfig sale de la meta-data
com.google.android.gms.ads.APPLICATION_ID del AndroidManifest.xml, y la
etiqueta <meta-data> hay que conservarla porque el SDK de User Messaging
Platform la sigue necesitando; MobileAds.initialize() va en un hilo de fondo y
antes de cualquier otro método, con RequestConfiguration empaquetado en
InitializationConfig.Builder.setRequestConfiguration(); y —esta la escribe en
mayúsculas— los callbacks del Next-Gen SDK se invocan en un hilo de fondo, así
que toda operación de UI dentro de un callback va envuelta en runOnUiThread {}
o Dispatchers.Main.launch {}: “SKIPPING THIS STEP WILL CAUSE THE APPLICATION
TO CRASH”.
Una muestra de la tabla de mapeo, que da la medida del cambio de superficie:
| Concepto | SDK antiguo | GMA Next-Gen |
|---|---|---|
| Ad Request | AdRequest | específico por formato: common.AdRequest, banner.BannerAdRequest, nativead.NativeAdRequest |
| Carga de banner | AdListener | common.AdLoadCallback<banner.BannerAd> |
| Ad Loader nativo | AdLoader | nativead.NativeAdLoader |
| Ad Manager view | admanager.AdView | banner.AdView — ya no existe AdManagerAdView |
| Preloader | interstitial.InterstitialPreloader | interstitial.InterstitialAdPreloader |
En el mapeo de métodos el cambio de forma más visible es que el ad unit ID pasó
del load() al constructor del builder: donde antes iba
InterstitialAd.load(context, adUnitId, request, loadCallback) ahora va
InterstitialAd.load(request, loadCallback) con el request construido por
AdRequest.Builder(adUnitId). El skill también manda borrar: la lógica de Mute
This Ad no está soportada y LoadAdError ya no tiene variable domain. Con una
excepción, las clases que implementan
com.google.android.gms.ads.mediation.Adapter deben seguir en
com.google.android.gms.ads.
En qué proyecto lo usarías. Una app Android con monetización ya en producción
sobre play-services-ads que necesita saltar al SDK nuevo. No sirve para
integrar desde cero: para eso está google-mobile-ads-get-started.
Data Manager API: tres skills encadenados
Los tres skills de Data Manager están escritos como una cadena explícita: cada
uno declara en su description cuándo no usarse y a cuál derivar. Es el
mejor ejemplo del área de lo que en el
curso de Agent Skills llamamos
descripciones con frontera negativa: setup prepara el entorno y no implementa
ingesta; los otros dos implementan ingesta y devuelven al usuario a setup si el
prerrequisito no está cubierto.
data-manager-api-setup
Qué hace. El más corto de los tres, 54 líneas: autenticación e instalación de
librerías, y nada más. La autenticación pasa por habilitar la API en el proyecto
de Google Cloud y generar ADC con gcloud auth application-default login con los
scopes
https://www.googleapis.com/auth/datamanager y
https://www.googleapis.com/auth/cloud-platform. Para service accounts exige
además el rol IAM Service Usage Consumer en la cuenta de servicio y
roles/iam.serviceAccountTokenCreator en el usuario que ejecuta gcloud.
Las librerías traen un detalle que atraviesa la familia: hay dos paquetes por lenguaje, el cliente y una utilitaria que formatea, hashea y cifra identificadores según la especificación de la API.
| Lenguaje | Cliente | Utilidades |
|---|---|---|
| Python | google-ads-datamanager | google-ads-datamanager-util |
| Java | com.google.api-ads:data-manager | data-manager-util |
| Node | @google-ads/datamanager | @google-ads/data-manager-util |
| PHP | googleads/data-manager | googleads/data-manager-util |
| .NET | Google.Ads.DataManager.V1 | Google.Ads.DataManager.Util.csproj |
Cada lenguaje tiene su archivo en references/: python.md, java.md,
node.md, php.md, dotnet.md. En qué proyecto lo usarías: el primer
contacto con Data Manager API en un backend que vaya a mandar datos de primera
parte a Google Ads, DV360 o Analytics.
data-manager-api-audience-ingestion
Qué hace. Gestiona miembros de audiencia —añadir, quitar y vaciar— para
Customer Match, audiencias por mobile device ID y demás casos soportados. La
primera instrucción del workflow es un freno marcado [CRITICAL]: si no
está claro a dónde van los datos —Google Ads, Display & Video 360— hay que parar
y preguntar antes de generar una línea de código. Textual: “Do not assume Google
Ads by default”. Eso mapea al account_type del operating_account dentro del
Destination, y el destino decide qué se acepta: Google Ads admite
composite_data.user_data, mobile_data y user_id_data; DV360 solo los dos
primeros.
El checklist acaba en el paso que el propio skill señala como el error más común:
un HTTP 200 con request_id solo confirma que el payload se recibió. Para
saber si los registros se procesaron hay que consultar
client.retrieve_request_status con ese request_id, con backoff exponencial y
empezando al menos 30 minutos después del envío.
La sección Critical Gotchas es un inventario de trampas reales:
- Si mandas identificadores ya hasheados en
user_data, fijaencodingaHEXoBASE64en elIngestAudienceMembersRequest. - Al subir a Customer Match, el campo
terms_of_servicees obligatorio. - Solo se rellena
addressenUserIdentifiersi están todos sus campos requeridos:postal_code,family_name,given_name,region_code. product_destination_ides un string numérico, no un resource name.- Los valores de
ConsentStatussonCONSENT_GRANTEDyCONSENT_DENIED, noGRANTEDniDENIED. - Los campos son
email_addressyphone_number, no los de la Google Ads APIhashed_emailyhashed_phone_number.
Trae dos references/: create-audience.md —para obtener el
product_destination_id cuando la audiencia aún no existe, avisando de que el
cliente correcto es UserListServiceClient— y formatting.md.
En qué proyecto lo usarías. Un pipeline de CRM que sincroniza segmentos hacia Google Ads o DV360, o una migración desde la Customer Match antigua de la Google Ads API: el skill enlaza las tablas de mapeo de campos para ese refactor.
data-manager-api-event-ingestion
Qué hace. El gemelo del anterior, contra el endpoint /v1/events/ingest:
conversiones offline, enhanced conversions for leads, click conversions y eventos
web o app de Google Analytics. Comparte estructura completa con audience-ingestion —mismo freno [CRITICAL],
mismos checkpoints, mismo aviso sobre diagnósticos— pero su lista de gotchas es
propia: event_timestamp estrictamente en RFC 3339 y mejor con el objeto typed
del SDK que con un string; los identificadores de clic gclid, gbraid y
wbraid van anidados dentro de ad_identifiers, no colgando del payload base;
el campo de moneda se llama currency, no currency_code; y consent puede
fijarse global en el IngestEventsRequest o por Event individual.
Su tabla de migraciones cubre cuatro orígenes: Google Ads API Offline
Conversions, Google Ads API Store Sales, Measurement Protocol de Google Analytics
y Campaign Manager 360 API Offline Conversions. El formateo se hace con la
librería utilitaria, no a mano: en Python,
Formatter().process_email_address(email, Encoding.HEX).
En qué proyecto lo usarías. Un e-commerce que sube ventas de tienda física para cerrar el círculo de atribución, o cualquier backend que hoy manda conversiones por Measurement Protocol y quiere consolidar en Data Manager.
Google Ads API: quickstart, diagnóstico y MCP
google-ads-api-quickstart
Qué hace. Lleva de cero a la primera petición correcta: las cinco
credenciales, la elección entre seis librerías cliente o REST directo, y la
depuración de los errores clásicos de arranque. Su rasgo más particular es una regla que casi ningún otro skill del catálogo
formaliza tanto: “DO NOT Hardcode: Never use hardcoded Google Ads API versions
(e.g., v24) or language runtime versions (e.g., Python 3.8+, Java 11+)”.
El agente debe resolver la versión mayor estable leyendo las release notes o el
repositorio googleapis/googleapis, y hacer búsqueda y reemplazo sobre las
plantillas: vXX en minúscula para imports de Java y URLs REST, VXX en
title-case para namespaces de .NET y PHP. Además obliga a emitir como primera
línea de la respuesta, antes de cualquier saludo, un
[SYSTEM: Using Google Ads API version: ...] con la versión resuelta.
Si la red falla hay fallback declarado: API v24, librería Java 34.0.0, y
mínimos de runtime Python 3.9+, Java 11+, .NET 6.0+, PHP 8.1+, Ruby
3.0+, Perl 5.28.1+. El refresh token, una de las cinco credenciales, se
genera con gcloud:
gcloud auth application-default login \
--scopes=https://www.googleapis.com/auth/adwords,https://www.googleapis.com/auth/cloud-platform \
--client-id-file=client_secrets.json
Los dos errores que domina: USER_PERMISSION_DENIED, cuando el usuario OAuth
llega a la cuenta cliente a través de una manager pero falta el
login_customer_id —el skill lo llama “the #1 cause of permission errors”— y
DEVELOPER_TOKEN_NOT_APPROVED, un token Pending que funciona solo contra
cuentas de prueba y para el que obliga a nombrar los tres niveles de acceso
completos: Explorer Access, Basic Access y Standard Access.
Trae además dos guardarraíles: uno de seguridad —nunca ampliar scopes más allá de
adwords, ni modificar el código de la librería, ni usar wrappers de terceros
para saltar la validación del token— y uno operativo: al depurar, análisis
estático solamente, nada de ejecutar comandos ni reproducir el error, para no
caer en bucles de ejecución fallida. Sus references/ cubren los siete caminos:
python.md, java.md, dotnet.md, php.md, ruby.md, perl.md y rest.md.
En qué proyecto lo usarías. Cualquier integración nueva contra la Google Ads
API, y como primera parada cuando heredas un proyecto que devuelve
USER_PERMISSION_DENIED.
google-ads-api-account-diagnostics
Qué hace. Diagnostica caídas de rendimiento de una cuenta: pérdida de
conversiones o de valor, poco flujo de leads, y cuota de impresiones perdida por
ad rank, pujas o presupuesto. Lo relevante para este curso es cómo lo hace:
no escribe scripts. Asume el servidor MCP de Google Ads instalado y opera solo
con sus herramientas —“you must call the search tool on the MCP server
directly. Do not write or execute custom Python scripts or use the Google Ads
client library to query the API, as they will fail authentication inside the
evaluation sandbox”.
El flujo empieza siempre igual: si no hay customer ID, llamar
list_accessible_customers y filtrar las cuentas cliente activas, descartando
managers y desactivadas porque consultarlas provoca errores de API.
SELECT customer_client.id, customer_client.descriptive_name
FROM customer_client
WHERE customer_client.status = 'ENABLED' AND customer_client.manager = FALSE
Los cuatro workflows, cada uno con su gotcha de GAQL:
| Workflow | Recursos y métricas | Gotcha |
|---|---|---|
| Pérdida de conversiones | campaign o ad_group con metrics.conversions, metrics.conversions_value, metrics.cost_micros, segmentado por fecha, device y conversion action | cost_micros se divide por 1.000.000 |
| Oportunidades perdidas | metrics.search_impression_share, metrics.search_rank_lost_impression_share, metrics.search_budget_lost_impression_share | llegan como decimales —0.35 es 35%— o como strings tipo "< 0.10" |
| Poco flujo de leads | separar caída de tráfico de caída de tasa de conversión, luego change_event | LIMIT de 10000 o menos, fecha dentro de 30 días y sin métricas |
| Subidas offline | offline_conversion_upload_conversion_action_summary, comparando successful_event_count con total_event_count | si vuelve vacía, detener y reportar, no reintentar |
Un detalle que conviene señalar: la description de este skill remite a un
gma-android-integrate para problemas de integración del Mobile Ads SDK, y ese
directorio no existe en el repositorio —el equivalente publicado es
google-mobile-ads-get-started. Referencia colgante, coherente con el aviso de
under active development.
En qué proyecto lo usarías. Una agencia o un equipo de performance marketing que quiere hacer la primera pasada de diagnóstico conversando con el agente en vez de armar dashboards.
google-ads-api-mcp-setup
El skill del área que más conecta con el resto de la trilogía, porque no enseña a programar contra una API: enseña a darle una herramienta al agente.
Qué hace. Instala, configura e integra el servidor MCP open source oficial de
Google Ads, googleads/google-ads-mcp.
flowchart LR
Q[google-ads-api-quickstart] -->|si el objetivo es un asistente IA| M[google-ads-api-mcp-setup]
M -->|faltan credenciales| Q
M --> SRV[google-ads-mcp via pipx]
SRV -->|stdio| CLI[Claude Code, Cursor, Antigravity]
CLI --> D[google-ads-api-account-diagnostics]
Las dos flechas del handoff están escritas en los propios archivos: el quickstart
dice que si el objetivo es conectar un asistente IA, “DO NOT write custom
scripts”, hay que pasar a google-ads-api-mcp-setup; y el MCP setup dice lo
inverso, si faltan las cinco credenciales hay que volver al quickstart.
Prerrequisitos e instalación. Python 3.12 o superior y pipx accesible
globalmente, verificados con python3 --version y pipx --version antes de
proponer nada; por defecto la release estable de PyPI.
pipx install google-ads-mcp
google-ads-mcp --help
Si ese --help falla con command not found, el skill prohíbe reinstalar en
bucle: verificar con la ruta absoluta ~/.local/bin/google-ads-mcp y, si
funciona, explicar que el problema es el PATH.
El transporte. Hay una directiva literal: al explicar la arquitectura hay que
usar las palabras exactas standard input/output y transport. La razón de
fondo sirve para cualquiera que escriba un servidor MCP: el cliente host lanza el
servidor como subproceso, no hay puerto de red —todo va por piping de
stdin/stdout— y como stdout está reservado al protocolo, los logs van
obligatoriamente a stderr.
Credenciales. Por variables de entorno, mejor en el JSON del cliente MCP —lo aísla a esa herramienta— que en el perfil global del shell.
{
"mcpServers": {
"google-ads": {
"command": "pipx",
"args": ["run", "google-ads-mcp"],
"env": {
"GOOGLE_ADS_DEVELOPER_TOKEN": "YOUR_DEVELOPER_TOKEN",
"GOOGLE_ADS_CLIENT_ID": "YOUR_OAUTH_CLIENT_ID",
"GOOGLE_ADS_CLIENT_SECRET": "YOUR_OAUTH_CLIENT_SECRET",
"GOOGLE_ADS_REFRESH_TOKEN": "YOUR_OAUTH_REFRESH_TOKEN",
"GOOGLE_ADS_LOGIN_CUSTOMER_ID": "YOUR_MANAGER_ACCOUNT_ID_IF_APPLICABLE"
}
}
}
}
Lista además variables de despliegue —GOOGLE_PROJECT_ID, FASTMCP_HOST,
GOOGLE_ADS_MCP_BASE_URL y las dos GOOGLE_ADS_MCP_OAUTH_*— porque tiene un
paso 5.5 para alojarlo en Cloud Run: Artifact Registry, gcloud builds submit,
gcloud run deploy con FASTMCP_HOST=0.0.0.0, y el cliente apuntando a
"httpUrl": "https://tu-url.a.run.app/mcp" en vez de a un comando local.
Las tres herramientas expuestas. El skill obliga a nombrarlas todas y a dar
los nombres exactos de sus argumentos, sin parafrasear customer_id como
“cuenta”:
| Herramienta | Argumentos | Para qué |
|---|---|---|
list_accessible_customers | ninguno | Lista los customer IDs accesibles con esas credenciales |
get_resource_metadata | resource | Inspecciona campos, métricas y segmentos antes de escribir GAQL |
search | customer_id, query | Ejecuta una consulta GAQL contra una cuenta |
Y una advertencia que evita malentendidos: el servidor es estrictamente de solo lectura. No puede modificar pujas, pausar campañas ni crear assets.
Verificación. Se hace desde la CLI de Antigravity —agy, luego /mcp—
porque aísla problemas de credenciales o de arranque antes de culpar al IDE. Los
fallos catalogados: los IDEs no heredan ~/.bashrc ni ~/.zshrc; los servidores
MCP solo se cargan al arrancar la aplicación, así que hay que reiniciar el cliente
entero tras editar la configuración; y spawn pipx ENOENT significa que pipx no
está en el PATH del IDE.
En qué proyecto lo usarías. Cuando el objetivo no es escribir un integrador
sino consultar la cuenta en lenguaje natural desde tu asistente. Es el punto donde
este curso se toca con el
curso de Agent Plugins: un plugin
distribuible es, en buena parte, esta misma combinación de skills más servidor MCP
empaquetada para instalarse de una vez. Aquí ese empaquetado no existe —los
plugins/ del repositorio son todos de Cloud, como veremos en el
capítulo 11— y el skill
suple el hueco explicando la instalación paso a paso.
Los formatos del Mobile Ads SDK
Cuatro skills de estructura casi idéntica: SKILL.md corto —entre 30 y 47
líneas—, workflow de cuatro pasos y todo el detalle real en references/ por
plataforma. Es el patrón de carga diferida del
capítulo 4,
llevado al extremo.
google-mobile-ads-get-started
Qué hace. Instala e inicializa el SDK para AdMob o Ad Manager en Android, iOS o Unity; es la puerta de entrada de los otros tres. Su workflow cabe en cuatro pasos: determinar la plataforma —y si no está clara, preguntar—, leer la guía correspondiente y ejecutar el checklist de añadir la dependencia, fijar el identificador de aplicación, inicializar el SDK y verificar. Termina con una instrucción de producto: una vez instalado, preguntar qué formato de anuncio se quiere integrar.
Es el único de los cuatro con assets/: un skadnetwork-identifiers.xml de 203
líneas con el array SKAdNetworkItems listo para pegar en el Info.plist de iOS.
Las guías usan App IDs de prueba —ca-app-pub-3940256099942544~3347511713 en
Android, ca-app-pub-3940256099942544~1458002511 en iOS— con el recordatorio de
reemplazarlos.
En qué proyecto lo usarías. Una app móvil que va a monetizar con AdMob por primera vez, o un proyecto Unity que necesita la misma configuración en iOS y Android.
google-mobile-ads-banner
Qué hace. Implementa banners en Android, iOS o Unity. Su aporte propio es una
decisión de producto tomada por adelantado: “Default to Large Anchored Adaptive
Banner if the user says banner without defining a type”. Reconoce tres tipos: Large Anchored Adaptive (el de por defecto, anclado
arriba o abajo), Anchored Adaptive (igual, sin el tamaño grande) e Inline
Adaptive, que se coloca dentro del contenido y está disponible solo en
Android e iOS. Checklist: definir la vista, fijar el tamaño, registrar eventos de
carga, cargar y verificar. Cierre operativo: recordar reemplazar el ad unit ID de
prueba —ca-app-pub-3940256099942544/2435281174 en iOS— por el propio.
En qué proyecto lo usarías: cualquier app con monetización de bajo impacto donde el anuncio convive con el contenido en pantalla.
google-mobile-ads-interstitial
Qué hace. Anuncios de pantalla completa entre secciones de contenido. Solo
Android e iOS —aquí no hay guía de Unity— y su descripción excluye explícitamente
los rewarded interstitial. Su particularidad es una sección marcada
**CRITICAL:** que se resuelve antes de escribir código: identificar el
archivo donde va el anuncio, y preguntar si no está claro. Es un skill que se
niega a colocar un intersticial donde le parezca. Checklist: cargar, registrar
callbacks, mostrar, verificar. En qué proyecto lo usarías: un juego casual o
una app con transiciones naturales entre secciones, donde el anuncio no
interrumpe una tarea a medias.
google-mobile-ads-rewarded
Qué hace. Anuncios que entregan un ítem in-app a cambio de verlos. También
solo Android e iOS, y también excluye los rewarded interstitial. Comparte la
sección **CRITICAL:** de ubicación con el intersticial, pero su checklist tiene
un paso extra que ningún otro formato tiene: añadir un elemento de UI de
opt-in. No es cosmético: la definición del formato dice que el anuncio se sirve
después de que el usuario acepta explícitamente verlo.
En qué proyecto lo usarías. Un juego con economía de vidas, monedas o pistas, o una app freemium que desbloquea una función a cambio de un vídeo.
IMA SDK
ima-sdk-basics
Qué hace. Inserción de anuncios de vídeo y audio del lado del cliente
—client-side ad insertion— pidiendo anuncios a cualquier servidor compatible con
VAST y gestionando la reproducción con VAST o VMAP. Es uno de los dos
únicos skills del catálogo que repiten license: Apache-2.0 en su propio
frontmatter —el otro es google-cloud-storage-basics— además del LICENSE
global del repositorio, y el único que declara metadata.author: Google LLC. Su descripción excluye
Dynamic Ad Insertion, SSAI y SGAI, y remite a un skill ima-sdk-dai-basics que
no existe en el repositorio: segunda referencia colgante del área.
Cubre más plataformas que ningún otro skill de skills/ads/, con una regla de
lectura estricta —hay que leer todas las guías de la plataforma antes de
integrar:
| Plataforma | Guías a leer |
|---|---|
| Web, HTML5, React, Node, Angular | ima-sdk-web-guide.md, ima-sdk-web-iframe-mode.md, ima-sdk-web-mobile-safari.md |
| Android, Android TV, React Native | ima-sdk-android-guide.md |
| iOS, tvOS, React Native | ima-sdk-ios-guide.md, ima-sdk-tvos-guide.md |
El ciclo de vida que enseña es idéntico en todas ellas:
flowchart TD
A[Importar el SDK] --> B[Inicializacion - warmup, settings, Ad UI]
B --> C[Ad Request - gesto de usuario valido]
C --> D{Resultado de carga}
D -->|exito| E[Obtener AdsManager]
D -->|error fatal temprano| F[Manejar onAdError]
E --> G[Eventos de reproduccion - pausar y reanudar contenido]
G --> H[Cleanup - destruir AdsManager]
F --> H
En web se empieza cargando el loader
https://imasdk.googleapis.com/js/sdkloader/ima3.js con una etiqueta <script>
a nivel de página, con el requisito de que el SDK pueda acceder a
window.top.location.href. En Android es una dependencia Gradle,
com.google.ads.interactivemedia.v3:interactivemedia:3.39.0, enlazada con
ExoPlayer, y las guías apuntan a implementaciones de referencia en repositorios
como googleads/googleads-ima-android. El paso 6 del ciclo, Cleanup, aparece
explícito para evitar fugas: destruir el AdsManager libera recursos. Es el tipo
de detalle que un agente omite si nadie se lo escribe.
En qué proyecto lo usarías. Un reproductor de vídeo propio —web, app o smart TV— que necesita monetizar con cortes publicitarios pedidos a Ad Manager o a cualquier ad server VAST.
Patrones del área que valen para cualquier skill
Leídos juntos, dejan cuatro lecciones aplicables a los skills que escribas tú:
| Lección | Evidencia en skills/ads/ |
|---|---|
La description define fronteras, no solo capacidades | La mayoría incluye un “Don’t use for…” que nombra el alternativo, y el handoff es bidireccional entre quickstart y mcp-setup |
Los references/ cargan tarde | El SKILL.md de banner tiene 47 líneas y decide plataforma antes de leer nada más |
| Los gotchas valen más que los happy paths | Las Critical Gotchas de Data Manager: campos que se confunden, enums mal escritos, respuestas 200 que no son éxito |
| Las referencias se rompen | gma-android-integrate e ima-sdk-dai-basics se nombran pero no existen |
El mecanismo detrás de estas convenciones está desarrollado en el curso de Agent Skills; aquí lo estás viendo aplicado por equipos de producto distintos, sobre APIs que no se parecen entre sí, dentro de un mismo repositorio.
Resumen
skills/ads/agrupa 12 skills, todos concategory: GoogleAds, en cuatro familias: Data Manager API, Google Ads API, Google Mobile Ads SDK e IMA SDK.google-mobile-ads-android-migrate-to-next-genes una migración guiada por tablas de mapeo, con tres reglas críticas: App ID desde el manifest, inicialización en hilo de fondo y toda operación de UI dentro de callbacks envuelta enrunOnUiThread.- Los tres skills de Data Manager forman cadena:
data-manager-api-setupprepara ADC y las dos librerías por lenguaje;audience-ingestionyevent-ingestionimplementan cada carga con su lista de gotchas, e insisten en que un 200 conrequest_idno es éxito: hay que consultarretrieve_request_status. google-ads-api-quickstartcubre las cinco credenciales, prohíbe hardcodear versiones y resuelveUSER_PERMISSION_DENIEDyDEVELOPER_TOKEN_NOT_APPROVED.google-ads-api-mcp-setupinstala el servidor MCP oficial conpipx install google-ads-mcp, exige Python 3.12+, explica el transportestdioy expone tres herramientas de solo lectura:list_accessible_customers,get_resource_metadataysearch. Es el puente hacia el curso de Agent Plugins, ygoogle-ads-api-account-diagnosticslo consume para diagnosticar cuentas con GAQL sin escribir scripts.- Los cuatro skills del Mobile Ads SDK son cortos y delegan todo a
references/por plataforma: banner usa Large Anchored Adaptive por defecto y rewarded añade un paso de opt-in que los demás no tienen.ima-sdk-basicscubre web, Android, iOS y tvOS para inserción client-side con VAST y VMAP, y cita un skill de DAI que todavía no está publicado.
Siguiente: Plugins y marketplace: cómo Google empaqueta y distribuye