# iOS용 인터스티셜 광고 광고 유닛 API 마이그레이션

> 광고 유닛 ID를 사용하여 인터스티셜 광고 로드하고 표시하여 레벨플레이 인터스티셜 광고 API로 전환.

이 가이드에서는 현재 구현에서 광고 유닛 ID를 사용하여 레벨플레이 인터스티셜 광고 API로 전환 인터스티셜 광고 로드하고 표시하는 방법을 설명합니다.

## 필수 조건##prerequisites

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

## 인터스티셜 광고 오브젝트 생성##create-interstitial-ad-object

인터스티셜 광고 오브젝트의 생성은 **onInitSuccess** 콜백을 수신한 후에 수행해야 합니다.

오브젝트 세션 전체에 걸쳐 여러 로드와 표시를 처리할 수 있는 재사용 가능한 인스턴스. 생성 후에는 동일한 광고 유닛의 광고를 로드하고 표시하는 데 사용해야 합니다.

더 고급 구현을 위해 필요한 경우 여러 개의 인터스티셜 광고 객체를 생성할 수 있습니다.

1. **Objective-C**

   ```objective-c
   self.interstitialAd = [[LPMInterstitialAd alloc] initWithAdUnitId:@"adUnitId"];
   ```

2. **Swift**

   ```swift
   self.interstitialAd = LPMInterstitialAd(adUnitId: "adUnitId")
   ```

## 델리게이트 구현##implement-delegates

광고 전송에 대해 알리기 위해 **LevelPlayInterstitialDelegate** 대신 코드에 **LPMInterstitialAdDelegate**를 구현하십시오. 

* 인터스티셜 광고 광고를 로드하기 전에 델리게이트를 설정하는 것이 좋습니다.
* 각 인터스티셜 광고 광고에는 고유한 델리게이트 구현이 있어야 합니다.
* 델리게이트 메서드는 메인 스레드 실행됩니다.

1. **Objective-C**

   ```objective-c
   self.interstitialAd = [[LPMInterstitialAd alloc] initWithAdUnitId:@"adUnitId"];
   self.interstitialAd.delegate = self;
   #pragma 마크 - LPMInterstitialAdDelegate 메서드
   - (void)didLoadAdWithAdInfo:(LPMAdInfo *)adInfo {}
   - (void)didFailToLoadAdWithAdUnitId:(NSString *)adUnitId error:(NSError *)error {}
   - (void)didChangeAdInfo:(LPMAdInfo *)adInfo {}
   - (void)didDisplayAdWithAdInfo:(LPMAdInfo *)adInfo {}
   - (void)didFailToDisplayAdWithAdInfo:(LPMAdInfo *)adInfo 오류:(NSError *)오류 {}
   - (void)didClickAdWithAdInfo:(LPMAdInfo *)adInfo {}
   - (void)didCloseAdWithAdInfo:(LPMAdInfo *)adInfo {}
   ```

2. **Swift**

   ```swift
   self.interstitialAd = LPMInterstitialAd(adUnitId: "adUnitId")
   self.interstitialAd.setDelegate(self)

   // MARK: LPMInterstitialAdDelegate methods
   func didLoadAd(with adInfo: LPMAdInfo) {}
   func didFailToLoadAd(withAdUnitId adUnitId: 문자열, 오류: 오류) {}
   func didChangeAdInfo(_ adInfo: LPMAdInfo) {}
   func didDisplayAd(with adInfo: LPMAdInfo) {}
   func didFailToDisplayAd(with adInfo: LPMAdInfo, 오류: 오류) {}
   func didClickAd(with adInfo: LPMAdInfo) {}
   func didCloseAd(with adInfo: LPMAdInfo) {}
   ```

|        | 레거시                           | 광고 단위(신규)                    |
| ------ | ----------------------------- | ---------------------------- |
| 델리게이트  | LevelPlayInterstitialDelegate | LPMInterstitialAdDelegate    |
| 이벤트    | didLoadWithAdInfo             | didLoadAdWithAdInfo          |
|        | didFailToLoadWithError        | didFailToLoadAdWithAdUnitId  |
|        | didOpenWithAdInfo             | didDisplayAdWithAdInfo       |
|        | didCloseWithAdInfo            | didCloseAdWithAdInfo         |
|        | didFailToShowWithError        | didFailToDisplayAdWithAdInfo |
|        | didClickWithAdInfo            | didClickAdWithAdInfo         |
|        | didShowWithAdInfo             | - (사용 중단 예정)                 |
|        | -                             | didChangeAdInfo              |

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

