# iOS 横幅集成

> 通过创建横幅广告对象、设置其大小并在app程序的视图层级视图视图中显示，在 iOS app程序中实现横幅广告服务。

横幅是由系统启动的矩形广告服务，可以是静态广告，也可以是动画广告，并在实时 app 内容周围的指定区域提供。

> **Note:**
>
> 本文档与 SDK 8.4.0+ 相关。

## 先决条件##prerequisites

* 确保已将 LevelPlay SDK 正确集成到应用程序中。[此处](/grow/levelplay/sdk/ios/sdk-integration.md)概述了集成。
* 确保使用 LevelPlay Initialization API 初始化 SDK。
* 在 LevelPlay 后台中找到 AdUnitID。

## 创建横幅广告对象并设置大小##create-banner-ad-object-and-set-size

横幅广告对象的创建应在接收 **onInitSuccess** 回调后完成。

1. **Objective-C**

   ```objective-c
   // 创建广告配置 - 可选
   LPMBannerAdViewConfigBuilder *adConfigBuilder = [LPMBannerAdViewConfigBuilder new];
   [adConfigBuilder setWithAdSize:bannerSize];
   [adConfigBuilder setWithPlacementName:@"placementName"];
   LPMBannerAdViewConfig *adConfig = [adConfigBuilder 构建];
   // 创建横幅视图并设置广告单元 ID
   self.bannerAd = [[LPMBannerAdView alloc] initWithAdUnitId:@"adUnitId" config: adConfig];
   ```

2. **Swift**

   ```swift
   // 创建广告配置 - 可选
   let adConfig = LPMBannerAdViewConfigBuilder()
   .set(adSize: bannerSize)
   .set(placementName: "placementName")
   .build()
   // 创建横幅视图并设置广告单元 ID
   self.bannerAd = LPMBannerAdView(adUnitId: "adUnitId", config: adConfig)
   ```

### 横幅大小##banner-sizes

| **LPMAdSize**       | 描述                        | Dimensions in dp（Width X Height） |
| ------------------- | ------------------------- | -------------------------------- |
| bannerSize          | 标准横幅                      | 320 x 50                         |
| largeSize           | 大型横幅                      | 320 x 90                         |
| mediumRectangleSize | 中等矩形 (MREC)               | 300 x 250                        |
| 自适应                 | 自动渲染广告服务以调整移动端和平板电脑的大小和方向 | 设备宽度 X 建议高度                      |

要创建广告大小，请遵循以下选项之一：

### 适应屏幕宽度的自适应广告大小（推荐）##adaptive-ad-size-that-adjusts-to-the-screen-width-(recommended)

此选项根据设备类型返回 BANNER 或 LEADERBOARD。支持自适应功能的网络（Google、Yandex）将根据其优化逻辑返回高度。

1. **Objective-C**

   ```objective-c
   LPMAdSize *bannerSize = [LPMAdSize createAdaptiveAdSize];
   [self.bannerAdView setAdSize: bannerSize];
   ```

2. **Swift**

   ```swift
   let bannerSize = LPMAdSize.createAdaptive()
   self.bannerAdView.setAdSize(bannerSize)
   ```

### 指定的横幅大小##specific-banner-size

此选项允许您专门设置横幅大小：横幅、大型、中等矩形。

1. **Objective-C**

   ```objective-c
   LPMAdSize *bannerSize = [LPMAdSize createAdaptiveAdSize];
   [self.bannerAdView setAdSize: bannerSize];
   ```

2. **Swift**

   ```swift
   let bannerSize = LPMAdSize.large()
   self.bannerAdView.setAdSize(bannerSize)
   ```

#### 广告位##placements

我们支持在横幅广告中[放置](/grow/levelplay/platform/settings/placements.md)仅用于举报。应在 **loadAd** 之前设置广告位，以影响所有重新加载的广告服务。

1. **Objective-C**

   ```objective-c
   // 设置放置/位置名称
   [self.bannerAdView setPlacementName:@"PlacementName"];
   ```

2. **Swift**

   ```swift
   // 设置放置/位置名称
   self.bannerAdView.setPlacementName("PlacementName")
   ```

