# iOS용 노출 수준 매출 통합

> Impression Level 매출 (ILR) SDK API를 사용하여 노출 수준 매출 데이터를 Analytics 플랫폼에 통합하십시오.

## 필수 조건##prerequisites

레벨플레이 SDK 9.5.0 이상을 애플리케이션 올바르게 연동했는지 확인합니다. [iOS SDK 통합](/grow/levelplay/sdk/ios/sdk-integration.md)을 참조하십시오.

노출 수준 매출(ILR) SDK 기능 및 필수 조건에 대한 자세한 내용은 [노출 수준 매출 서버 측 API](/grow/levelplay/platform/api/impression-level-revenue-server-side.md)를 참조하십시오.

## LPMImpressionDataDelegate 구현##implement-the-lpmimpressiondatadelegate

레벨플레이 SDK는 표시된 광고에 대해 알려주는 포스트백을 실행합니다. LPMImpressionDataDelegate는 노출 데이터를 수신하기 위해 구현할 수 있는 선택적 델리게이트입니다. 이 리스너는 모든 광고 유닛에 대한 정보를 제공하며, 노출 수준 매출 사용하여 다양한 광고를 식별 수 있습니다.

애플리케이션 ImpressionData 리스너를 추가하려면 레벨플레이 SDK를 초기화하기 전에 리스너를 선언하여 정보 손실을 방지하십시오.

1. **Objective-C**

   ```objective-c
   + (void)addImpressionDataDelegate:(id<LPMImpressionDataDelegate>)delegate;
   ```

2. **Swift**

   ```swift
   레벨플레이.추가(_ 델리게이트: 모든 LPMImpressionDataDelegate)
   ```

레벨플레이 SDK는 노출 데이터와 관련된 성공적인 포스트백을 담당자에게 알립니다.

1. **Objective-C**

   ```objective-c
   - (void)impressionDataDidSucceed:(LPMImpressionData *)impressionData;
   ```

2. **Swift**

   ```swift
   func impressionDataDidSucceed(_ impressionData: LPMImpressionData)
   ```

### Impression Delegate 설정##set-up-the-impression-delegate

`setImpressionDataDelegate:`를 호출하여 각 광고 오브젝트에 `LPMImpressionDataDelegate`를 구현하고 설정합니다. 광고 오브젝트 구성하고 로드하거나 표시하기 직후에 할당하면 노출이 누락되지 않도록 합니다. 각 델리게이트는 할당된 인스턴스 대해서만 노출을 받습니다.

> **Note:**
>
> 광고 오브젝트 노출 델리게이트를 약하게 유지합니다. 델리게이트를 강력하게 레퍼런스. 그렇지 않으면 할당이 해제되고 콜백 수신이 중단될 수 있습니다.

#### 인터스티셜 광고##interstitial

1. **Objective-C**

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

   #pragma mark - LPMImpressionDataDelegate Methods
   - (void)impressionDataDidSucceed:(LPMImpressionData *)impressionData {
       NSLog(@"Interstitial impressionDataDidSucceed: %@", impressionData);
   }
   ```

2. **Swift**

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

   // MARK: LPMImpressionDataDelegate
   func impressionDataDidSucceed(_ impressionData: LPMImpressionData) {
       print("Interstitial impressionDataDidSucceed: \(impressionData)")
   }
   ```

#### 보상형 광고##rewarded

1. **Objective-C**

   ```objective-c
   self.rewardedAd = [[LPMRewardedAd alloc] initWithAdUnitId:@"adUnitId"];
   [self.rewardedAd setImpressionDataDelegate:self];

   #pragma mark - LPMImpressionDataDelegate Methods
   - (void)impressionDataDidSucceed:(LPMImpressionData *)impressionData {
       NSLog(@"Rewarded impressionDataDidSucceed: %@", impressionData);
   }
   ```

2. **Swift**

   ```swift
   self.rewardedAd = LPMRewardedAd(adUnitId: "adUnitId")
   self.rewardedAd.setImpressionDataDelegate(self)

   // MARK: LPMImpressionDataDelegate
   func impressionDataDidSucceed(_ impressionData: LPMImpressionData) {
       print("Rewarded impressionDataDidSucceed: \(impressionData)")
   }
   ```

#### Banner##banner

1. **Objective-C**

   ```objective-c
   self.bannerAdView = [[LPMBannerAdView alloc] initWithAdUnitId:@"adUnitId"];
   [self.bannerAdView setImpressionDataDelegate:self];

   #pragma mark - LPMImpressionDataDelegate Methods
   - (void)impressionDataDidSucceed:(LPMImpressionData *)impressionData {
       NSLog(@"Banner impressionDataDidSucceed: %@", impressionData);
   }
   ```

