Como trabalhar com a API AdBlock Dynamic Domains
As ferramentas AdBlock são cada vez mais sofisticadas, colocando desafios significativos aos editores que procuram maximizar as receitas da publicidade online. Para ajudar a atenuar estes desafios, esta API permite que os editores ajustem dinamicamente os seus scripts com base em domínios activos, reduzindo significativamente o risco de o conteúdo ser bloqueado pelo software AdBlock.
Ao assegurar a entrega de anúncios através de domínios regularmente rodados, os editores podem:
- Manter fluxos de receitas: Evitar interrupções causadas por anúncios bloqueados.
- Melhorar a experiência do utilizador: Fornecer conteúdos publicitários sem problemas, sem desencadear a deteção de AdBlock.
- Gestão automatizada de domínios: Elimine as actualizações manuais com um ciclo de vida de domínios automatizado de 7 dias.
Os novos domínios são gerados de 3 em 3 dias e estão disponíveis através da API. Os domínios terão um ciclo de vida de 6 dias.
- 3 dias de atividade
- 3 dias depreciado
Quando o ciclo de vida expirar, o domínio será desativado. Por motivos de desempenho, recomenda-se que o domínio seja armazenado em cache durante 24 horas antes de solicitar um novo domínio à API.
Esta API só está disponível para as zonas Popunders inline-script e In-Stream Video.
Requisitos
Para utilizar esta API, os editores precisam de :
- Efetuar um pedido GET para o ponto final: https://ads.exoclick.com/adblock-domains.php
- Receberá um novo domínio de serviço de anúncios na resposta
- Em seguida, deve alterar o ponto de extremidade de sindicação utilizado na sua etiqueta de zona de publicidade para o novo ponto de extremidade fornecido na resposta da API.
Etapas de implementação
Passo 1. Obter o domínio ativo
Para recuperar o domínio ativo de forma dinâmica, deve fazer uma chamada API de servidor para servidor. Isto é crucial porque as chamadas API podem ser bloqueadas se forem efectuadas a partir do lado do cliente.
Pedido de servidor para servidor (exemplo PHP)
<?php
function fetchAdblockDomain()
{
$endpoint = 'https://ads.exoclick.com/adblock-domains.php'; // your ads domain
$ch = curl_init($endpoint);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
$response = curl_exec($ch);
if (curl_errno($ch)) {
throw new Exception('Error cURL: ' . curl_error($ch));
}
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode == 200) {
return $response;
} else {
throw new Exception("HTTP Error: {$httpCode} - Response: {$response}");
}
}
try {
echo fetchAdblockDomain();
} catch (Exception $e) {
echo json_encode(['message' => $e->getMessage()]);
}
?>
Resposta esperada da API
{
"success": true,
"message": "Domain found",
"domain": "newsub.newdomain.com" // example
}
Passo 2. Atualizar o seu script
- Obter o script fornecido na etiqueta HTML da Zona
- Utilizar o domínio devolvido pelo ponto final
- Para zonas de vídeo em fluxo contínuo, altere a etiqueta VAST:
- Antes :
https://s.magsrv.com/v1/vast.php?idzone={zoneId}
- After :
https://newsub.newdomain.com/v1/vast.php?idzone={zoneId}
- Antes :
- Para zonas Popunders, altere o syndication_host no script em linha:
- Antes : s.pemsrv.com
- After : newsub.newdomain.com
Detetar o AdBlock
O seguinte trecho de código permite-lhe detetar se o cliente tem o AdBlock ativado. Isto permite-lhe selecionar o domínio adequado para o pedido e acrescentar block=1 para melhorar as estatísticas de seguimento do AdBlock. Veja o exemplo abaixo:
// This script will be blocked by Adblock in case of the client is using it, due to the presence of the "exoclick" and "ads" keywords.
// After loading this script, a JS snipppet will attempt to read a specific variable.
// If the variable is undefined or inaccessible, we can determine that the script as been blocked.
<script src="https://www.exoclick.com/ads.js" type="text/javascript"></script>
<script>
// Initialize the insDomain variable with a default value
let insDomain = 's.magsrv.com'; // Generic host for the network
let adb = ""; // This variable may contain "&block=1" which helps track Adblock Statistics
// Fetch adblock domains using a GET request to the PHP file
async function fetchAdblockDomains() {
try {
// Perform a GET request to fetchAdblockDomain.php (Step 3.A).
// This is a server-to-server request to retreive the Adblock Domain.
const response = await fetch('fetchAdblockDomain.php', {
method: 'GET', // Specify the GET method
});
// Check if the response is successful (status 200)
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
// Parse the response as JSON
const data = await response.json();
console.log('Response data:', data); // Log the response data for debugging
// Call the function to process the domains
displayDomains(data);
} catch (error) {
// Log any errors that occur during the fetch
console.error('Error fetching domains:', error);
}
}
// Process and display the domains, updating insDomain if success is true
function displayDomains(domains) {
console.log('Success status:', domains["success"]); // Log the success status
console.log('Fetched domain:', domains["domain"]); // Log the fetched domain
// Update the insDomain variable if the success flag is true
if (domains["success"] && typeof bait_b3j4hu231 === 'undefined') {
adb = '&block=1';
insDomain = domains["domain"];
console.log('Updated insDomain:', insDomain); // Log the updated value of insDomain
}
// Now you should initialize Fluid Player using the vast tag:
// "https://" + insDomain + "v1/vast.php?idzone=ZONEID" + adb
}
// Automatically call fetchAdblockDomains when the page loads
window.onload = fetchAdblockDomains;
</script>
Exemplo de integração
Passo 1 - Ficheiro PHP do lado do servidor (fetchAdblockDomain.php)
Crie um ficheiro chamado fetchAdblockDomain.php
no seu servidor:
<?php
function fetchAdblockDomain()
{
$endpoint = 'https://ads.exoclick.com/adblock-domains.php';
$ch = curl_init($endpoint);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
$response = curl_exec($ch);
if (curl_errno($ch)) {
throw new Exception('Error cURL: ' . curl_error($ch));
}
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode === 200) {
return $response;
} else {
throw new Exception("HTTP Error: ({$httpCode}) Response: {$response}");
}
}
try {
echo fetchAdblockDomain();
} catch (Exception $e) {
echo json_encode([
'success' => false,
'message' => $e->getMessage()
]);
}
?>
Este script PHP vai buscar um novo domínio para entrega de anúncios.
Etapa 2 - Lógica JavaScript para buscar e aplicar
Na secção <script>
:
<script src="https://www.exoclick.com/ads.js" type="text/javascript"></script>
<script>
let insDomain = 's.magsrv.com'; // default
let adb = '';
let rdm = '';
const ZONE_ID_PRE_ROLL = 'XXXXXXX';
async function fetchAndApplyAdblockDomains() {
try {
const response = await fetch('fetchAdblockDomain.php');
const data = await response.json();
console.log('Response:', data);
if (data.success && typeof bait_b3j4hu231 === 'undefined') {
// AdBlock detected
adb = '&block=1';
insDomain = data.domain;
console.log('AdBlock detected: using API domain', insDomain);
} else if (data.success) {
// No AdBlock
insDomain = 's.magsrv.com';
console.log('No AdBlock: using default domain');
} else {
console.warn('Fallback: Using default domain due to error or no success');
}
} catch (err) {
console.error('Error fetching domain:', err);
// Fallback to default domain
}
// Initialize Fluid Player
fluidPlayer('example-player', {
layoutControls: {
primaryColor: "#28B8ED",
controlForwardBackward: {
show: true,
doubleTapMobile: false
},
timelinePreview: {
file: 'thumbnails.vtt',
type: 'VTT'
}
},
vastOptions: {
adList: [
{
roll: "preRoll",
vastTag: `https://${insDomain}/v1/vast.php?${rdm}idzone=${ZONE_ID_PRE_ROLL}${adb}`,
timer: 5
}
]
}
});
}
window.onload = fetchAndApplyAdblockDomains;
</script>
Resolução de problemas
Problemas comuns
Nenhum domínio devolvido, por exemplo:
{
"success": false,
"message": "Domain not found"
}
Se o sucesso for falso, contacte o suporte.
Registe sempre a resposta do ponto final durante a depuração para identificar potenciais problemas.
For further assistance, contact the support team here.