Добавление межстраничной рекламы в приложение для Android

Audience Network позволяет монетизировать приложения Android за счет рекламы Facebook. Межстраничная реклама — это полноэкранное объявление, которое можно показывать в приложении. Обычно межстраничные объявления показываются в момент перехода в приложении, например после завершения уровня игры или загрузки истории в приложении с новостями.

Прежде чем продолжить, обязательно ознакомьтесь с руководствами по началу работы с Audience Network и Android.

Пошаговые инструкции

Шаг 1. Инициализация межстраничной рекламы в действии

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

Инициализация SDK Audience Network

Этот метод добавлен в SDK Audience Network 5.1 для Android.

Начиная с версии 5.3.0 явная инициализация SDK Audience Network для Android обязательна. Информацию о том, как инициализировать SDK Audience Network для Android, см. в этом документе.

Чтобы создавать рекламные объекты и загружать рекламу, необходимо инициализировать SDK Audience Network. Рекомендуется сделать это при запуске приложения.

public class YourApplication extends Application {
    ...
    @Override
    public void onCreate() {
        super.onCreate();
        // Initialize the Audience Network SDK
        AudienceNetworkAds.initialize(this);       
    }
    ...
}

Шаг 1. Инициализация межстраничной рекламы в действии

Чтобы импортировать SDK Facebook Ads, добавьте в начало действия следующий код:

import com.facebook.ads.*;

Инициализируйте InterstitialAd.

private InterstitialAd interstitialAd;

@Override
public void onCreate(Bundle savedInstanceState) {
...
  // Instantiate an InterstitialAd object. 
  // NOTE: the placement ID will eventually identify this as your App, you can ignore it for
  // now, while you are testing and replace it later when you have signed up.
  // While you are using this temporary code you will only get test ads and if you release
  // your code like this to the Google Play your users will not receive ads (you will get a no fill error).
  interstitialAd = new InterstitialAd(this, "YOUR_PLACEMENT_ID");
...  

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

Сценарий 1. Создайте InterstitialAdListener, загрузите рекламу и покажите ее сразу же после загрузки.

public class InterstitialAdActivity extends Activity {

    private final String TAG = InterstitialAdActivity.class.getSimpleName();
    private InterstitialAd interstitialAd;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Instantiate an InterstitialAd object.
        // NOTE: the placement ID will eventually identify this as your App, you can ignore it for
        // now, while you are testing and replace it later when you have signed up.
        // While you are using this temporary code you will only get test ads and if you release
        // your code like this to the Google Play your users will not receive ads (you will get a no fill error).
        interstitialAd = new InterstitialAd(this, "YOUR_PLACEMENT_ID");
        // Create listeners for the Interstitial Ad
        InterstitialAdListener interstitialAdListener = new InterstitialAdListener() {
            @Override
            public void onInterstitialDisplayed(Ad ad) {
                // Interstitial ad displayed callback
                Log.e(TAG, "Interstitial ad displayed.");
            }

            @Override
            public void onInterstitialDismissed(Ad ad) {
                // Interstitial dismissed callback
                Log.e(TAG, "Interstitial ad dismissed.");
            }

            @Override
            public void onError(Ad ad, AdError adError) {
                // Ad error callback
                Log.e(TAG, "Interstitial ad failed to load: " + adError.getErrorMessage());
            }

            @Override
            public void onAdLoaded(Ad ad) {
                // Interstitial ad is loaded and ready to be displayed
                Log.d(TAG, "Interstitial ad is loaded and ready to be displayed!");
                // Show the ad
                interstitialAd.show();
            }

            @Override
            public void onAdClicked(Ad ad) {
                // Ad clicked callback
                Log.d(TAG, "Interstitial ad clicked!");
            }

            @Override
            public void onLoggingImpression(Ad ad) {
                // Ad impression logged callback
                Log.d(TAG, "Interstitial ad impression logged!");
            }
        };

        // For auto play video ads, it's recommended to load the ad
        // at least 30 seconds before it is shown
        interstitialAd.loadAd(
                interstitialAd.buildLoadAdConfig()
                        .withAdListener(interstitialAdListener)
                        .build());
    }
}