2. **Swift**

   ```swift
   self.bannerAdView = LPMBannerAdView(adUnitId: "adUnitId")
   self.bannerAdView.setImpressionDataDelegate(self)

   // MARK: LPMImpressionDataDelegate
   func impressionDataDidSucceed(_ impressionData: LPMImpressionData) {
       print("Banner impressionDataDidSucceed: \(impressionData)")
   }
   ```

### 노출 데이터 리스너 제거##remove-impression-data-listener

광고 오브젝트에 대한 노출 데이터 수신을 중지하려면 `nil`를 `setImpressionDataDelegate:`에 전달합니다.

1. **Objective-C**

   ```objective-c
   [self.interstitialAd setImpressionDataDelegate:nil];
   [self.rewardedAd setImpressionDataDelegate:nil];
   [self.bannerAdView setImpressionDataDelegate:nil];
   ```

2. **Swift**

   ```swift
   interstitialAd.setImpressionDataDelegate(nil)
   rewardedAd.setImpressionDataDelegate(nil)
   bannerAdView.setImpressionDataDelegate(nil)
   ```

> **Note:**
>
> 레벨플레이 SDK 7.1.0 릴리스부터 setImpressionDataDelegate는 지원 사용 중단 예정 예정이며 addImpressionDataDelegate로 대체됩니다.

## ILR 데이터 통합##integrate-the-ilr-data

LPMImpressionDataDelegate를 구현한 후 전용 BI 툴과 DWH로 노출 데이터를 전송하거나 타사 툴과 연동할 수 있습니다.

> **Important:**
>
> 반환된 데이터에는 null 값이 포함될 수 있습니다. 데이터를 할당하기 전에 잠재적인 크래시를 방지하기 위해 보호를 추가해야 합니다.

각 필드 별도로 참조하거나 allData 메서드를 사용하여 모든 정보를 얻을 수 있습니다.

1. **Objective-C**

   ```objective-c
   - (void)impressionDataDidSucceed:(LPMImpressionData *)impressionData {
       NSNumber *revenue = impressionData.revenue;
       NSString *ad_network = impressionData.adNetwork;
       NSDictionary *all_data = impressionData.allData;
   }
   ```

2. **Swift**

   ```swift
   func impressionDataDidSucceed(_ impressionData: LPMImpressionData)
    매출: 플로트 = impressionData. 매출? 플로트 ?? 0.0
    let adNetwork: String = impressionData.adNetwork ?? "unknown" 
    let allData: Dictionary = impressionData.allData as? 번역자<string, any>?? [:]
    }
   ```

다음 예시는 Impression Level 매출 SDK API 데이터를 Firebase용 Google Analytics 연동하는 방법을 보여 줍니다. 타사 리포트 툴 또는 자체적인 최적화 툴 및 데이터베이스와 연동하기 위해 필요한 변경 사항을 적용하거나 그대로 사용할 수 있습니다.

> **Important:**
>
> 내부 파라미터가 null 아닌지 확인합니다.

1. **Objective-C**

   ```objective-c
   /**
    광고가 성공적으로 표시되고 노출 데이터가 기록되면 호출됨 **/
   - (void)impressionDataDidSucceed:(LPMImpressionData *)impressionData {
       NSLog(@"%s", __PRETTY_FUNCTION__);
       [FIRAnalytics logEventWithName:kFIREventAdImpression 파라미터:@{
                               kFIRParameterAdPlatform:@"LevelPlay",
                               kFIRParameterAdSource:(impressionData.ad_network ?: @"No ad_network"),
                               kFIRParameterAdFormat:(impressionData.ad_format ?: @"No ad_format"),
                               kFIRParameterAdUnitName:(impressionData.instance_name ?: @"No instance_name"),
                               kFIRParameterCurrency:@"USD",
                               kFIRParameterValue:(impressionData.revenue ?: @0)
                           }];
   }
   ```

2. **Swift**

   ```swift
   /**
    광고가 성공적으로 표시되고 노출 데이터가 기록되면 호출됨 **/ 
   func impressionDataDidSucceed(_ impressionData: LPMImpressionData) {
     print("\(#function)")
     Analytics.logEvent(
        AnalyticsEventAdImpression, 
        매개 변수: [
        AnalyticsParameterAdPlatform: "레벨플레이",
        AnalyticsParameterAdSource: impressionData.ad_network ?? "No ad_network",
        AnalyticsParameterAdFormat: impressionData.ad_format ?? "ad_format 없음",
        AnalyticsParameterAdUnitName: impressionData.instance_name ?? "No instance_name",
        AnalyticsParameterCurrency: "USD",
        AnalyticsParameterValue: impressionData.revenue ?? 0,
      ])
   }
   ```
