# iOS용 배너 광고 유닛 API 마이그레이션

> 광고 유닛 ID를 사용하여 배너 광고를 로드하고 표시하여 레벨플레이 배너 API로 전환합니다.

이 가이드에서는 광고 유닛 ID를 사용하여 레벨플레이 API를 연동하여 배너 광고를 로드하고 표시하는 방법을 설명합니다.

## 필수 조건##prerequisites

* 최소 지원 SDK는 8.6.0입니다. 최신 SDK는 [여기](/grow/levelplay/sdk/ios/sdk-integration.md)에서 다운로드할 수 있습니다.
* 레벨플레이 초기화 API 사용하여 SDK를 초기화해야 합니다.
* 레벨플레이 대시보드에서 AdUnitID를 찾습니다.

## 배너 광고 오브젝트 생성 및 크기 설정##create-banner-ad-object-and-set-size

배너 광고 오브젝트의 생성은 **onInitSuccess** 콜백을 수신한 후에 수행해야 합니다.

1. **Objective-C**

   ```objective-c
   // 배너 뷰를 만들고 광고 유닛 ID를 설정합니다.
   self.bannerAdView = [[LPMBannerAdView alloc] initWithAdUnitId:@"adUnitId"];
   ```

2. **Swift**

   ```swift
   // 배너 뷰를 만들고 광고 유닛 ID를 설정합니다.
   self.bannerAdView = LPMBannerAdView(adUnitId: "adUnitId")
   ```

### 배너 크기##banner-sizes

| **레거시**                 | **광고 단위 이름(새로운)**     | dp의 **크기**                                         |
| ----------------------- | --------------------- | -------------------------------------------------- |
| **ISBannerSize**        | **LPMAdSize**         | **(너비 X 높이)**                                      |
| ISBannerSize\_BANNER    | bannerSize            | 320 x 50                                           |
| ISBannerSize\_LARGE     | largeSize             | 320 x 90                                           |
| ISBannerSize\_RECTANGLE | mediumRectangleSize   | 300 x 250                                          |
| ISBannerSize\_SMART     | 적응적 광고 크기로 대체됨(아래 참조) | 모바일 및 태블릿의 크기 및 방향, 방향 설정 조정하기 위해 광고를 자동으로 렌더링합니다. |

광고 크기를 생성하려면 다음 옵션 중 하나를 따르십시오. 

### 화면 너비에 맞게 조정되는 적응적 광고 크기(권장)##adaptive-ad-size-that-adjusts-to-the-screen-width-(recommended)

