# Android에서 배너 광고 구현

> Android 앱에서 배너 광고를 구현합니다. 배너 뷰 오브젝트를 생성하고 레이아웃에 표시하고 리스너를 사용하여 광고 이벤트를 관리합니다.

배너 광고에는 특정 유형의 전용 배너 게재 위치가 필요합니다.

다른 뷰와 마찬가지로 배너 뷰 오브젝트를 뷰 계층 구조에 배치할 수 있습니다. 그러면 각 배너 인스턴스의 위치를 커스터마이즈하거나 여러 배너를 표시할 수 있습니다.

> **Note:**
>
> app-ads.txt는 광고 생태계의 부정 행위를 근절하고 투명성을 구축하기 위한 IAB 이니셔티브입니다. 설명된 대로, (/monetization/dashboard/app-ads-txt/set-up-app-ads-txt)에서 [app-ads.txt 파일을 설정](/monetization/dashboard/app-ads-txt/set-up-app-ads-txt.md)했는지 확인하세요. 그렇지 않으면 배너 수요가 크게 줄어듭니다.

## 스크립트 구현##script-implementation

다음 스크립트 샘플은 화면에 두 개의 배너 광고와 이를 테스트하기 위한 버튼을 표시하는 구현 예제입니다.

이 예제에서는 여러 배너 뷰 오브젝트에 단일 리스너를 사용합니다. 배너 뷰 오브젝트별로 다른 리스너를 사용할 수도 있습니다.

### MREC 배너 포맷 구현##implementing-the-mrec-banner-format

앱에 MREC(중간 직사각형) 크기의 광고 포맷을 표시하려면 300x250, 300x300, 450x450과 같이 적절한 크기를 사용해야 합니다. 특히 300x250 MREC 배너 광고의 경우 다음 예제 코드에서 아래 값을 변경합니다.

```java
new UnityBannerSize(320, 50)
```

조정된 크기는 다음과 같습니다.

```java
new UnityBannerSize(300, 250)
```

## 배너 광고 예시##banner-ad-example

`BannerShowListener`을(를) 구성하여 노출, 클릭, 표시 실패 이벤트를 처리한 다음, 게재위치 ID 및 `BannerSize`과(와) 함께 `BannerConfiguration.Builder`에 전달하세요. `BannerSize`은(는) 고정 또는 적응형 크기를 지원하며 고정형 및 인라인 레이아웃에 사용할 수 있습니다. 선택적으로 입찰을 위한 미디에이션 메타데이터와 광고 마크업을 포함한 다음, 빌드된 구성과 `LoadListener`을(를) 사용하여 `BannerAd.load()`을(를) 호출하세요. 로드에 성공하면 `ad.getView()`을(를) 통해 배너의 `View`을(를) 가져와서 레이아웃에 삽입하세요.

1. **Java**

   ```java
     BannerShowListener showListener = new BannerShowListener()
     {
         @Override
         public void onImpression(@NonNull BannerAd ad)                                     
         { /* 노출 */ }

         @Override
         public void onClicked(@NonNull BannerAd ad)                                        
         { /* 클릭됨 */ }

         @Override
         public void onFailedToShow(@NonNull BannerAd ad, @NonNull UnityAdsError error)     
         { /* 표시 실패 */ }
     };

     BannerConfiguration.Builder builder =
             new BannerConfiguration.Builder( placementId, new BannerSize( 320, 50 ), showListener )
                     .withMediationInfo( createMediationInfo() );
     if ( AppLovinSdkUtils.isValidString( bidResponse ) )
     {
         builder.withAdMarkup( bidResponse );
     }

     BannerAd.load( builder.build(), new LoadListener<BannerAd>()
     {
         @Override
         public void onAdLoaded(@Nullable BannerAd ad, @Nullable UnityAdsError error)
         {
             if ( error == null )
             {
                 loadedBannerAd = ad;
                 listener.onAdViewAdLoaded( ad.getView() ); // retrieve view via getView()
             }
             else
             {
                 // failure
             }
         }
     } );
   ```

2. **Kotlin**

   ```kotlin
     val showListener = object : BannerShowListener {
     override fun onImpression(ad: BannerAd)                         
     { /* 노출 */ }
     override fun onClicked(ad: BannerAd)                            
     { /* 클릭됨 */ }
     override fun onFailedToShow(ad: BannerAd, error: UnityAdsError) 
     { /* 표시 실패 */ }
   }

   val builder = BannerConfiguration.Builder(placementId, BannerSize(320, 50), showListener)
       .withMediationInfo(createMediationInfo())

   if (AppLovinSdkUtils.isValidString(bidResponse)) {
       builder.withAdMarkup(bidResponse)
   }

   BannerAd.load(builder.build(), object : LoadListener<BannerAd> {
       override fun onAdLoaded(ad: BannerAd?, error: UnityAdsError?) {
           if (error == null) {
               loadedBannerAd = ad
               listener.onAdViewAdLoaded(ad.getView()) // retrieve view via getView()
           } else {
               // failure
           }
       }
   })
   ```

**다음 단계**: [수익화 전략](/monetization/getting-started/monetization-strategy.md) 가이드를 검토하고 [구현 내용을 테스트](/ads-android/4.19.0/sdk-integration/test-integration.md)하십시오.