## 设置横幅委托##set-banner-delegates

在代码中实现 **LPMBannerAdViewDelegate** 以获取广告投放信息。

* 建议在加载横幅广告之前设置委托。
* 每个横幅广告视图都应有自己的委托实现。
* 回调在主线程上运行。
* 当并非所有网络都支持回调时，它们会被标记为可选。

1. **Objective-C**

   ```objective-c
   // 设置委托实现 
   [self.bannerAdView setDelegate:self];
   #pragma mark - LPMBannerAdViewDelegate
   - (void)didLoadAdWithAdInfo:(nonnull LPMAdInfo *)adInfo { }
   //广告已成功加载
   }
   - (void)didFailToLoadAdWithAdUnitId：(nonnull NSString *)adUnitId 报错：(nonnull NSError *)报错 { 
   // 广告加载失败
   }
   - (void)didClickAdWithAdInfo:(LPMAdInfo *)adInfo { }
   // 广告被点击
   }
   - (void)didDisplayAdWithAdInfo:(LPMAdInfo *)adInfo { }
   // 广告已显示并在屏幕上可见
   }
   - (void)didFailToDisplayAdWithAdInfo:(LPMAdInfo *)adInfo 报错：(NSError *)报错 {
   // 可选。广告无法在屏幕上显示
   }
   - (void)didLeaveAppWithAdInfo:(LPMAdInfo *)adInfo { }
   // 可选。用户按下广告并被导航出 app 
   }
   - (void)didExpandAdWithAdInfo:(LPMAdInfo *)adInfo { }
   // 可选。广告以全屏打开
   }
   - (void)didCollapseAdWithAdInfo:(LPMAdInfo *)adInfo { }
   // 可选。广告恢复为其原始大小
   }
   ```

2. **Swift**

   ```swift
   // 设置委托实现 
   self.bannerAdView.setDelegate(self)
   func didLoadAd（包含 adInfo：LPMAdInfo) {
   //广告已成功加载 
   }
   func didFailToLoadAd(withAdUnitId adUnitId：字符串，报错：报错) {
   // 广告加载失败
   }
   func didClickAd（包含 adInfo：LPMAdInfo) {
   // 广告被点击
   }
   func didDisplayAd（包含 adInfo：LPMAdInfo) {
   // 广告已显示并在屏幕上可见
   }
   func didFailToDisplayAd（包含 adInfo：LPMAdInfo，报错：报错) {
   // 可选。广告无法在屏幕上显示
   }
   func didLeaveApp（包含 adInfo：LPMAdInfo) {
   // 可选。用户按下广告并被导航出 app 
   }
   func didExpandAd（包含 adInfo：LPMAdInfo) {
   // 可选。广告以全屏打开
   }
   func didCollapseAd（包含 adInfo：LPMAdInfo) {
   // 可选。广告恢复为其原始大小
   }
   ```

### LevelPlay 广告信息##levelplay-ad-info

**LPMAdInfo** 参数包含有关加载的广告的信息。在[此处](/grow/levelplay/sdk/ios/levelplay-listener-adinfo-integration.md)了解有关其实现和可用字段的更多信息。

## 加载横幅广告##load-banner-ad

要加载横幅广告，请使用 **loadAd**。

1. **Objective-C**

   ```objective-c
   // 加载横幅广告
   [self.bannerAdView loadAdWithViewController:self]
   ```

2. **Swift**

   ```swift
   // 加载横幅广告
   self.bannerAdView.loadAd(with: self)
   ```

## **暂停和恢复横幅刷新**##**pause-and-resume-banner-refresh**

如果在平台中定义了刷新值，则可以在代码中暂停横幅刷新。使用以下方法可停止横幅广告的自动刷新，或在暂停后重新启用。

> **Note:**
>
> 再次显示横幅时，它将完成从暂停时间到刷新的时间。

* **pauseAutoRefresh** - 暂停横幅广告的自动刷新。
* **resumeAutoRefresh** - 暂停横幅广告后恢复自动刷新。