이 옵션은 기기 유형에 따라 배너 또는 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)
   ```

**특정 배너 크기:** 이 옵션을 사용하면 특정 배너 크기를 설정할 수 있습니다. BANNER, LARGE, MEDIUM\_RECTANGLE.

1. **Objective-C**

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

2. **Swift**

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

## Placements##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

코드에서 **LevelPlayBannerDelegate** 대신 **LPMBannerAdViewDelegate를 구현**하여 광고 전송에 대해 알 수 있습니다. 

* 배너 광고를 로드하기 전에 델리게이트 설정하는 것이 좋습니다.
* 각 배너 광고 보기에는 자체 델리게이트 구현이 있어야 합니다.
* 콜백은 메인 스레드 실행됩니다.

1. **Objective-C**

   ```objective-c
   // 델리게이트 구현 설정
   [self.bannerAdView setDelegate:self];
   #pragma 마크 - LPMBannerAdViewDelegate
   - (void)didLoadAdWithAdInfo:(nonnull LPMAdInfo *)adInfo {
      //광고가 성공적으로 로드되었습니다.
   }
   - (void)didFailToLoadAdWithAdUnitId:(nonnull NSString *)adUnitId error:(nonnull NSError *)error {
      // 광고 로드 실패
   }
   - (void)didClickAdWithAdInfo:(LPMAdInfo *)adInfo {
      // 광고가 클릭되었습니다.
   }
   - (void)didDisplayAdWithAdInfo:(LPMAdInfo *)adInfo {
      // 광고가 표시되고 화면에 표시되었습니다.
   }
   - (void)didFailToDisplayAdWithAdInfo:(LPMAdInfo *)adInfo error:(NSError *)오류 {
      // 광고가 화면에 표시되지 못함
   }
   - (void)didLeaveAppWithAdInfo:(LPMAdInfo *)adInfo {
      // 사용자 광고를 누르고 앱에서 나갔습니다.
   }
   - (void)didExpandAdWithAdInfo:(LPMAdInfo *)adInfo {
      // 광고가 전체 화면으로 열립니다.
   }
   - (void)didCollapseAdWithAdInfo:(LPMAdInfo *)adInfo {
      // 광고가 원본의, 원래의 크기로 복원됩니다.
   }
   ```

2. **Swift**

   ```swift
   // 델리게이트 구현 설정
   self.bannerAdView.setDelegate(self)
   func didLoadAd(with adInfo: LPMAdInfo) {
      //광고가 성공적으로 로드되었습니다.
   }
   func didFailToLoadAd(withAdUnitId adUnitId: 문자열, 오류: 오류) {
      // 광고 로드 실패
   }
   func didClickAd(with adInfo: LPMAdInfo) {
      // 광고가 클릭되었습니다.
   }
   func didDisplayAd(with adInfo: LPMAdInfo) {
      // 광고가 표시되고 화면에 표시되었습니다.
   }
   func didFailToDisplayAd(with adInfo: LPMAdInfo, 오류: 오류) {
      // 광고가 화면에 표시되지 못함
   }
   func didLeaveApp(with adInfo: LPMAdInfo) {
      // 사용자 광고를 누르고 앱에서 나갔습니다.
   }
   func didExpandAd(with adInfo: LPMAdInfo) {
      // 광고가 전체 화면으로 열립니다.
   }
   func didCollapseAd(with adInfo: LPMAdInfo) {
      // 광고가 원본의, 원래의 크기로 복원됩니다.
   }
   ```

### 레벨플레이 광고 정보##levelplay-ad-info

**LPMAdInfo** 파라미터에는 로드된 광고에 대한 정보가 포함되어 있습니다.

|       | Ironsource 레거시 API            | Ad Unit API                  |
| ----- | ----------------------------- | ---------------------------- |
| 델리게이트 | LevelPlayBannerDelegate       | LPMBannerAdViewDelegate      |
| 이벤트   | didLoad                       | didLoadAdWithAdInfo          |
|       | didFailToLoadWithError        | didFailToLoadAdWithAdUnitId  |
|       | didClickWithAdInfo            | didClickAdWithAdInfo         |
|       | didPresentScreenWithAdInfo    | didExpandAdWithAdInfo        |
|       | didDismissScreenWithAdInfo    | didCollapseAdWithAdInfo      |
|       | didLeaveApplicationWithAdInfo | didLeaveAppWithAdInfo        |
|       | -                             | didDisplayAdWithAdInfo       |
|       | -                             | didFailToDisplayAdWithAdInfo |

## 배너 광고 로드##load-banner-ad

배너 광고를 로드하려면 **IronSource.loadBanner** 대신 **loadAd를** 사용하십시오.

1. **Objective-C**

   ```objective-c
   // 배너 광고 로드
   [self.bannerAdView loadAdWithViewController:self];
   ```

2. **Swift**

   ```swift
   // 배너 광고 로드
   self.bannerAdView.loadAd(자체 포함)
   ```

## 배너 새로고침 일시 정지 및 재개##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

배너를 파괴하려면 **파괴** 메서드를 호출합니다.

삭제된 배너 더 이상 표시할 수 없습니다. 더 많은 광고를 표시하려면 새 **LPMBannerAdView** 오브젝트를 만드십시오.

1. **Objective-C**

   ```objective-c
   [self.bannerAdView 제거];
   ```

2. **Swift**

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

## 여러 광고 유닛 배너 API##multiple-ad-unit-banner-apis

|          | 레거시                          | 광고 단위(신규)                |
| -------- | ---------------------------- | ------------------------ |
| 배너 광고 보기 | ISBannerView                 | LPMBannerAdView          |
| API      | loadBannerWithViewController | loadAdWithViewController |
|          | loadBannerWithViewController | setPlacementName         |
|          | destroyBanner                | destroy                  |
|          | -                            | LPMAdSize.width          |
|          | -                            | LPMAdSize.height         |
|          | -                            | pauseAutoRefresh         |
|          | -                            | resumeAutoRefresh        |

## 배너 광고의 전체 구현 예시##full-implementation-example-of-banner-ads

다음은 적응적 배너 크기를 사용하여 배너 광고를 생성하고 로드하는 예제입니다.

1. **Objective-C**

   ```objective-c
   NS_ASSUME_NONNULL_BEGIN
   @interface BannerAdViewController () <LPMBannerAdViewDelegate>
   @properties(nonatomic, strong) LPMBannerAdView *bannerAd;
   @end
   @implementation BannerAdViewController
   - (void)할당 해제 {
   [self.bannerAd destroy];
   }
   - (void)createBannerAd {
   // 배너 뷰를 만들고 광고 유닛 ID를 설정합니다.
   self.bannerAd = [[LPMBannerAdView alloc] initWithAdUnitId:@"adUnitId"];

   // Set the placement name (optional)
   [self.bannerAd setPlacementName:@"PlacementName"];

   // Set the ad size
   LPMAdSize *bannerSize = [self getBannerSize];

   // Required when using adaptive ad size
   if (bannerSize == nil) {
       반환;
    }

   [self.bannerAd setAdSize:bannerSize];

   // 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. 특정 배너 크기 - 배너, 대형, MEDIUM_RECTANGLE
   // 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 constraintEqualToConstant:bannerSize.width],
       [self.bannerAd.heightAnchor constraintEqualToConstant:bannerSize.height]
   ]];
   }
   #pragma mark - LPMBannerAdViewDelegate
   - (void)didLoadAdWithAdInfo:(nonnull LPMAdInfo *)adInfo {}
   - (void)didFailToLoadAdWithAdUnitId:(nonnull NSString *)adUnitId error:(nonnull NSError *)error {}
   - (void)didClickAdWithAdInfo:(LPMAdInfo *)adInfo {}
   - (void)didDisplayAdWithAdInfo:(LPMAdInfo *)adInfo {}
   - (void)didFailToDisplayAdWithAdInfo:(LPMAdInfo *)adInfo error:(NSError *)error {}
   - (void)didLeaveAppWithAdInfo:(LPMAdInfo *)adInfo {}
   - (void)didExpandAdWithAdInfo:(LPMAdInfo *)adInfo {}
   - (void)didCollapseAdWithAdInfo:(LPMAdInfo *)adInfo {}
   @end
   NS_ASSUME_NONNULL_END
   ```

2. **Swift**

   ```swift
   임포트 UIKit
   class BannerAdViewController: UIViewController, LPMBannerAdViewDelegate {
   var bannerAd: LPMBannerAdView!
   deinit {
       self.bannerAd.destroy()
   }
   func createBannerAd() {
       // Create the banner view and set the ad unit id
       self.bannerAd = LPMBannerAdView(adUnitId: "adUnitId")
       
       // Set the placement name (optional)
       self.bannerAd.setPlacementName("PlacementName")
       
       // Set the ad size
       // Null check required when using adaptive ad size
       guard let bannerSize = getBannerSize() else {
           반환
       }
       self.bannerAd.setAdSize(bannerSize)
       
       // Set the delegate implementation
       self.bannerAd.setDelegate(self)
       
       // Add the banner view to the view hierarchy with the proper constraints
       addBannerView(withSize: bannerSize)
   }
   func getBannerSize() -> LPMAdSize? {
       // 1. 권장 - 화면 너비에 맞게 조정되는 적응적 광고 크기
       let bannerSize = LPMAdSize.createAdaptive()
       // 2. 고정 너비 광고 크기를 사용한 적응적 광고 크기
       // bannerSize = LPMAdSize.createAdaptiveAdSize(withWidth: 400)
       // 3. 특정 배너 크기 - 배너, 대형, MEDIUM_RECTANGLE
       // bannerSize = LPMAdSize.mediumRectangleSize()
       
       return bannerSize
   }
   func loadBannerAd() {
       self.bannerAd.loadAd(with: self)
   }
   function addBannerView(withSize bannerSize: LPMAdSize) {
       DispatchQueue.main.async {
           self.bannerAd.translatesAutoresizingMaskIntoConstraints = false

           // Add the banner view to the view hierarchy
           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
   func didLoadAd(with adInfo: LPMAdInfo) {}
   func didFailToLoadAd(withAdUnitId adUnitId: 문자열, 오류: 오류) {}
   func didClickAd(with adInfo: LPMAdInfo) {}
   func didDisplayAd(with adInfo: LPMAdInfo) {}
   func didFailToDisplayAd(with adInfo: LPMAdInfo, 오류: 오류) {}
   func didLeaveApp(with adInfo: LPMAdInfo) {}
   func didExpandAd(with adInfo: LPMAdInfo) {}
   func didCollapseAd(with adInfo: LPMAdInfo) {}
   }
   ```

## 레벨플레이 Mediation 데모 앱##levelplay-mediation-demo-app

통합 데모 애플리케이션 앱에 배너 배너 유닛 API를 통합하는 방법을 보여 줍니다.

[iOS 데모 애플리케이션 다운로드](https://github.com/ironsource-mobile/Mediation-Demo-Apps)
