games.krow.advertising
SDK para Unity
Publicidad integrada al mundo del juego —gigantografías, pantallas, corpóreos y locuciones— con medición verificable.
El gameplay nunca depende del servicio. Si no hay red, si el manifiesto está expirado o si la firma no valida, cada espacio aplica su reserva y el juego sigue. Ninguna excepción del SDK sale hacia tu código.
Instalación
El paquete no está en el registro público de Unity: se sirve desde el registro de Krow, así que hay que declararlo una vez en el proyecto. Elige una de las dos formas; hacen lo mismo.
Desde la interfaz de Unity recomendada
1 · Declarar el registro
Edit ▸ Project Settings… ▸ Package Manager, y en Scoped Registries pulsa el botón +. Rellena los tres campos exactamente así:
| Name | Krow Games |
|---|---|
| URL | https://ads.krow.games/api/registry |
| Scope(s) | games.krow |
El scope es un prefijo: solo los paquetes que empiezan por games.krow se buscan aquí, y todo lo demás sigue viniendo del registro de Unity.
2 · Instalar el paquete
Window ▸ Package Manager. En el desplegable de arriba a la izquierda —el que suele decir Packages: In Project— elige My Registries. Aparecerá Krow Ads Studio. Selecciónalo y pulsa Install.
Editando el manifiesto a mano
Abre Packages/manifest.json en la raíz del proyecto (no está dentro de Assets/) y añade el bloque scopedRegistries junto a tus dependencies. Deja las dependencias que ya tuvieras.
{
"scopedRegistries": [
{
"name": "Krow Games",
"url": "https://ads.krow.games/api/registry",
"scopes": ["games.krow"]
}
],
"dependencies": {
"games.krow.advertising": "0.6.0"
}
}Comprobar que quedó instalado
En Window ▸ Package Manager ▸ In Project debe aparecer Krow Ads Studio. Si no aparece:
- «Package not found» o el registro no responde
- Comprueba la URL. Es ads.krow.games, no studio.krow.games: la consola y el registro son dos hosts distintos a propósito.
- Un cortafuegos o un bloqueador de anuncios
- Puede cortar cualquier dominio que empiece por ads. Prueba el comando de abajo desde una terminal: si devuelve JSON y Unity no lo ve, el problema está en la red de tu máquina, no en el registro.
- El scope mal escrito
- Es el fallo más común: es games.krow, sin el .advertising del final.
curl -s https://ads.krow.games/api/registry/games.krow.advertisingActualizar
Cambia la versión en Packages/manifest.json, o usa el botón Update del Package Manager. Las versiones publicadas son inmutables: una versión ya publicada nunca cambia de contenido, así que actualizar es siempre un cambio explícito de número.
Credenciales
Necesitas dos credenciales distintas, las dos en la consola ▸ Juegos ▸ tu juego ▸ Entornos y credenciales:
runtime— va dentro del juego.editor— solo la usa la ventana de configuración para traer el catálogo de espacios. No se guarda en el asset ni entra en la build.
- Window ▸ Krow Ads ▸ Configuración y pulsa Crear configuración. Se crea Assets/Resources/KrowAdvertisingSettings.asset, que es donde el SDK lo busca en tiempo de ejecución.
- Pega la clave de tu juego y las dos credenciales.
- Pulsa Sincronizar catálogo de espacios. A partir de ahí los componentes de la escena ofrecen un desplegable con los espacios que existen de verdad, en vez de pedirte la clave escrita a mano.
- Pulsa Probar la credencial del juego: pide un manifiesto real y verifica su firma. Conviene hacer esta comprobación antes de compilar, no después de publicar.
Deja el entorno en development mientras integras. En production las impresiones que genere el editor se cobran a campañas reales.
Puesta en marcha
Una llamada, una vez, al arrancar. El SDK se encarga del refresco del manifiesto, de la caché en disco y del envío de telemetría.
using Krow.Advertising;
public class Arranque : MonoBehaviour
{
void Start()
{
KrowAdvertising.Instance.Initialize();
}
}Espacios
Añade a cada objeto que hará de soporte el componente que corresponda a su tipo de espacio, y elige el espacio en el desplegable.
| Componente | Para espacios de tipo |
|---|---|
AdImagePlacement | valla estática, banner de interfaz, calcomanía, textura de objeto, evento patrocinado |
AdVideoPlacement | pantalla con vídeo |
AdAudioPlacement | zona de audio |
No hace falta más: la escena declara identidad y capacidades, y el manifiesto decide qué campaña y qué creatividad van en cada sitio. Tus componentes nunca contienen lógica comercial.
Comportamiento de reserva
Si no hay nada que mostrar, cada espacio aplica su comportamiento de reserva. Por defecto usa el del proyecto; para decidirlo tú, hereda el componente:
public class MiValla : AdImagePlacement
{
protected override void OnCustomFallback(string motivo)
{
// Tu textura propia, un cartel del juego, lo que sea.
// Se llama también cuando no hay red: es un camino
// normal, no un error.
}
}No veo ningún anuncio
Activa EnableDebugOverlay en la configuración y añade el componente Krow Ads ▸ Debug Overlay a cualquier objeto de la escena. El panel —F9 para mostrarlo y ocultarlo— dice en una frase dónde se rompió la cadena:
- Sin manifiesto
- es la credencial o la red.
- Manifiesto sin asignaciones
- es la consola: no hay campañas asignadas a los espacios de este juego. Revisa Asignaciones.
- Asignaciones que no coinciden con los espacios de la escena
- casi siempre es una clave mal escrita. Sincroniza el catálogo y usa el desplegable.
El overlay no existe en una build de release: se compila solo bajo UNITY_EDITOR o DEVELOPMENT_BUILD, porque mostrar identificadores de creatividades sobre el juego de un jugador es filtrar información comercial. Si dejas el componente puesto por descuido, en release se destruye solo.
Verificación
Cada manifiesto viaja firmado con ECDSA P-256, y el SDK comprueba dos cosas distintas:
- que la firma corresponde al contentHash, y
- que el contenido recibido es el de ese hash.
Las dos hacen falta. Con solo la primera, alterar las asignaciones dejando intactos el hash y su firma pasaría la verificación con la firma legítima del servidor.
Cada asset se verifica además por su sha256, que viaja dentro del manifiesto firmado. Un intermediario no puede sustituir una imagen sin que el cliente lo detecte.
Si prefieres no verificar —por ejemplo contra un servidor de pruebas propio—, desactiva RequireValidSignature. En producción déjalo activado.
Privacidad
La v1 opera con selección contextual: no hay perfilado del jugador ni uso de identificadores publicitarios del dispositivo. Lo que viaja es un identificador de instalación propio del juego, generado localmente, y el país deducido en el servidor a partir de la conexión.
Soporte
Al escribir, incluye lo que dice el overlay de diagnóstico: el estado, la revisión del manifiesto y el recuento de espacios. Con eso se localiza el problema sin ida y vuelta.