В межстраничной рекламе используются креативы больших размеров, поэтому рекомендуем заранее вызвать loadAd(...), а затем show() в нужный момент.

Сценарий 2. Покажите рекламу через несколько секунд или минут после загрузки. Перед показом необходимо проверить, не была ли реклама признана недействительной.

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

Используйте код ниже, но не копируйте его в свой проект. Это только пример.

public class InterstitialAdActivity extends Activity {

    private InterstitialAd  interstitialAd ;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Instantiate an InterstitialAd object. 
        // NOTE: the placement ID will eventually identify this as your App, you can ignore it for
        // now, while you are testing and replace it later when you have signed up.
        // While you are using this temporary code you will only get test ads and if you release
        // your code like this to the Google Play your users will not receive ads (you will get a no fill error).
        interstitialAd = new InterstitialAd(this, "YOUR_PLACEMENT_ID");
        InterstitialAdListener interstitialAdListener = new InterstitialAdListener() {
            ...
        };
        // load the ad
        interstitialAd.loadAd(
                interstitialAd.buildLoadAdConfig()
                        .withAdListener(interstitialAdListener)
                        .build());
    }

    private void showAdWithDelay() {
       /**
        * Here is an example for displaying the ad with delay;
        * Please do not copy the Handler into your project
       */
       // Handler handler = new Handler();
       handler.postDelayed(new Runnable() {
           public void run() {
                // Check if interstitialAd has been loaded successfully
               if(interstitialAd == null || !interstitialAd.isAdLoaded()) {
                   return;
               }
                // Check if ad is already expired or invalidated, and do not show ad if that is the case. You will not get paid to show an invalidated ad.
               if(interstitialAd.isAdInvalidated()) {
                   return;
               }
               // Show the ad
                interstitialAd.show(); 
           }
       }, 1000 * 60 * 15); // Show the ad after 15 minutes
    }
}

Наконец, чтобы освободить ресурсы, используемые InterstitialAd, добавьте в функцию onDestroy() действия следующий код:

@Override
protected void onDestroy() {
    if (interstitialAd != null) {
        interstitialAd.destroy();
    }
    super.onDestroy();
}

Если вы используете эмулятор Google Android по умолчанию, добавьте перед загрузкой тестовой рекламы следующую строку кода:
AdSettings.addTestDevice("HASHED ID");.

Когда вы будете впервые запрашивать загрузку рекламы на устройство, воспользуйтесь хэшированным ID, записанным в LogCat.

Для Genymotion и физических устройств выполнять этот шаг не нужно. Если вы хотели бы выполнить тестирование с настоящей рекламой, изучите Руководство по тестированию.

Запустите приложение. Если всё настроено правильно, вы увидите межстраничную рекламу.

Аппаратное ускорение для видеорекламы

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

  • видео в нативной рекламе;
  • видео во вставках;
  • рекламных вставок в видео;
  • видео с бонусами.

Аппаратное ускорение включено по умолчанию, если уровень API Target будет не менее 14 (Ice Cream Sandwich, Android 4.0.1), но помимо этого вы можете напрямую включить эту функцию на уровне приложения или действий.

Уровень приложения

Чтобы включить аппаратное ускорение для всего приложения, в файле манифеста Android добавьте следующий атрибут в тег <application>:

<application android:hardwareAccelerated="true" ...>

Уровень действий

Если вы хотите включить эту функцию только для определенных действий в приложении, в файле манифеста Android добавьте следующую функцию в тег <activity>. В примере ниже аппаратное ускорение включено для действия AudienceNetworkActivity, которое используется для обработки рекламных вставок и видео с бонусами.

<activity android:name="com.facebook.ads.AudienceNetworkActivity" android:hardwareAccelerated="true" .../>

Дальнейшие действия