Как работать с AdBlock Dynamic Domains API
Инструменты AdBlock становятся все более изощренными, создавая серьезные проблемы для издателей, стремящихся максимизировать доходы от онлайн-рекламы. Чтобы смягчить эти проблемы, данный API позволяет издателям динамически корректировать свои скрипты на основе активных доменов, значительно снижая риск блокировки контента программным обеспечением AdBlock.
Обеспечивая доставку рекламы через регулярно ротируемые домены, издатели могут:
- Поддержание потока доходов: Предотвращение прерываний, вызванных блокировкой рекламы.
- Улучшение пользовательского опыта: Предоставляйте рекламный контент без сбоев, не вызывая обнаружения AdBlock.
- Автоматизация управления доменами: Устранение ручного обновления с помощью автоматизированного 7-дневного жизненного цикла домена.
Новые домены генерируются каждые 3 дня и доступны через API. Жизненный цикл доменов составляет 6 дней.
- 3 дня активной деятельности
- 3 дня устарело
По истечении жизненного цикла домен будет деактивирован. По соображениям производительности рекомендуется кэшировать домен в течение 24 часов, прежде чем запрашивать новый домен через API.
Этот API доступен только для зон Popunders inline-script и In-Stream Video.
Требования
Чтобы использовать этот API, издателям необходимо :
- Выполните GET-запрос к конечной точке: https://ads.exoclick.com/adblock-domains.php
- В ответ вы получите новый домен для обслуживания рекламы
- Затем вы должны изменить конечную точку синдикации, используемую в теге рекламной зоны, на новую, указанную в ответе API.
Шаги по реализации
Шаг 1. Получение активного домена
Чтобы получить активный домен динамически, вы должны сделать вызов API с сервера на сервер. Это очень важно, поскольку вызовы API могут быть заблокированы, если они выполняются со стороны клиента.
Запрос от сервера к серверу (пример 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()]);
}
?>
Ожидаемый ответ от API
{
"success": true,
"message": "Domain found",
"domain": "newsub.newdomain.com" // example
}
Шаг 2. Обновите сценарий
- Получите скрипт, указанный в HTML-теге Zone
- Используйте домен, полученный от конечной точки
- Для зон In-Stream Video измените тег VAST Tag:
- Перед :
https://s.magsrv.com/v1/vast.php?idzone={zoneId}
- После :
https://newsub.newdomain.com/v1/vast.php?idzone={zoneId}
- Перед :
- Для зон Popunders измените syndication_host во встроенном скрипте:
- Перед : s.pemsrv.com
- После : newsub.newdomain.com
Обнаружение AdBlock
Следующий фрагмент кода позволяет определить, включен ли у клиента AdBlock. Это позволит вам выбрать соответствующий домен для запроса и добавить block=1 для улучшения статистики отслеживания AdBlock. Смотрите пример ниже:
// 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>
Пример интеграции
Шаг 1 - PHP-файл на стороне сервера (fetchAdblockDomain.php)
Создайте на своем сервере файл с именем fetchAdblockDomain.php
:
<?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()
]);
}
?>
Этот PHP-скрипт подбирает новый домен для доставки рекламы.
Шаг 2 - Логика JavaScript для получения и применения данных
В разделе <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>
Устранение неполадок
Общие вопросы
Например, не возвращается домен:
{
"success": false,
"message": "Domain not found"
}
Если результат ложный, обратитесь в службу поддержки.
Всегда регистрируйте ответ конечной точки во время отладки, чтобы выявить потенциальные проблемы.
For further assistance, contact the support team here.