인터스티셜 광고 리스너 콜백이 반환하는 **ISAdInfo** 클래스가 **LPMAdInfo**로 대체되었습니다.

## 인터스티셜 광고 로드##load-interstitial-ad

인터스티셜 광고를 로드하려면 **loadInterstitial** 대신 **loadAd를** 사용합니다.

1. **Objective-C**

   ```objective-c
   [self.interstitialAd loadAd];
   ```

2. **Swift**

   ```swift
   self.interstitialAd.loadAd()
   ```

## 인터스티셜 광고 표시##show-interstitial-ad

**LevelPlayInterstitialDelegate** 대신 **LPMInterstitialAdDelegate를 사용하여** **didLoadWithAdInfo** 콜백을 수신한 후 인터스티셜 광고를 표시합니다. **showInterstitialWithViewController** 대신 **showAdWithViewController를** 사용합니다.

* **ViewController를** 공유해야 합니다. 
* 플레이스먼트를 사용하는 경우 아래의 플레이스먼트 섹션에 표시된 대로 **showAd** API에서 플레이스먼트 이름을 전달합니다.
* 광고가 사용자 성공적으로 표시되면 로딩 단계를 반복하여 다른 광고를 로드할 수 있습니다.

1. **Objective-C**

   ```objective-c
   - (void)showInterstitialAd {
       // 광고가 준비되었는지 확인합니다.
       if ([self.interstitialAd isAdReady]) {
           // 플레이스먼트 없이 표시
           [self.interstitialAd showAdWithViewController:self placementName:nil];
       }
   }
   ```

2. **Swift**

   ```swift
   func showInterstitialAd() {
       // 광고가 준비되었는지 확인합니다.
       if self.interstitialAd.isAdReady() {
           // 플레이스먼트 없이 표시
           self.interstitialAd.showAd(viewController: self, placementName: nil)
       }
   }
   ```

### 광고가 준비되었는지 확인##check-ad-is-ready

표시 실패를 방지하고 광고가 올바르게 표시되었는지 확인하기 위해 **showAd** API를 호출하기 전에 다음 API를 사용하는 것이 좋습니다.

**isAdReady** – 광고가 성공적으로 로드되고 광고 유닛이 제한되지 않거나 거짓이 아닌 경우 true를 반환합니다.

**isPlacementCapped** – 유효한 플레이스먼트가 제한되면 true를 반환합니다. 플레이스먼트가 유효하지 않거나 제한이 없는 경우 이 API false를 반환합니다.

1. **Objective-C**

   ```objective-c
   // 광고가 준비되었는지, 플레이스먼트가 제한되지 않았는지 확인합니다.
   if ([self.interstitialAd isAdReady] &amp;&amp; ![LPMInterstitialAd isPlacementCapped:placementName]) {
       [self.interstitialAd showAdWithViewController:self placementName:placementName];
   }
   ```

2. **Swift**

   ```swift
   // 광고가 준비되었는지, 플레이스먼트가 제한되지 않았는지 확인합니다.
   if self.interstitialAd.isAdReady(), !LPMInterstitialAd.isPlacementCapped(placementName) {
       self.interstitialAd.showAd(viewController: self, placementName: placementName)
   }
   ```

### Placements##placements

레벨플레이 대시보드에서 인터스티셜 광고의 [플레이스먼트](/grow/levelplay/platform/settings/placements.md) 속도와 한도를 지원합니다. 

인터스티셜 광고에 대한 플레이스먼트가 설정된 경우 특정 플레이스먼트에 광고를 게재하려면 **showAd** 메서드를 호출합니다.

1. **Objective-C**

   ```objective-c
   // 광고가 준비되었는지, 플레이스먼트가 제한되지 않았는지 확인합니다.
   if ([self.interstitialAd isAdReady] &amp;&amp; ![LPMInterstitialAd isPlacementCapped:placementName]) {
       // 플레이스먼트가 있는 광고 표시
       [self.interstitialAd showAdWithViewController:self placementName:@"PlacementName"];
   }
   ```

2. **Swift**

   ```swift
   // 광고가 준비되었는지, 플레이스먼트가 제한되지 않았는지 확인합니다.
   if self.interstitialAd.isAdReady(), !LPMInterstitialAd.isPlacementCapped(placementName) {
       // 플레이스먼트가 있는 광고 표시
       self.interstitialAd.showAd(viewController: self, placementName: placementName)
   }
   ```

