Реклама в приложении для моментальных игр

Вы можете монетизировать свою игру за счет показа рекламы пользователям. В настоящее время существует два формата объявлений Audience Network, интегрируемых с моментальными играми: видео с вознаграждением и межстраничная реклама. В этом разделе рассказано, как последовательно интегрировать монетизацию рекламы с моментальной игрой.

Доступность форматов

ПлатформаМежстраничная рекламаМежстраничная реклама с вознаграждениемВидео с вознаграждением

Android

iOS

Мобильный браузер

Браузер на компьютере

Необходимые условия

  • Необходимо создать как минимум одно место размещения объявлений в объекте монетизации, связанном с вашей игрой в Monetization Manager.
  • У вас должна быть возможность тестировать свои сборки на мобильном устройстве или на Facebook.com.

Примечание. Доступность Audience Network в некоторых регионах в настоящее время ограничена. Проверьте соответствие требованиям для использования Audience Network в соответствующем процессе регистрации.

Дополнительные сведения см. в руководстве "Как начать монетизировать Моментальные игры в 5 шагов" для Audience Network.

Настроить приложение Facebook

Скачиваемый пример

Если вы уже настроили свое приложение в Monetization Manager и создали места размещения объявлений, можно проверить в действии пример кода, скачав нашу демонстрацию:

Скачать демо рекламы (ZIP)

Показ межстраничного объявления

Межстраничное объявление — это полноэкранная реклама, которая появляется в приложении в промежуточные моменты. Межстраничное объявление запускается автоматически или по нажатию. Реклама с автозапуском воспроизводится сразу после загрузки вставки. По умолчанию ее можно пропустить через 3 секунды. Максимальная продолжительность такой рекламы — две минуты.

Во фрагменте кода ниже показан пример демонстрации межстраничной рекламы.

Чтобы код выполнялся правильно, сначала нужно создать место размещения для рекламы с медийным форматом межстраничной рекламы. Для каждого рекламного блока в приложении следует использовать отдельное место размещения.

Предварительная загрузка рекламы

var preloadedInterstitial = null;

FBInstant.getInterstitialAdAsync(
  '123123123123_123123123123' // Your Ad Placement Id
).then(function(interstitial) {
  // Load the Ad asynchronously
  preloadedInterstitial = interstitial;
  return preloadedInterstitial.loadAsync();
}).then(function() {
  console.log('Interstitial preloaded');
}).catch(function(err){
  console.error('Interstitial failed to preload: ' + err.message);
});

Показ рекламы

preloadedInterstitial.showAsync()
.then(function() {
  // Perform post-ad success operation
  console.log('Interstitial ad finished successfully');        
})
.catch(function(e) {
  console.error(e.message);
});

Показ межстраничной рекламы с вознаграждением

Межстраничная реклама с вознаграждением — это полноэкранное объявление, которое предоставляет пользователю бонус за просмотр рекламы. Для таких объявлений согласие пользователей не требуется.

Во фрагменте кода ниже показан пример демонстрации межстраничной рекламы с вознаграждением.

Чтобы код выполнялся правильно, сначала нужно создать место размещения для рекламы с медийным форматом межстраничной рекламы с вознаграждением. Межстраничная реклама с вознаграждением доступна только для приложений Facebook Gaming, мобильных браузеров и веб-приложений для ПК. Для каждого рекламного блока в приложении следует использовать отдельное место размещения.

Предварительная загрузка рекламы

var preloadedRewardedInterstitial = null;

FBInstant.getRewardedInterstitialAsync(
  '123123123123_123123123123' // Your Ad Placement Id
).then(function(rewarded) {
  // Load the Ad asynchronously
  preloadedRewardedInterstitial = rewarded;
  return preloadedRewardedInterstitial.loadAsync();
}).then(function() {
  console.log('Rewarded interstitial preloaded');
}).catch(function(err){
  console.error('Rewarded interstitial failed to preload: ' + err.message);
});

Показ рекламы

preloadedRewardedInterstitial.showAsync()
.then(function() {
  // Perform post-ad success operation
  console.log('Rewarded interstitial watched successfully');        
})
.catch(function(e) {
  console.error(e.message);
});

Показ рекламного видео с вознаграждением

Видео с вознаграждением — это полноэкранная видеореклама, за просмотр которой пользователи получают бонус: виртуальную валюту, игровые предметы или эксклюзивный контент.

Во фрагменте кода ниже показан пример демонстрации рекламного видео с вознаграждением.

Чтобы код выполнялся правильно, сначала нужно создать место размещения для рекламы с медийным форматом видео с вознаграждением. Для каждого рекламного блока в приложении следует использовать отдельное место размещения.

Предварительная загрузка рекламы

var preloadedRewardedVideo = null;

FBInstant.getRewardedVideoAsync(
  '456456456456_456456456456' // Your Ad Placement Id
).then(function(rewarded) {
  // Load the Ad asynchronously
  preloadedRewardedVideo = rewarded;
  return preloadedRewardedVideo.loadAsync();
}).then(function() {
  console.log('Rewarded video preloaded');
}).catch(function(err){
  console.error('Rewarded video failed to preload: ' + err.message);
});

Показ рекламы

preloadedRewardedVideo.showAsync()
.then(function() {
  // Perform post-ad success operation
  console.log('Rewarded video watched successfully');        
})
.catch(function(e) {
  console.error(e.message);
});

Жизненный цикл экземпляров объявлений

Если предварительно загрузить три экземпляра объявлений одного типа и не показать их, попытка создать новое объявление завершится ошибкой. После успешной загрузки объявление действительно в течение 60 минут.

Вот пример кода, который поможет понять, как это работает, при условии, что всё настроено правильно (указаны действительные ID мест размещения рекламы и т. п.) и в работе сети нет неполадок:

var preloadedInterstitial1 = null;
var preloadedInterstitial2 = null;
var preloadedInterstitial3 = null;
var preloadedRewardedVideo = null;

// PRELOAD PHASE
FBInstant.getInterstitialAdAsync(
  '123123123123_123123123123'
).then(function(interstitial) {
  // This should get called, meaning you now have 1 ad instance.
  preloadedInterstitial1 = interstitial;
  return preloadedInterstitial1.loadAsync();
}).then(function() {
  // This should get called unless we do not have ads to serve.
  console.log('Interstitial 1 preloaded')
}).catch(function(err){
  // This would be called only if we do not have ads to serve.
  // The error would then be ADS_NO_FILL.
  // You can try to reload the ad after some time (ideally over 30 seconds).
  // If you get ADS_NO_FILL 3 times in a row, the instance will be disabled.
  console.error('Interstitial 1 failed to preload: ' + err.message);
  // You can try to reload after 30 seconds (2nd attempt)
  setTimeout(function () { handleAdsNoFill(preloadedInterstitial1, 2); }, 30 * 1000);
});

// Here is how the function to handle ADS_NO_FILL would look like
function handleAdsNoFill (adInstance, attemptNumber) {
  if (attemptNumber > 3) {
    // You can assume we will not have to serve in the current session, no need to try
    // to load another ad.
    return;
  } else {
    adInstance.loadAsync().then(function() {
      // This should get called if we finally have ads to serve.
      console.log('Interstitial preloaded')
    }).catch(function(err){
      console.error('Interstitial failed to preload: ' + err.message);
      // You can try to reload after 30 seconds
      setTimeout(function () {
        handleAdsNoFill(adInstance, attemptNumber+1);
      }, 30 * 1000);
    });
  }
}

// As we covered ADS_NO_FILL, from now on let's assume we have ads to serve.
FBInstant.getInterstitialAdAsync(
  // You can re-use the same Ad Placement Id as long as it is of the valid type:
  // interstitial or rewarded video (here, it has to be interstitial)
  '123123123123_123123123123'
).then(function(interstitial) {
  // This should get called, meaning you now have 2 ad instances.
  preloadedInterstitial2 = interstitial;
  return preloadedInterstitial2.loadAsync();
}).then(function() {
  console.log('Interstitial 2 preloaded')
});

FBInstant.getRewardedVideoAsync(
  '456456456456_456456456456'
).then(function(rewarded) {
  // This should get called, meaning you now have 3 ad instances.
  preloadedRewardedVideo = rewarded;
  return preloadedRewardedVideo.loadAsync();
}).then(function() {
  console.log('Rewarded video preloaded')
});

FBInstant.getInterstitialAdAsync(
  '123123123123_123123123123'
).catch(function(err){
  // This should be called now because you already have 3 ad instances.
  // The error would then be ADS_TOO_MANY_INSTANCES.
  console.error('Interstitial 3 failed to preload: ' + err.message);
});

// SHOWING ADS (at a timing that makes sense in the workflow of your game)
preloadedInterstitial1.showAsync()
.then(function() {
  // This should get called, meaning you now have 2 ad instances.
  console.log('Interstitial ad 1 finished successfully');        
});

// A bit later, assuming you did not preload a new instance yet.
preloadedInterstitial2.showAsync()
.then(function() {
  // This should get called, meaning you now have 1 ad instance.
  console.log('Interstitial ad finished successfully');        
});

// A bit later, assuming you did not preload a new instance yet.
preloadedRewardedVideo.showAsync()
.then(function() {
  // This should get called, meaning you now have no ad instance.
  console.log('Rewarded video watched successfully');        
});

Рекомендации и устранение неполадок

Приведенная ниже информация относится к моментальным играм. Также ознакомьтесь с нашей статистикой Audience Network.

Выбирайте подходящее время для показа рекламы. Следите за тем, чтобы объявления не мешали пользователю играть.

Загружайте объявления заранее. Не пытайтесь в последнюю минуту запросить, загрузить и одновременно показать объявление. Вместо этого загрузите несколько экземпляров объявлений, чтобы в момент, когда пользователь захочет их посмотреть, ему не пришлось ждать слишком долго.

Проверьте поддержку. В некоторых игровых сеансах реклама не поддерживается (например, при игре в браузере на компьютере). Прежде чем отправлять запрос на объявление, всегда проверяйте, поддерживается ли реклама, с помощью FBInstant.getSupportedAPIs().

Реализуйте надлежащую обработку событий отсутствия заполнения. В определенных условиях место размещения объявления не заполняется. В этом случае вы получаете отказ с сообщением об ошибке ADS_NO_FILL. Убедитесь, что игра корректно обрабатывает такие ситуации, покажите понятное сообщение и подождите 30 секунд, прежде чем отправлять запрос для ещё одного объявления того же типа.

Тестируйте объявления перед отправкой. Разработчик приложения может запрашивать рекламу на мобильном устройстве и проверять работу своей интеграции ещё до отправки приложения на проверку Audience Network.

Отслеживайте показы рекламы. Для отслеживания показов рекламы используйте специально настроенные события после разрешения showAsync.

Не используйте слишком много объектов AdInstances. Методы getRewardedVideoAsync и getInterstitialAdAsync возвращают объект экземпляра объявления AdInstance, который можно предварительно загрузить. Если вы предварительно загрузили три и более экземпляра объявлений одного типа, но не показали их, все последующие попытки создать объект AdInstance будут завершаться ошибкой. Это означает, что вызовы getRewardedVideoAsync и getInterstitialAdAsync будут возвращать ошибку с кодом ADS_TOO_MANY_INSTANCES до тех пор, пока не будет вызван метод showAsync или пользователь не перезапустит Messenger.