> ## Documentation Index
> Fetch the complete documentation index at: https://guide.daro.so/llms.txt
> Use this file to discover all available pages before exploring further.

# 배너 & MREC 광고

> DARO를 통해 배너와 MREC 광고를 구현하는 방법을 알아봅니다.

## 배너 & MREC 형태 소개

### 배너 광고

* 앱 레이아웃의 일부를 차지하는 직사각형 광고 형태로 보편적으로 사용됩니다.
* 대부분의 광고 디맨드들이 지원하는 형태인 320x50 사이즈를 사용합니다.

<img src="https://mintcdn.com/delightroom-5a71a6a8/j3-znW7LKrbpP3mb/sdk-integration/common-img/ad-formats/banner-example.png?fit=max&auto=format&n=j3-znW7LKrbpP3mb&q=85&s=d00b59bcc639852f56ead46315f574a5" alt="Banner Example Pn" title="Banner Example Pn" style={{ width:"37%" }} width="998" height="2160" data-path="sdk-integration/common-img/ad-formats/banner-example.png" />

### MREC 광고

* 300x250 의 사이즈를 MREC으로 구분하여 부릅니다.
* 전반적으로 배너와 동일한 특성을 가집니다.

<img src="https://mintcdn.com/delightroom-5a71a6a8/dxU0bpsPoPvkYh_g/sdk-integration/common-img/ad-formats/mrec-example.png?fit=max&auto=format&n=dxU0bpsPoPvkYh_g&q=85&s=6e43a92f3517134aba67f81f874cd36e" alt="Mrec Example Pn" title="Mrec Example Pn" style={{ width:"38%" }} width="998" height="2160" data-path="sdk-integration/common-img/ad-formats/mrec-example.png" />

***

## 광고 단위 설정

대시보드에서 발급받은 `ad unit ID`를 사용하여 광고 단위를 설정하세요.

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    let bannerUnit = DaroAdUnit(unitId: "your_banner_unit_id")
    let mrecUnit = DaroAdUnit(unitId: "your_mrec_unit_id")
    ```
  </Tab>

  <Tab title="Objective-C">
    ```objc theme={null}
    // Objective-C에서는 DaroAdUnit을 별도로 생성하지 않고
    // 초기화 시 unitId를 직접 전달합니다
    NSString *bannerUnitId = @"your_banner_unit_id";
    NSString *mrecUnitId = @"your_mrec_unit_id";
    ```
  </Tab>
</Tabs>

## 광고 구현

### 기본 사용법

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    // 배너 광고
    let bannerView = DaroAdBannerView(
        unit: bannerUnit,
        bannerSize: .banner
    )
    // MREC 광고
    let bannerView = DaroAdBannerView(
        unit: mrecUnit,
        bannerSize: .MREC
    )
    ```
  </Tab>

  <Tab title="Objective-C">
    ```objc theme={null}
    // 배너 광고
    DaroObjCBannerView *bannerView = [[DaroObjCBannerView alloc]
        initWithUnitId:bannerUnitId
        bannerSize:DaroObjCBannerSizeBanner];

    // MREC 광고
    DaroObjCBannerView *mrecView = [[DaroObjCBannerView alloc]
        initWithUnitId:mrecUnitId
        bannerSize:DaroObjCBannerSizeMrec];
    ```
  </Tab>
</Tabs>

> **Note**: 배너 광고는 생성 시 자동으로 초기 광고를 로드합니다.

### 수동 초기 로드 설정

광고의 초기 로드 시점을 직접 제어하려면 `autoLoad` 파라미터를 사용할 수 있습니다.

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    // 배너 광고 - 수동 초기 로드 모드
    let bannerView = DaroAdBannerView(
        unit: bannerUnit,
        bannerSize: .banner,
        autoLoad: false  // 자동 초기 로드 비활성화
    )

    // 원하는 시점에 초기 광고 로드
    bannerView.loadAd()
    ```
  </Tab>

  <Tab title="Objective-C">
    ```objc theme={null}
    // 배너 광고 - 수동 초기 로드 모드
    DaroObjCBannerView *bannerView = [[DaroObjCBannerView alloc]
        initWithUnitId:bannerUnitId
        bannerSize:DaroObjCBannerSizeBanner
        autoLoad:NO];  // 자동 초기 로드 비활성화

    // 원하는 시점에 초기 광고 로드
    [bannerView loadAd];
    ```
  </Tab>
</Tabs>

#### autoLoad 파라미터

* `true` (기본값): 뷰 생성 시 자동으로 초기 광고 로드
* `false`: 수동으로 `loadAd()` 호출 시 초기 광고 로드

수동 초기 로드는 다음과 같은 경우에 유용합니다:

* 특정 사용자 액션 후에 광고를 표시하고 싶을 때
* 화면 전환 시 광고 로드 타이밍을 제어하고 싶을 때
* 네트워크 상태를 확인한 후 광고를 로드하고 싶을 때

**참고**: 로드 이후 광고 새로고침은 SDK가 자동으로 관리합니다.

### 리스너/델리게이트 설정

<Tabs>
  <Tab title="Swift (Listener)">
    광고의 상태 변화를 모니터링하기 위해 리스너를 설정할 수 있습니다.

    ```swift theme={null}
    bannerView.listener.onAdLoadSuccess = { ad, adInfo in
        print("[DARO] Listener Banner Ad loaded: \(ad) \(adInfo)")
    }
    bannerView.listener.onAdLoadFail = { error in
        print("[DARO] Listener Banner Ad failed: \(error)")
    }
    bannerView.listener.onAdClicked = { adInfo in
        print("[DARO] Listener Banner Ad clicked: \(adInfo)")
    }
    bannerView.listener.onAdImpression = { adInfo in
        print("[DARO] Listener Banner Ad impression: \(adInfo)")
    }
    ```
  </Tab>

  <Tab title="Objective-C (Delegate)">
    광고의 상태 변화를 모니터링하기 위해 델리게이트를 설정할 수 있습니다.

    **1. 헤더 파일에서 델리게이트 프로토콜 채택:**

    ```objc theme={null}
    @interface YourViewController () <DaroObjCBannerViewDelegate>
    @property (nonatomic, strong) DaroObjCBannerView *bannerView;
    @end
    ```

    **2. 델리게이트 설정:**

    ```objc theme={null}
    // 델리게이트 설정
    self.bannerView.delegate = self;

    // 뷰 계층에 추가
    [self.view addSubview:self.bannerView];
    ```

    **3. 델리게이트 메서드 구현:**

    ```objc theme={null}
    #pragma mark - DaroObjCBannerViewDelegate

    - (void)bannerViewDidLoad:(DaroObjCBannerView *)bannerView
                       adInfo:(DaroObjCAdInfo *)adInfo {
        NSLog(@"[DARO] Banner loaded - Unit: %@", adInfo.adUnitId);
    }

    - (void)bannerView:(DaroObjCBannerView *)bannerView
        didFailWithError:(NSError *)error {
        NSLog(@"[DARO] Failed to load: %@", error.localizedDescription);
    }

    - (void)bannerViewDidClick:(DaroObjCBannerView *)bannerView
                        adInfo:(DaroObjCAdInfo *)adInfo {
        NSLog(@"[DARO] Banner clicked");
    }

    - (void)bannerViewDidRecordImpression:(DaroObjCBannerView *)bannerView
                                   adInfo:(DaroObjCAdInfo *)adInfo {
        NSLog(@"[DARO] Banner impression recorded");
    }
    ```
  </Tab>
</Tabs>
