67656fa32d
Se añade la integración del script de Monetag (MultiTag: popunder + push + in-page push + vignette) como alternativa a AdSense para monetizar sin depender de que Google apruebe el sitio. Tres interruptores (ver components/Monetag.tsx): 1. `MONETAG_SRC` + `MONETAG_ZONE` en el .env (no versionadas, documentadas en el README). Cualquiera de las dos vacía = no se carga nada. Se leen en el servidor y se pasan como props, así que encender/apagar es tocar el .env + reiniciar, SIN rebuild. Ahora mismo van vacías: la integración queda instalada pero inerte hasta que se pegue la zona del panel de Monetag. 2. El filtro común de publicidad, extraído a lib/ads.ts (`shouldServeAds`): fuera para admins y para quien sea rango 2+ o haya pagado alguna vez. Antes esta lógica vivía dentro de AdSense.tsx; ahora la comparten la etiqueta de AdSense y el script de Monetag desde un único sitio, para que no se puedan desincronizar. 3. El consentimiento «Marketing» del banner, en components/MonetagScript.tsx (cliente). A diferencia de la etiqueta de AdSense, MultiTag escribe cookies y pide permisos, así que NO puede cargarse sin aceptar la categoría. Mismo patrón que Analytics.tsx: useConsent reacciona en caliente, arranca en false. El push de MultiTag necesitará además un sw.js servido desde la raíz del dominio (public/sw.js, descargado del panel). Sin él, el resto de formatos funcionan igual. Verificado: con las variables vacías la web queda idéntica (ni script de Monetag ni cambios) y la etiqueta de AdSense sigue intacta. Con una zona de prueba, el filtro de servidor deja pasar a anónimos y rango 1 sin pagos, y corta a los admins. Sin consentimiento no se inyecta ningún <script> (la zona solo viaja como prop inerte en el payload de React). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
33 lines
1.5 KiB
TypeScript
33 lines
1.5 KiB
TypeScript
import { shouldServeAds } from '@/lib/ads'
|
|
import { MonetagScript } from './MonetagScript'
|
|
|
|
/**
|
|
* Script de anuncios de Monetag (MultiTag: popunder + push + in-page push + vignette).
|
|
*
|
|
* TRES interruptores:
|
|
*
|
|
* 1. `MONETAG_SRC` y `MONETAG_ZONE` en el .env. Si falta cualquiera de los dos no se
|
|
* carga nada: ese es el interruptor de encendido/apagado. Los dos valores salen
|
|
* del panel de Monetag (Sites → tu canal → Get Tag) y son propios de cada zona,
|
|
* por eso el `src` también es variable y no está fijado en el código.
|
|
* Sin prefijo NEXT_PUBLIC_: se leen en el servidor y se pasan como props, así que
|
|
* activar o desactivar es tocar el .env + reinicio, SIN rebuild.
|
|
* 2. El filtro común de publicidad (`shouldServeAds`, ver lib/ads.ts): fuera para
|
|
* admins y para quien sea rango 2+ o haya pagado alguna vez.
|
|
* 3. El consentimiento «Marketing» del visitante, en <MonetagScript/> (cliente).
|
|
*
|
|
* OJO con el push de MultiTag: además de esto necesita un `sw.js` servido desde la
|
|
* RAÍZ del dominio (https://www.nightspire.gg/sw.js). Se descarga del panel de
|
|
* Monetag y se deja en `public/sw.js`, que Next sirve tal cual en la raíz. Sin ese
|
|
* fichero el resto de formatos funcionan, pero las notificaciones push no.
|
|
*/
|
|
export async function Monetag() {
|
|
const src = process.env.MONETAG_SRC
|
|
const zone = process.env.MONETAG_ZONE
|
|
if (!src || !zone) return null
|
|
|
|
if (!(await shouldServeAds())) return null
|
|
|
|
return <MonetagScript src={src} zone={zone} />
|
|
}
|