# 在 Android 中实现横幅广告

> 在 Android 应用程序中实现横幅广告。创建横幅广告视图对象，在布局中展示，并使用监听器管理广告事件。

横幅广告需要特定类型的专用广告位。

您可以将横幅广告视图对象放入 View 层级视图中，就像放置任何其他视图一样。这样就可以自定义每个横幅广告实例的位置，或显示多个横幅广告。

> **Note:**
>
> app-ads.txt 是一个 IAB 倡议文件，旨在打击欺诈，建立透明的广告生态系统。请确保按照说明[设置 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 和一个 一起传递给 `BannerConfiguration.Builder`，该 `BannerSize` 支持锚定布局和内嵌布局的固定或自适应尺寸。（可选）包含用于竞价的聚合元数据和广告标记，然后使用构建的配置和一个 `LoadListener` 调用 `BannerAd.load()`。加载成功后，通过 `View` 获取横幅广告的 `ad.getView()`，以便将其插入到您的布局中。

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() ); // 通过 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()) // 通过 getView() 获取视图
           } else {
               // failure
           }
       }
   })
   ```

**后续步骤**：查看[变现策略](/monetization/getting-started/monetization-strategy.md)指南或[测试您的实现](/ads-android/4.19.0/sdk-integration/test-integration.md)。