1. **Objective-C**

   ```objective-c
   // 暂停新
   [self.bannerAdView pauseAutoRefresh]; 
   // 继续刷新
   [self.bannerAdView resumeAutoRefresh];
   ```

2. **Swift**

   ```swift
   // 暂停新
   self.bannerAdView.pauseAutoRefresh()
   // 继续刷新
   self.bannerAdView.resumeAutoRefresh()
   ```

## **销毁横幅广告**##**destroy-banner-ad**

要销毁横幅，请调用 **destroy** 方法。

已销毁的横幅无法再次显示。要显示更多广告服务，请创建一个新的 **LPMBannerAdView** 对象。

1. **Objective-C**

   ```objective-c
   [self.bannerAdView destroy];
   ```

2. **Swift**

   ```swift
   self.bannerAdView.destroy()
   ```

## 横幅广告服务的完整实现示例##full-implementation-example-of-banner-ads

以下是使用自适应横幅大小创建和加载横幅广告的示例。

1. **Objective-C**

   ```objective-c
   NS_ASSUME_NONNULL_BEGIN
   @interface BannerAdViewController () <LPMBannerAdViewDelegate>
   @property(nonatomic, strong) LPMBannerAdView *bannerAd;
   @end
   @implementation BannerAdViewController
   - (void)dealloc {
   [self.bannerAd destroy];
   }
   - (void)createBannerAd {
   LPMAdSize *bannerSize = [self getBannerSize] ?：[LPMAdSize mediumRectangleSize];
   // 创建广告配置 - 可选
   LPMBannerAdViewConfigBuilder *adConfigBuilder = [LPMBannerAdViewConfigBuilder new];
   [adConfigBuilder setWithAdSize:bannerSize];
   [adConfigBuilder setWithPlacementName:@"placementName"];
   LPMBannerAdViewConfig *adConfig = [adConfigBuilder 构建];
   // 创建横幅视图并设置广告单元 ID
   self.bannerAd = [[LPMBannerAdView alloc] initWithAdUnitId:@"adUnitId" config: adConfig];

   // Set the delegate implementation
   [self.bannerAd setDelegate:self];

   // Add the banner view to the view hierarchy with the proper constraints
   [self addBannerViewWithSize:bannerSize];
   }
   - (LPMAdSize *)getBannerSize { }
   // 1.推荐 - 适应屏幕宽度的自适应广告大小
   LPMAdSize *bannerSize = [LPMAdSize createAdaptiveAdSize];
   // 2.使用固定宽度广告大小的自适应广告大小
   // self.bannerSize = [LPMAdSize createAdaptiveAdSizeWithWidth:400];
   // 3.指定的横幅大小 - 横幅、大横幅、中矩形
   // self.bannerSize = [LPMAdSize mediumRectangleSize];

   return bannerSize;
   }
   - (void)loadBannerAd {
   [self.bannerAd loadAdWithViewController:self];
   }
   - (void)addBannerViewWithSize：(LPMAdSize *)bannerSize {
   self.bannerAd.translatesAutoresizingMaskIntoConstraints = NO;

   // Add the banner view to the view hierarchy
   [self.view addSubview:self.bannerAd];
   [NSLayoutConstraint activateConstraints：@[
      [self.bannerAd.bottomAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.bottomAnchor],
      [self.bannerAd.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor],
      [self.bannerAd.widthAnchor constraintsEqualToConstant:bannerSize.width]、
      [self.bannerAd.heightAnchor constraintsEqualToConstant:bannerSize.height]
   ]];
   }
   #pragma mark - LPMBannerAdViewDelegate
   - (void)didLoadAdWithAdInfo：(nonnull LPMAdInfo *)adInfo {
   - (void)didFailToLoadAdWithAdUnitId：(nonnull NSString *)adUnitId 报错：(nonnull NSError *)报错 {
   - (void)didClickAdWithAdInfo:(LPMAdInfo *)adInfo {}
   - (void)didDisplayAdWithAdInfo:(LPMAdInfo *)adInfo {
   - (void)didFailToDisplayAdWithAdInfo：(LPMAdInfo *)adInfo 报错：(NSError *)报错 {
   - (void)didLeaveAppWithAdInfo：(LPMAdInfo *)adInfo {}
   - (void)didExpandAdWithAdInfo：(LPMAdInfo *)adInfo {}
   - (void)didCollapseAdWithAdInfo:(LPMAdInfo *)adInfo {}
   @end
   NS_ASSUME_NONNULL_END
   ```

