앵커 적응형 배너

적응형 배너는 광고 크기를 기기별로 최적화하여 실적을 극대화하는 차세대 반응형 광고입니다. 고정된 높이만 지원하는 스마트 배너를 개선한 적응형 배너를 사용하면 개발자가 광고 너비를 지정하고 이를 통해 최적의 광고 크기를 결정할 수 있습니다.

최적의 광고 크기를 선택하기 위해 적응형 배너는 고정된 높이 대신 고정된 가로세로 비율을 사용합니다. 따라서 배너 광고가 기기에서 좀 더 일관성 있는 화면 크기를 차지하도록 게재되며 실적을 개선할 수 있는 기회의 너비가 넓어집니다.

적응형 배너로 작업할 때는 지정된 기기 및 너비에 대해 항상 일정한 크기가 반환됩니다. 특정 기기에서 레이아웃을 테스트한 후에는 광고 크기가 변경되지 않습니다. 그러나 배너 소재의 크기는 기기에 따라 달라질 수 있습니다. 따라서 레이아웃에서 광고 높이 변화를 수용하도록 설정하는 것이 좋습니다. 드문 경우이지만 적응형 광고의 전체 크기가 표시되지 않을 수 있으며, 이때 표준 크기의 광고 소재가 이 슬롯의 중앙에 대신 배치됩니다.

적응형 배너를 사용하는 것이 효과적인 경우

적응형 배너는 업계 표준 320x50 배너 크기를 직접 교체하고 스마트 배너 형식을 대체할 수 있도록 설계되었습니다.

이러한 배너 크기는 일반적으로 화면 상단이나 하단에 고정되는 앵커 광고 배너로 사용됩니다. 앵커 광고 배너의 경우 적응형 배너를 사용할 때의 가로세로 비율은 표준 320x50 광고와 비슷합니다(아래 스크린샷 참고).


320x50 배너

스마트 배너

적응형 배너

적응형 배너는 사용 가능한 화면 크기를 더 효과적으로 사용합니다. 또한 스마트 배너와 비교하자면 다음과 같은 이유 때문에 적응형 배너를 사용하는 것이 더 좋습니다.

  • 전체 화면 너비가 아닌 제공된 너비를 사용하여 디스플레이 컷아웃을 고려할 수 있도록 지원합니다.

  • 한 가지 높이만 사용하지 않고 기기에 맞게 높이를 최적화하므로 다양한 크기의 기기에 큰 문제 없이 광고를 게재할 수 있습니다.

구현 참고사항

앱에서 적응형 배너를 구현하는 경우 다음 사항에 유의하세요.

  • 광고가 게재될 보기의 너비를 알아야 하며, 기기 너비와디스플레이 컷아웃 을 고려해야 합니다.
  • 적응형 크기가 적용되도록 새 광고 항목을 업데이트하거나 만들어야 할 수 있습니다. 자세히 알아보기
  • 광고 슬롯을 채울 수 없는 작은 크기의 광고가 게재되는 경우Ad Manager 정책을 준수하도록 광고 보기 배경이 불투명한지 확인하세요.

  • 최신 버전의 Google 모바일 광고 SDK를 사용 중인지 확인하세요. 미디에이션의 경우 최신 버전의 미디에이션 어댑터를 사용하세요.

  • 적응형 배너 크기는 전체 너비를 사용할 때 가장 효과적으로 작동하도록 설계되었습니다. 대부분의 경우 이 값은 사용 중인 기기 화면의 전체 너비입니다. 이때, 해당디스플레이 컷아웃을 고려해야 합니다.

  • Google 모바일 광고 SDK는 AdSize에서 지정된 너비에 최적화된 광고 높이를 반환합니다.

  • 적응형 배너의 광고 크기를 표시하는 방법에는 가로 모드, 세로 모드, 광고 게재 시의 기기 방향 등 세 가지가 있습니다. 자세한 내용은 아래 전체 API 문서를 참고하세요.

  • 특정 기기에서 특정 너비에 대해 반환되는 크기는 항상 동일하므로 특정 기기에서 레이아웃을 테스트한 후에는 광고 크기가 변경되지 않습니다.

  • 앵커 광고 배너의 높이는 기기 높이의 15% 를 초과할 수 없으며, 50dp이상이어야 합니다.

빠른 시작

간단한 적응형 앵커 배너를 구현하려면 아래 단계를 따르세요.

  1. an AdManagerAdView 객체를 만들고 광고 단위 ID를 설정합니다.

  2. 적응형 배너 광고 크기를 가져옵니다. 가져오는 크기는 적응형 배너를 요청하는 데 사용됩니다. 적응형 광고 크기를 가져오려는 경우 다음 사항에 유의해야 합니다.

    1. 사용 중인 기기의 너비를 가져오세요. 화면의 전체 너비를 사용하지 않으려는 경우에는 너비를 직접 설정하세요.
    2. AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(context, width) 처럼 광고 크기 클래스에 적절한 정적 메서드를 사용하여 선택한 방향에 대한 적응형 AdSize 객체를 가져오세요.
    3. 배너 광고 보기에서 광고 크기를 설정해야 합니다. 이때로 설정하고,

    Google에서는 여기에 설명된 적응형 크기보다 작은 예약 광고를 게재할 수 있습니다. 반환된 광고는 광고 보기의 중앙에 배치됩니다. . 전체 예가 아래에 나와 있습니다.

  3. 광고 요청 객체를 만들고, 준비된 광고 보기에서loadAd()메서드를 사용하여 배너를 로드해야 합니다(일반 배너 요청과 동일).