## 여러 광고 유닛 인터스티셜 광고 API##multiple-ad-unit-interstitial-apis

|     | 레거시                                | 광고 단위(신규)                |
| --- | ---------------------------------- | ------------------------ |
| API | loadInterstitial                   | loadAd                   |
|     | showInterstitialWithViewController | showAdWithViewController |
|     | hasInterstitial                    | isAdReady                |
|     | isInterstitialCappedForPlacement   | isPlacementCapped        |

## 광고 유닛 API 전체 구현 예시##full-implementation-example-of-ad-unit-api

1. **Objective-C**

   ```objective-c
   NS_ASSUME_NONNULL_BEGIN
   @interface InterstitialAdViewController () <LPMInterstitialAdDelegate>
   @property(nonatomic, strong) LPMInterstitialAd *interstitialAd;
   @end
   @implementation InterstitialAdViewController
   - (void)createInterstitialAd {
       self.interstitialAd = [[LPMInterstitialAd alloc] initWithAdUnitId:@"adUnitId"];
       self.interstitialAd.delegate = self;
   }
   - (void)loadInterstitialAd {
       // 광고를 로드하거나 다시 로드하는 데 사용
       [self.interstitialAd loadAd];
   }
   - (void)showInterstitialAd {
       if ([self.interstitialAd isAdReady]) {
           [self.interstitialAd showAdWithViewController:self placementName:nil];
       }
   }
   - (void)showInterstitialAdWithPlacementName:(NSString *)placementName {
       // 광고가 준비되었는지, 플레이스먼트가 제한되지 않았는지 확인합니다.
       if ([self.interstitialAd isAdReady] &amp;&amp; ![LPMInterstitialAd isPlacementCapped:placementName]) {
           [self.interstitialAd showAdWithViewController:self placementName:placementName];
       }
   }
   #pragma 마크 - LPMInterstitialAdDelegate 메서드
   - (void)didLoadAdWithAdInfo:(LPMAdInfo *)adInfo {}
   - (void)didFailToLoadAdWithAdUnitId:(NSString *)adUnitId error:(NSError *)error {}
   - (void)didChangeAdInfo:(LPMAdInfo *)adInfo {}
   - (void)didDisplayAdWithAdInfo:(LPMAdInfo *)adInfo {}
   - (void)didFailToDisplayAdWithAdInfo:(LPMAdInfo *)adInfo 오류:(NSError *)오류 {}
   - (void)didClickAdWithAdInfo:(LPMAdInfo *)adInfo {}
   - (void)didCloseAdWithAdInfo:(LPMAdInfo *)adInfo {}
   @end
   NS_ASSUME_NONNULL_END
   ```

2. **Swift**

   ```swift
   class InterstitialAdViewController: UIViewController, LPMInterstitialAdDelegate {
       var interstitialAd: LPMInterstitialAd!

       func createInterstitialAd() {
           self.interstitialAd = LPMInterstitialAd(adUnitId: "adUnitId")
           self.interstitialAd.setDelegate(self)
       }

       func loadInterstitialAd() {
           // Used to load or reload the ad
           self.interstitialAd.loadAd()
       }

       func showInterstitialAd() {
           if self.interstitialAd.isAdReady() {
               self.interstitialAd.showAd(viewController: self, placementName: nil)
           }
       }

       func showInterstitialAd(withPlacementName placementName: 문자열) {
           // Check that ad is ready and that the placement is not capped
           if self.interstitialAd.isAdReady(), !LPMInterstitialAd.isPlacementCapped(placementName) {
               self.interstitialAd.showAd(viewController: self, placementName: placementName)
           }
       }

       // MARK: LPMInterstitialAdDelegate 메서드
       func didLoadAd(with adInfo: LPMAdInfo) {}
       func didFailToLoadAd(withAdUnitId adUnitId: 문자열, 오류: 오류) {}
       func didChangeAdInfo(_ adInfo: LPMAdInfo) {}
       func didDisplayAd(with adInfo: LPMAdInfo) {}
       func didFailToDisplayAd(with adInfo: LPMAdInfo, 오류: 오류) {}
       func didClickAd(with adInfo: LPMAdInfo) {}
       func didCloseAd(with adInfo: LPMAdInfo) {}
   }
   ```

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

통합 데모 애플리케이션 앱에 인터스티셜 광고 광고 유닛 API를 통합하는 방법을 보여 줍니다.

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