2. **Swift**

   ```swift
   导入 UIKit
   public 类 BannerAdViewController：UIViewController、LPMBannerAdViewDelegate {
   var bannerAd：LPMBannerAdView!
   deinit {
   self.bannerAd.destroy()
   }
   public func createBannerAd() {
   guard let bannerSize = getBannerSize() else {
      返回
   }
   // 创建广告配置 - 可选
   let adConfig = LPMBannerAdViewConfigBuilder()
      .set(adSize: bannerSize)
      .set(placementName: "placementName")
      .build()
   // 创建横幅视图并设置广告单元 ID
   self.bannerAd = LPMBannerAdView(adUnitId: "adUnitId", config: adConfig)

   // Set the delegate implementation
   self.bannerAd.setDelegate(self)

   // Add the banner view to the view hierarchy with the proper constraints
   addBannerView(withSize: bannerSize)
   }
   public func getBannerSize() -> LPMAdSize? {
   // 1.推荐 - 适应屏幕宽度的自适应广告大小
   let bannerSize = LPMAdSize.createAdaptive()
   // 2.使用固定宽度广告大小的自适应广告大小
   // bannerSize = LPMAdSize.createAdaptiveAdSize(withWidth:400)
   // 3.指定的横幅大小 - 横幅、大横幅、中矩形
   // bannerSize = LPMAdSize.mediumRectangleSize()

   return bannerSize
   }
   public func loadBannerAd() {
   self.bannerAd.loadAd(with: self)
   }
   public func addBannerView(withSize bannerSize:LPMAdSize) {
   DispatchQueue.main.async {
      self.bannerAd.translatesAutoresizingMaskIntoConstraints = false
      self.view.addSubview(self.bannerAd)
      let centerX = self.bannerAd.centerXAnchor.constraint(equalTo: self.view.centerXAnchor)
      let bottom = self.bannerAd.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor)
      let width = self.bannerAd.widthAnchor.constraint(equalToConstant:CGFloat(bannerSize.width))
      let height = self.bannerAd.heightAnchor.constraint(equalToConstant:CGFloat(bannerSize.height))
      NSLayoutConstraint.activate([centerX, bottom, width, height])
   }
   }
   // MARK: - LPMBannerAdViewDelegate
   public func didLoadAd(with adInfo:LPMAdInfo) {
   public func didFailToLoadAd(withAdUnitId adUnitId:字符串，报错：报错) {
   public func didClickAd(with adInfo:LPMAdInfo) {
   public func didDisplayAd(with adInfo:LPMAdInfo) {
   public func didFailToDisplayAd(with adInfo:LPMAdInfo，报错：报错) {
   public func didLeaveApp(with adInfo:LPMAdInfo) {
   public func didExpandAd(with adInfo:LPMAdInfo) {
   public func didCollapseAd(with adInfo:LPMAdInfo) {
   }
   ```

## **LevelPlay Mediation Demo app**##**levelplay-mediation-demo-app**

Integration Demo 应用程序演示如何在 app 中集成横幅广告单元 API。

[下载 iOS demo 应用程序](https://github.com/ironsource-mobile/Mediation-Demo-Apps)

验证您与我们的[集成测试套件](/grow/levelplay/sdk/ios/integration-test-suite.md)的集成。

## 后续步骤##next-steps

请遵循我们的集成指南来集成其他横幅广告网络或配置其他广告格式：

* [调解网络](/grow/levelplay/sdk/ios/mediation-networks.md)。
* [奖励广告服务](/grow/levelplay/sdk/ios/rewarded-ads-integration.md)
* [插页式广告服务](/grow/levelplay/sdk/ios/interstitial-integration.md)
* [原生广告服务](/grow/levelplay/sdk/ios/native-ads-integration.md)
