Skip to main content

Comment travailler avec AdBlock Dynamic Domains API

Les outils AdBlock sont de plus en plus sophistiqués, ce qui pose des problèmes importants aux éditeurs qui cherchent à maximiser les revenus de la publicité en ligne. Pour atténuer ces difficultés, cette API permet aux éditeurs d'ajuster dynamiquement leurs scripts en fonction des domaines actifs, ce qui réduit considérablement le risque que le contenu soit bloqué par le logiciel AdBlock.

En garantissant la diffusion des publicités par le biais de domaines régulièrement renouvelés, les éditeurs peuvent :

  • Maintenir les flux de revenus: Prévenir les interruptions causées par les publicités bloquées.
  • Amélioration de l'expérience utilisateur: Diffusion transparente du contenu publicitaire sans déclencher la détection d'AdBlock.
  • Gestion automatisée des domaines: Éliminez les mises à jour manuelles grâce à un cycle de vie automatisé de 7 jours pour les domaines.

De nouveaux domaines sont générés tous les 3 jours et sont disponibles via l'API. Les domaines ont un cycle de vie de 6 jours.

  • 3 jours actifs
  • 3 jours déprécié

Une fois le cycle de vie expiré, le domaine sera désactivé. Pour des raisons de performance, il est recommandé de mettre le domaine en cache pendant 24 heures avant de demander un nouveau domaine à l'API.

Cette API n'est disponible que pour les zones Popunders inline-script et In-Stream Video.

Exigences

Pour utiliser cette API, les éditeurs doivent :

  • Effectuer une requête GET vers le point de terminaison : https://ads.exoclick.com/adblock-domains.php
  • Vous recevrez un nouveau domaine de diffusion d'annonces dans la réponse
  • Vous devez ensuite modifier le point de terminaison de syndication utilisé sur votre balise de zone publicitaire pour le remplacer par le nouveau point de terminaison fourni dans la réponse de l'API.

Étapes de la mise en œuvre

Étape 1. Récupérer le domaine actif

Pour récupérer le domaine actif de manière dynamique, vous devez effectuer un appel API de serveur à serveur. Ceci est crucial car les appels API peuvent être bloqués s'ils sont effectués depuis le côté client.

Requête serveur à serveur (exemple 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()]);
}
?>

Réponse attendue de l'API

{
"success": true,
"message": "Domain found",
"domain": "newsub.newdomain.com" // example
}

Étape 2. Mettre à jour votre script

  • Obtenir le script fourni sur la balise HTML Zone
  • Utiliser le domaine renvoyé par le point de terminaison
  • Pour les zones In-Stream Video, modifiez le VAST Tag :
    • Avant : https://s.magsrv.com/v1/vast.php?idzone={zoneId}
    • After : https://newsub.newdomain.com/v1/vast.php?idzone={zoneId}
  • Pour les zones Popunders, changez le syndication_host sur le script en ligne :
    • Avant : s.pemsrv.com
    • Après : newsub.newdomain.com

Détection d'AdBlock

L'extrait de code suivant vous permet de détecter si le client a activé AdBlock. Cela vous permet de sélectionner le domaine approprié pour la requête et d'ajouter block=1 pour améliorer les statistiques de suivi d'AdBlock. Voir l'exemple ci-dessous :

// 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>

Exemple d'intégration

Étape 1 - Fichier PHP côté serveur (fetchAdblockDomain.php)

Créez un fichier nommé fetchAdblockDomain.php sur votre serveur :

<?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()
]);
}
?>

Ce script PHP récupère un nouveau domaine pour la diffusion d'annonces.

Étape 2 - Logique JavaScript pour la recherche et l'application

Dans la section <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>

Dépannage

Problèmes communs

Aucun domaine n'a été renvoyé, par exemple :

{
"success": false,
"message": "Domain not found"
}

Si le résultat est faux, contactez le service d'assistance.

Pendant le débogage, enregistrez toujours la réponse du point d'accès afin d'identifier les problèmes potentiels.

For further assistance, contact the support team here.