Ниже приведены некоторые рекомендации для разработчиков по интеграции SDK в Android. Они помогут вашей команде разобраться в особенностях SDK Audience Network, повысить эффективность процесса интеграции и поддерживать решение в актуальном состоянии после запуска.
loadAd
повторно, только если объявление было отклонено или при его загрузке произошла ошибка (это не касается баннерной рекламы).Даже если в обратном вызове сообщается об отклонении объявления или ошибке, необходимо задать максимальное количество попыток, чтобы они не повторялись бесконечно. Метод onError(Ad, AdError)
вызывается независимо от того, по какой причине произошел сбой загрузки. Например, при отсутствии подключения к Интернету загрузка объявления должна прекращаться по достижении максимального количества попыток.
В SDK Audience Network метод loadAd
следует вызывать с осторожностью для любого типа рекламы, кроме баннерной. Нельзя вызывать loadAd
во время показа объявления. Лучше всего реализовать интерфейс AdListener
, чтобы получать уведомления об отклонении, завершении показа и закрытии объявления, а также об ошибках. Это позволит вызывать метод loadAd
повторно, не опасаясь проблем.
loadAd
в обратном вызове onInterstitialDismissed
.private InterstitialAd mInterstitialAd; private static final MAX_NUMBER_OF_RETRIES = 3; private boolean shouldLoadAd = true; private int retryCount = 0; @Override protected void onCreate(Bundle savedInstanceState) { // call the super class onCreate super.onCreate(savedInstanceState); ... mInterstitialAd = new InterstitialAd(this, "YOUR_PLACEMENT_ID"); InterstitialAdListener interstitialAdListener = new InterstitialAdListener() { ... @Override public void onInterstitialDismissed(Ad ad) { // Interstitial dismissed callback if (shouldLoadAd) { /* Change shouldLoadAd value to false, or a new interstitial ad will show immediately when previous interstitial ad gets dismissed. */ shouldLoadAd = false; mInterstitialAd.loadAd(); } } @Override public void onError(Ad ad, AdError adError) { // Ad error callback // Stop retrying when it reaches to MAX_NUMBER_OF_RETRIES if(retryCount < MainActivity.MAX_NUMBER_OF_RETRIES) { retryCount += 1; mInterstitialAd.loadAd(); } } ... }; mInterstitialAd.loadAd( mInterstitialAd.buildLoadAdConfig() .withAdListener(interstitialAdListener) .build()); ... }
onError
для NativeAd
.private static final MAX_NUMBER_OF_RETRIES = 3; private NativeAd mNativeAd; private int retryCount = 0; @Override protected void onCreate(Bundle savedInstanceState) { // call the super class onResume super.onCreate(savedInstanceState); ... mNativeAd = new NativeAd(this, "YOUR_PLACEMENT_ID"); NativeAdListener nativeAdListener = new AdListener() { ... @Override public void onError(Ad ad, AdError error) { // Ad error callback // Stop retrying when it reaches to MAX_NUMBER_OF_RETRIES if (retryCount < MainActivity.MAX_NUMBER_OF_RETRIES) { retryCount += 1; mNativeAd.loadAd(); } } ... }; mNativeAd.loadAd( mNativeAd.buildLoadAdConfig() .withAdListener(nativeAdListener) .build()); ... }
private Button showNativeAdButton; @Override public void onCreate(Bundle savedInstanceState) { // call the super class onResume super.onCreate(savedInstanceState); ... showNativeAdButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // Create a native ad request with a placement ID nativeAd = new NativeAd(NativeAdSampleActivity.this, "YOUR_PLACEMENT_ID"); // Create a listener to get notified when the ad was loaded. NativeAdListener nativeAdListener = new AdListener() { ... } // Initiate a request to load an ad. nativeAd.loadAd( nativeAd.buildLoadAdConfig() .withAdListener(nativeAdListener) .build()); } }); ... }
loadAd
в некоторых обратных вызовах Android, таких как onResume()
или onStart()
. Это может привести к тому, что loadAd
будет вызываться раз за разом, причем последнее объявление не будет удаляться из памяти.@Override protected void onCreate(Bundle savedInstanceState) { // call the super class onResume super.onCreate(savedInstanceState); ... mNativeAd = new NativeAd(this, "YOUR_PLACEMENT_ID"); ... } @Override protected void onResume() { super.onResume(); ... // DON'T DO THIS! mNativeAd.loadAd( mNativeAd.buildLoadAdConfig() .withAdListener(NativeAdSampleActivity.this) .build()); }
loadAd
в обратном вызове onError. Вот пример того, как не надо делать: При отсутствии подключения к Интернету loadAd
будет вызываться раз за разом, пока не произойдет сбой приложения.private NativeAd mNativeAd; private boolean shouldRetry = true; @Override protected void onCreate(Bundle savedInstanceState) { // call the super class onResume super.onCreate(savedInstanceState); ... mNativeAd = new NativeAd(this, "YOUR_PLACEMENT_ID"); NativeAdListener nativeAdListener = new AdListener() { ... @Override public void onError(Ad ad, AdError error) { // Ad error callback // Remember to change shouldRetry to false, or DON'T implement like this! if (shouldRetry) { mNativeAd.loadAd(); } } ... }; mNativeAd.loadAd( mNativeAd.buildLoadAdConfig() .withAdListener(NativeAdSampleActivity.this) .build()); ... }
Тестирование интеграции рекламы в приложение
Отправьте приложение на проверку.
Как только мы получим запрос рекламы от вашего приложения или сайта, мы проверим его на соответствие Политике Audience Network и Нормам сообщества Facebook. Подробнее о нашем процессе проверки см. здесь.
Дополнительные ресурсы |
Руководство по началу работыТехническое руководство по началу работы с Audience Network | Справка по APIСправка по Facebook SDK для iOS |