샘플 코드

다음은 화면 너비에 맞게 적응형 배너를 로드하는 활동의 예입니다.

자바

import android.graphics.Rect;
import android.os.Bundle;
import android.widget.FrameLayout;
import androidx.appcompat.app.AppCompatActivity
import com.google.android.gms.ads.admanager.AdManagerAdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.admanager.AdManagerAdView;
import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.initialization.InitializationStatus;
import com.google.android.gms.ads.initialization.OnInitializationCompleteListener;

/** Main Activity. Inflates main activity xml and child fragments. */
public class MyActivity extends AppCompatActivity {

  private static final String AD_UNIT_ID = "/6499/example/banner";
  private AdManagerAdView adView;
  private FrameLayout adContainerView;
  private boolean initialLayoutComplete = false;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my);

    // Initialize the Mobile Ads SDK.
    MobileAds.initialize(this);

    adContainerView = findViewById(R.id.ad_view_container);
    adView = new AdManagerAdView(this);
    adContainerView.addView(adView);
    // Since we're loading the banner based on the adContainerView size, we need
    // to wait until this view is laid out before we can get the width.
    adContainerView.getViewTreeObserver().addOnGlobalLayoutListener(
        new ViewTreeObserver.OnGlobalLayoutListener() {
          @Override
          public void onGlobalLayout() {
            if (!initialLayoutComplete) {
              initialLayoutComplete = true;
              loadBanner();
            }
          }
        });
  }

  private void loadBanner() {
    adView.setAdUnitId(AD_UNIT_ID);
    
    AdSize adaptiveSize = getAdSize();
    adView.setAdSizes(adaptiveSize, AdSize.BANNER);
    
    // Create an ad request. Check your logcat output for the hashed device ID
    // to get test ads on a physical device, e.g.,
    // "Use AdRequest.Builder.addTestDevice("ABCDE0123") to get test ads on this
    // device."
    AdManagerAdRequest adRequest =
        new AdManagerAdRequest.Builder().addTestDevice(AdManagerAdRequest.DEVICE_ID_EMULATOR)
            .build();

    // Start loading the ad in the background.
    adView.loadAd(adRequest);
  }

  // Determine the screen width (less decorations) to use for the ad width.
  private AdSize getAdSize() {
    WindowMetrics windowMetrics = getWindowManager().getCurrentWindowMetrics();
    Rect bounds = windowMetrics.getBounds();

    float adWidthPixels = adContainerView.getWidth();

    // If the ad hasn't been laid out, default to the full screen width.
    if (adWidthPixels == 0f) {
      adWidthPixels = bounds.width();
    }

    float density = getResources().getDisplayMetrics().density;
    int adWidth = (int) (adWidthPixels / density);

    return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth);
  }
}

Kotlin

import android.os.Bundle
import android.widget.FrameLayout
import androidx.appcompat.app.AppCompatActivity
import com.google.android.gms.ads.*

/** Main Activity. Inflates main activity xml and child fragments. */
class MyActivity : AppCompatActivity() {

  private lateinit var adView: AdManagerAdView
  private lateinit var adContainerView: FrameLayout
  private var initialLayoutComplete = false

  // Determine the screen width (less decorations) to use for the ad width.
  private val adSize: AdSize
    get() {
      val windowMetrics = windowManager.currentWindowMetrics
      val bounds = windowMetrics.bounds

      var adWidthPixels = adContainerView.width.toFloat()

      // If the ad hasn't been laid out, default to the full screen width.
      if (adWidthPixels == 0f) {
        adWidthPixels = bounds.width().toFloat()
      }

      val density = resources.displayMetrics.density
      val adWidth = (adWidthPixels / density).toInt()

      return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth)
    }

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_my)

    // Initialize the Mobile Ads SDK.
    MobileAds.initialize(this) {}

    adContainerView = findViewById(R.id.ad_view_container)
    adView = AdManagerAdView(this)
    adContainerView.addView(adView)
    // Since we're loading the banner based on the adContainerView size, we need
    // to wait until this view is laid out before we can get the width.
    adContainerView.viewTreeObserver.addOnGlobalLayoutListener {
      if (!initialLayoutComplete) {
        initialLayoutComplete = true
        loadBanner()
      }
    }
  }

  private fun loadBanner() {
    adView.adUnitId = AD_UNIT_ID

    adView.adSizes(adSize, AdSize.BANNER)
    
    // Create an ad request. Check your logcat output for the hashed device ID to
    // get test ads on a physical device, e.g.,
    // "Use AdRequest.Builder.addTestDevice("ABCDE0123") to get test ads on this device."
    val adRequest = AdManagerAdRequest
        .Builder()
        .addTestDevice(AdManagerAdRequest.DEVICE_ID_EMULATOR).build()

    // Start loading the ad in the background.
    adView.loadAd(adRequest)
  }

  companion object {
    // This is an ad unit ID for a test ad. Replace with your own banner ad unit ID.
    private val AD_UNIT_ID = "/6499/example/banner"
  }
}

여기에서 AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize 함수는 현재 인터페이스 방향에 대한 앵커 광고 위치의 배너 크기를 가져오는 데 사용됩니다. 앵커 광고 배너를 지정된 방향으로 미리 로드하려면 AdSize.getPortraitAnchoredAdaptiveBannerAdSizeAdSize.getLandscapeAnchoredAdaptiveBannerAdSize의 관련 함수를 사용하세요.

GitHub의 전체 예

자바 Kotlin