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

# 레퍼런스

> Adrop Android SDK의 모든 클래스, 인터페이스, 열거형에 대한 상세 레퍼런스입니다.

## Adrop

Adrop SDK의 메인 클래스입니다. SDK 초기화 및 전역 설정을 담당합니다.

### 정적 메서드

| 메서드                                                                                                        | 설명                                                                           |
| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
| `initialize(context: Application, production: Boolean)`                                                    | SDK를 초기화합니다.                                                                 |
| `initialize(context: Application, production: Boolean, targetCountries: Array<String>)`                    | 타겟 국가를 지정하여 SDK를 초기화합니다.                                                     |
| `initialize(context: Application, production: Boolean, targetCountries: Array<String>, tokenKey: String?)` | 타겟 국가와 토큰 키를 지정하여 SDK를 초기화합니다.                                               |
| `setUID(uid: String)`                                                                                      | 사용자 식별자를 설정합니다. (SHA-256으로 해시됨)                                              |
| `setTheme(theme: AdropTheme)`                                                                              | 광고 테마를 설정합니다.                                                                |
| `setTokenKey(tokenKey: String)`                                                                            | 앱 토큰 키를 설정합니다.                                                               |
| `handleDeepLink(intent: Intent): Boolean`                                                                  | Adrop 딥링크를 처리합니다.                                                            |
| `openQuest(context: Context, channel: String, path: String?)`                                              | Adrop Quest 페이지를 엽니다.                                                        |
| `registerWebView(webView: WebView)`                                                                        | 백필 광고 지원을 위해 WebView를 등록합니다. `adrop-ads-backfill` 모듈이 필요합니다. 메인 스레드에서 호출하세요. |

### 정적 프로퍼티

| 프로퍼티             | 타입                     | 설명                                            |
| ---------------- | ---------------------- | --------------------------------------------- |
| `isProduction`   | `Boolean`              | 프로덕션 모드 여부                                    |
| `sdkVersion`     | `String`               | SDK 버전                                        |
| `consentManager` | `AdropConsentManager?` | 동의 관리자 인스턴스 (`adrop-ads-backfill` 설치 시 자동 구성) |

### 사용 예시

```kotlin theme={null}
// 초기화
Adrop.initialize(application, production = true)

// 사용자 ID 설정
Adrop.setUID("user123")

// 테마 설정
Adrop.setTheme(AdropTheme.DARK)

// 딥링크 처리
override fun onNewIntent(intent: Intent?) {
    super.onNewIntent(intent)
    intent?.let { Adrop.handleDeepLink(it) }
}
```

***

## AdropTheme

광고의 다크 모드 설정을 위한 열거형입니다.

### 값

| 값       | 설명                  |
| ------- | ------------------- |
| `LIGHT` | 라이트 모드              |
| `DARK`  | 다크 모드               |
| `AUTO`  | 시스템 설정 자동 따르기 (기본값) |

### 사용 예시

```kotlin theme={null}
Adrop.setTheme(AdropTheme.DARK)
```

***

## AdropErrorCode

광고 로드 및 표시 시 발생할 수 있는 에러 코드입니다.

### 값

| 에러 코드                                     | 설명              |
| ----------------------------------------- | --------------- |
| `ERROR_CODE_NETWORK`                      | 네트워크 오류         |
| `ERROR_CODE_INTERNAL`                     | 내부 오류           |
| `ERROR_CODE_INITIALIZE`                   | SDK 초기화 오류      |
| `ERROR_CODE_INVALID_UNIT`                 | 잘못된 광고 유닛 ID    |
| `ERROR_CODE_NOT_TARGET_COUNTRY`           | 타겟 국가가 아님       |
| `ERROR_CODE_AD_INACTIVE`                  | 비활성화된 광고        |
| `ERROR_CODE_AD_NO_FILL`                   | 노출 가능한 광고 없음    |
| `ERROR_CODE_AD_BACKFILL_NO_FILL`          | 백필 광고 없음        |
| `ERROR_CODE_AD_LOAD_DUPLICATED`           | 중복된 광고 로드 요청    |
| `ERROR_CODE_AD_LOADING`                   | 광고 로딩 중         |
| `ERROR_CODE_AD_EMPTY`                     | 광고가 비어 있음       |
| `ERROR_CODE_AD_SHOWN`                     | 광고가 이미 표시됨      |
| `ERROR_CODE_AD_HIDE_FOR_TODAY`            | 오늘 하루 보지 않기 설정됨 |
| `ERROR_CODE_ACCOUNT_USAGE_LIMIT_EXCEEDED` | 계정 사용 한도 초과     |
| `ERROR_CODE_LANDSCAPE_UNSUPPORTED`        | 가로 모드 미지원       |

***

## AdropAdChoicesPosition

백필 네이티브 광고의 AdChoices 마크 표시 위치를 설정하는 enum입니다.

### Values

| Value          | Description |
| -------------- | ----------- |
| `TOP_LEFT`     | 좌측 상단       |
| `TOP_RIGHT`    | 우측 상단 (기본값) |
| `BOTTOM_LEFT`  | 좌측 하단       |
| `BOTTOM_RIGHT` | 우측 하단       |

### Usage Example

```kotlin theme={null}
val nativeAd = AdropNativeAd(this, "YOUR_UNIT_ID")
nativeAd.preferredAdChoicesPosition = AdropAdChoicesPosition.BOTTOM_RIGHT
nativeAd.load()
```

***

## AdropBanner

배너 광고를 표시하는 뷰 클래스입니다.

### 생성자

```kotlin theme={null}
// XML에서 사용
AdropBanner(context: Context, attrs: AttributeSet?)

// 코드에서 사용
AdropBanner(context: Context, unitId: String, contextId: String? = null)
```

### 프로퍼티

| 프로퍼티                    | 타입                     | 설명                             |
| ----------------------- | ---------------------- | ------------------------------ |
| `listener`              | `AdropBannerListener?` | 배너 이벤트 리스너                     |
| `shouldAdjustHtmlStyle` | `Boolean`              | HTML 스타일 자동 조정 여부 (기본값: false) |
| `useCustomClick`        | `Boolean`              | 커스텀 클릭 처리 여부 (기본값: false)      |
| `adSize`                | `CreativeSize?`        | 백필 광고용 배너 크기 (dp)              |
| `contextId`             | `String`               | 컨텍스트 ID                        |
| `creativeId`            | `String`               | 크리에이티브 ID                      |
| `txId`                  | `String`               | 트랜잭션 ID                        |
| `campaignId`            | `String`               | 캠페인 ID                         |
| `destinationURL`        | `String`               | 목적지 URL                        |
| `creativeSize`          | `CreativeSize`         | 크리에이티브 크기                      |
| `isBackfilled`          | `Boolean`              | 백필 광고 여부                       |
| `browserTarget`         | `Int`                  | 목적지 URL을 여는 브라우저 타겟            |

### 메서드

| 메서드                         | 설명           |
| --------------------------- | ------------ |
| `setUnitId(unitId: String)` | 광고 유닛 ID 설정  |
| `getUnitId(): String`       | 광고 유닛 ID 조회  |
| `load()`                    | 광고 로드        |
| `open(url: String?)`        | 광고 랜딩 페이지 열기 |
| `destroy()`                 | 배너 광고 제거     |

### Companion 메서드

| 메서드                                            | 설명                                                                 |
| ---------------------------------------------- | ------------------------------------------------------------------ |
| `loads(context, unitId, contextId?, listener)` | 최대 5개 배너 광고 일괄 로드 — [일괄 로드](/ko/sdk/android/banner#일괄-로드-loads) 참고 |

### 사용 예시

```kotlin theme={null}
val banner = AdropBanner(this, "YOUR_UNIT_ID")
banner.listener = object : AdropBannerListener {
    override fun onAdReceived(banner: AdropBanner) {
        // 광고 수신 성공
    }

    override fun onAdFailedToReceive(banner: AdropBanner, errorCode: AdropErrorCode) {
        // 광고 수신 실패
    }

    override fun onAdClicked(banner: AdropBanner) {
        // 광고 클릭
    }
}

// 광고 로드
banner.load()
```

***

## AdropBannerListener

배너 광고 이벤트를 처리하는 인터페이스입니다.

### 메서드

| 메서드                                                                   | 설명                                   |
| --------------------------------------------------------------------- | ------------------------------------ |
| `onAdReceived(banner: AdropBanner)`                                   | 광고 수신 성공                             |
| `onAdClicked(banner: AdropBanner)`                                    | 광고 클릭                                |
| `onAdImpression(banner: AdropBanner)`                                 | 광고 노출 (선택적 구현)                       |
| `onAdFailedToReceive(banner: AdropBanner, errorCode: AdropErrorCode)` | 광고 수신 실패                             |
| `onAdVideoStart(banner: AdropBanner)`                                 | 동영상 재생 시작 (선택적 구현)                   |
| `onAdVideoEnd(banner: AdropBanner)`                                   | 동영상 재생 종료 (선택적 구현)                   |
| `onAdsReceived(banners: List<AdropBanner>)`                           | `AdropBanner.loads()` 배치 수신 (선택적 구현) |
| `onAdsFailedToReceive(errorCode: AdropErrorCode)`                     | `AdropBanner.loads()` 배치 실패 (선택적 구현) |

<Note>
  모든 콜백은 메인 스레드에서 호출됩니다 (`@UiThread`).
</Note>

***

## AdropNativeAd

네이티브 광고를 표시하는 클래스입니다.

### 생성자

```kotlin theme={null}
AdropNativeAd(context: Context, unitId: String, contextId: String? = null)
```

### 프로퍼티

| 프로퍼티                         | 타입                       | 설명                                                |
| ---------------------------- | ------------------------ | ------------------------------------------------- |
| `unitId`                     | `String`                 | 광고 유닛 ID                                          |
| `contextId`                  | `String?`                | 컨텍스트 ID                                           |
| `listener`                   | `AdropNativeAdListener?` | 네이티브 광고 이벤트 리스너                                   |
| `useCustomClick`             | `Boolean`                | 커스텀 클릭 처리 여부                                      |
| `preferredAdChoicesPosition` | `AdropAdChoicesPosition` | 백필 네이티브 광고의 AdChoices 마크 표시 위치 (기본값: `TOP_RIGHT`) |
| `context`                    | `Context`                | 컨텍스트                                              |
| `isLoaded`                   | `Boolean`                | 광고 로드 완료 여부                                       |
| `isDestroyed`                | `Boolean`                | 광고 제거 여부                                          |
| `creativeId`                 | `String`                 | 크리에이티브 ID                                         |
| `txId`                       | `String`                 | 트랜잭션 ID                                           |
| `campaignId`                 | `String`                 | 캠페인 ID                                            |
| `creativeSize`               | `CreativeSize`           | 크리에이티브 크기                                         |
| `icon`                       | `String`                 | 아이콘 이미지 URL                                       |
| `cover`                      | `String`                 | 커버 이미지 URL                                        |
| `headline`                   | `String`                 | 제목                                                |
| `body`                       | `String`                 | 본문                                                |
| `creative`                   | `String`                 | 크리에이티브 URL                                        |
| `asset`                      | `String`                 | 에셋 URL                                            |
| `destinationURL`             | `String`                 | 목적지 URL                                           |
| `advertiser`                 | `String`                 | **Deprecated.** `profile.displayName`을 사용하세요.     |
| `advertiserURL`              | `String`                 | **Deprecated.** `profile.link`를 사용하세요.            |
| `accountTag`                 | `JSONObject`             | **Deprecated.** 더 이상 지원되지 않습니다.                   |
| `creativeTag`                | `JSONObject`             | **Deprecated.** 더 이상 지원되지 않습니다.                   |
| `callToAction`               | `String`                 | 행동 유도 텍스트                                         |
| `extra`                      | `JSONObject`             | 추가 데이터                                            |
| `profile`                    | `AdropNativeAdProfile`   | 프로필 정보                                            |
| `isBackfilled`               | `Boolean`                | 백필 광고 여부                                          |
| `browserTarget`              | `Int`                    | 목적지 URL을 여는 브라우저 타겟                               |

### 메서드

| 메서드         | 설명    |
| ----------- | ----- |
| `load()`    | 광고 로드 |
| `destroy()` | 광고 제거 |

### Companion 메서드

| 메서드                                            | 설명                                                                   |
| ---------------------------------------------- | -------------------------------------------------------------------- |
| `loads(context, unitId, contextId?, listener)` | 최대 5개 네이티브 광고 일괄 로드 — [일괄 로드](/ko/sdk/android/native#일괄-로드-loads) 참고 |

### 사용 예시

```kotlin theme={null}
val nativeAd = AdropNativeAd(this, "YOUR_UNIT_ID")
nativeAd.listener = object : AdropNativeAdListener {
    override fun onAdReceived(ad: AdropNativeAd) {
        // 광고 데이터 바인딩
        headlineTextView.text = ad.headline
        bodyTextView.text = ad.body
        advertiserTextView.text = ad.advertiser
        ctaButton.text = ad.callToAction

        // 뷰에 광고 설정
        nativeAdView.setNativeAd(ad)
    }

    override fun onAdFailedToReceive(ad: AdropNativeAd, errorCode: AdropErrorCode) {
        // 광고 수신 실패
    }

    override fun onAdClicked(ad: AdropNativeAd) {
        // 광고 클릭
    }
}

nativeAd.load()
```

***

## AdropNativeAdView

네이티브 광고를 렌더링하는 컨테이너 뷰입니다.

### 생성자

```kotlin theme={null}
AdropNativeAdView(context: Context, attrs: AttributeSet?)
```

### 프로퍼티

| 프로퍼티            | 타입        | 설명             |
| --------------- | --------- | -------------- |
| `isEntireClick` | `Boolean` | 전체 영역 클릭 가능 여부 |

### 메서드

| 메서드                                                          | 설명                          |
| ------------------------------------------------------------ | --------------------------- |
| `setIconView(view: View, listener: OnClickListener?)`        | 아이콘 뷰 설정 (ImageView만 가능)    |
| `setHeadLineView(view: View, listener: OnClickListener?)`    | 제목 뷰 설정 (TextView만 가능)      |
| `setBodyView(view: View)`                                    | 본문 뷰 설정 (TextView만 가능)      |
| `setMediaView(view: AdropMediaView)`                         | 미디어 뷰 설정                    |
| `setAdvertiserView(view: View, listener: OnClickListener?)`  | 광고주 뷰 설정 (TextView만 가능)     |
| `setCallToActionView(view: View)`                            | 행동 유도 버튼 뷰 설정               |
| `setProfileNameView(view: View, listener: OnClickListener?)` | 프로필 이름 뷰 설정                 |
| `setProfileLogoView(view: View, listener: OnClickListener?)` | 프로필 로고 뷰 설정 (ImageView만 가능) |
| `setNativeAd(ad: AdropNativeAd)`                             | 네이티브 광고 설정                  |
| `destroy()`                                                  | 뷰 제거                        |

### 사용 예시

```kotlin theme={null}
// 레이아웃에서 뷰 참조
val nativeAdView = findViewById<AdropNativeAdView>(R.id.native_ad_view)
val iconView = findViewById<ImageView>(R.id.ad_icon)
val headlineView = findViewById<TextView>(R.id.ad_headline)
val bodyView = findViewById<TextView>(R.id.ad_body)
val mediaView = findViewById<AdropMediaView>(R.id.ad_media)
val advertiserView = findViewById<TextView>(R.id.ad_advertiser)
val ctaView = findViewById<Button>(R.id.ad_cta)

// 뷰 설정
nativeAdView.setIconView(iconView)
nativeAdView.setHeadLineView(headlineView)
nativeAdView.setBodyView(bodyView)
nativeAdView.setMediaView(mediaView)
nativeAdView.setAdvertiserView(advertiserView)
nativeAdView.setCallToActionView(ctaView)

// 광고 로드 후 설정
nativeAd.listener = object : AdropNativeAdListener {
    override fun onAdReceived(ad: AdropNativeAd) {
        nativeAdView.setNativeAd(ad)
    }
}
```

***

## AdropNativeAdListener

네이티브 광고 이벤트를 처리하는 인터페이스입니다.

### 메서드

| 메서드                                                                 | 설명                                     |
| ------------------------------------------------------------------- | -------------------------------------- |
| `onAdReceived(ad: AdropNativeAd)`                                   | 광고 수신 성공                               |
| `onAdClicked(ad: AdropNativeAd)`                                    | 광고 클릭                                  |
| `onAdImpression(ad: AdropNativeAd)`                                 | 광고 노출 (선택적 구현)                         |
| `onAdFailedToReceive(ad: AdropNativeAd, errorCode: AdropErrorCode)` | 광고 수신 실패                               |
| `onAdVideoStart(ad: AdropNativeAd)`                                 | 동영상 재생 시작 (선택적 구현)                     |
| `onAdVideoEnd(ad: AdropNativeAd)`                                   | 동영상 재생 종료 (선택적 구현)                     |
| `onAdsReceived(ads: List<AdropNativeAd>)`                           | `AdropNativeAd.loads()` 배치 수신 (선택적 구현) |
| `onAdsFailedToReceive(errorCode: AdropErrorCode)`                   | `AdropNativeAd.loads()` 배치 실패 (선택적 구현) |

<Note>
  모든 콜백은 메인 스레드에서 호출됩니다 (`@UiThread`).
</Note>

***

## AdropNativeAdProfile

네이티브 광고의 프로필 정보를 담는 데이터 클래스입니다.

### 프로퍼티

| 프로퍼티          | 타입       | 설명             |
| ------------- | -------- | -------------- |
| `displayLogo` | `String` | 프로필 로고 이미지 URL |
| `displayName` | `String` | 프로필 이름         |
| `link`        | `String` | 프로필 링크 URL     |

### 사용 예시

```kotlin theme={null}
val profile = nativeAd.profile
profileNameTextView.text = profile.displayName
// 프로필 로고는 ImageView에 로드
```

***

## AdropMediaView

네이티브 광고의 미디어 콘텐츠를 표시하는 뷰입니다.

### 생성자

```kotlin theme={null}
AdropMediaView(context: Context, attrs: AttributeSet?)
```

### 설명

미디어 뷰는 네이티브 광고의 이미지나 동영상 콘텐츠를 표시합니다. `AdropNativeAdView`의 `setMediaView()` 메서드를 통해 설정해야 합니다.

***

## AdropInterstitialAd

전면 광고를 표시하는 클래스입니다.

### 생성자

```kotlin theme={null}
AdropInterstitialAd(context: Context, unitId: String)
```

### 프로퍼티

| 프로퍼티                     | 타입                                  | 설명                  |
| ------------------------ | ----------------------------------- | ------------------- |
| `interstitialAdListener` | `AdropInterstitialAdListener?`      | 전면 광고 이벤트 리스너       |
| `closeListener`          | `AdropInterstitialAdCloseListener?` | 전면 광고 닫기 이벤트 리스너    |
| `context`                | `Context?`                          | 컨텍스트                |
| `unitId`                 | `String`                            | 광고 유닛 ID            |
| `isLoaded`               | `Boolean`                           | 광고 로드 완료 여부         |
| `creativeId`             | `String`                            | 크리에이티브 ID           |
| `txId`                   | `String`                            | 트랜잭션 ID             |
| `campaignId`             | `String`                            | 캠페인 ID              |
| `isBackfilled`           | `Boolean`                           | 백필 광고 여부            |
| `browserTarget`          | `Int`                               | 목적지 URL을 여는 브라우저 타겟 |

### 메서드

| 메서드                            | 설명                  |
| ------------------------------ | ------------------- |
| `load()`                       | 광고 로드               |
| `show(fromActivity: Activity)` | 광고 표시               |
| `close()`                      | 프로그래밍 방식으로 전면 광고 닫기 |
| `destroy()`                    | 광고 제거               |

### 사용 예시

```kotlin theme={null}
val interstitialAd = AdropInterstitialAd(this, "YOUR_UNIT_ID")

interstitialAd.interstitialAdListener = object : AdropInterstitialAdListener {
    override fun onAdReceived(ad: AdropInterstitialAd) {
        // 광고 로드 완료, 표시 가능
        ad.show(this@MainActivity)
    }

    override fun onAdFailedToReceive(ad: AdropInterstitialAd, errorCode: AdropErrorCode) {
        // 광고 수신 실패
    }

    override fun onAdDidDismissFullScreen(ad: AdropInterstitialAd) {
        // 광고 닫힘
    }
}

// 광고 로드
interstitialAd.load()
```

***

## AdropInterstitialAdListener

전면 광고 이벤트를 처리하는 인터페이스입니다.

### 메서드

| 메서드                                                                              | 설명                   |
| -------------------------------------------------------------------------------- | -------------------- |
| `onAdReceived(ad: AdropInterstitialAd)`                                          | 광고 수신 성공             |
| `onAdFailedToReceive(ad: AdropInterstitialAd, errorCode: AdropErrorCode)`        | 광고 수신 실패             |
| `onAdImpression(ad: AdropInterstitialAd)`                                        | 광고 노출 (선택적 구현)       |
| `onAdClicked(ad: AdropInterstitialAd)`                                           | 광고 클릭 (선택적 구현)       |
| `onAdWillPresentFullScreen(ad: AdropInterstitialAd)`                             | 전면 광고 표시 시작 (선택적 구현) |
| `onAdDidPresentFullScreen(ad: AdropInterstitialAd)`                              | 전면 광고 표시 완료 (선택적 구현) |
| `onAdWillDismissFullScreen(ad: AdropInterstitialAd)`                             | 전면 광고 닫기 시작 (선택적 구현) |
| `onAdDidDismissFullScreen(ad: AdropInterstitialAd)`                              | 전면 광고 닫기 완료 (선택적 구현) |
| `onAdFailedToShowFullScreen(ad: AdropInterstitialAd, errorCode: AdropErrorCode)` | 광고 표시 실패 (선택적 구현)    |

<Note>
  모든 콜백은 메인 스레드에서 호출됩니다 (`@UiThread`).
</Note>

***

## AdropInterstitialAdCloseListener

전면 광고 닫기 이벤트를 처리하는 인터페이스입니다.

### 메서드

| 메서드                                      | 설명                                            |
| ---------------------------------------- | --------------------------------------------- |
| `onBackPressed(ad: AdropInterstitialAd)` | 전면 광고가 표시된 상태에서 뒤로 가기 버튼을 누를 때 호출됩니다 (선택적 구현) |

<Note>
  모든 콜백은 메인 스레드에서 호출됩니다 (`@UiThread`).
</Note>

***

## AdropRewardedAd

보상형 광고를 표시하는 클래스입니다.

### 생성자

```kotlin theme={null}
AdropRewardedAd(context: Context, unitId: String)
```

### 프로퍼티

| 프로퍼티                            | 타입                               | 설명                                |
| ------------------------------- | -------------------------------- | --------------------------------- |
| `rewardedAdListener`            | `AdropRewardedAdListener?`       | 보상형 광고 이벤트 리스너                    |
| `context`                       | `Context?`                       | 컨텍스트                              |
| `unitId`                        | `String`                         | 광고 유닛 ID                          |
| `isLoaded`                      | `Boolean`                        | 광고 로드 완료 여부                       |
| `creativeId`                    | `String`                         | 크리에이티브 ID                         |
| `txId`                          | `String`                         | 트랜잭션 ID                           |
| `campaignId`                    | `String`                         | 캠페인 ID                            |
| `isBackfilled`                  | `Boolean`                        | 백필 광고 여부                          |
| `serverSideVerificationOptions` | `ServerSideVerificationOptions?` | 서버 사이드 검증 옵션 (userId, customData) |
| `browserTarget`                 | `Int`                            | 목적지 URL을 여는 브라우저 타겟               |

### 메서드

| 메서드                                                                                     | 설명                |
| --------------------------------------------------------------------------------------- | ----------------- |
| `load()`                                                                                | 광고 로드             |
| `show(fromActivity: Activity, userDidEarnRewardHandler: AdropUserDidEarnRewardHandler)` | 광고 표시 및 보상 핸들러 설정 |
| `destroy()`                                                                             | 광고 제거             |

### 사용 예시

```kotlin theme={null}
val rewardedAd = AdropRewardedAd(this, "YOUR_UNIT_ID")

rewardedAd.rewardedAdListener = object : AdropRewardedAdListener {
    override fun onAdReceived(ad: AdropRewardedAd) {
        // 광고 로드 완료
        ad.show(this@MainActivity) { type, amount ->
            // 보상 지급
            Log.d("Reward", "Type: $type, Amount: $amount")
        }
    }

    override fun onAdFailedToReceive(ad: AdropRewardedAd, errorCode: AdropErrorCode) {
        // 광고 수신 실패
    }
}

rewardedAd.load()
```

***

## AdropRewardedAdListener

보상형 광고 이벤트를 처리하는 인터페이스입니다.

### 메서드

| 메서드                                                                          | 설명                    |
| ---------------------------------------------------------------------------- | --------------------- |
| `onAdReceived(ad: AdropRewardedAd)`                                          | 광고 수신 성공              |
| `onAdFailedToReceive(ad: AdropRewardedAd, errorCode: AdropErrorCode)`        | 광고 수신 실패              |
| `onAdImpression(ad: AdropRewardedAd)`                                        | 광고 노출 (선택적 구현)        |
| `onAdClicked(ad: AdropRewardedAd)`                                           | 광고 클릭 (선택적 구현)        |
| `onAdWillPresentFullScreen(ad: AdropRewardedAd)`                             | 보상형 광고 표시 시작 (선택적 구현) |
| `onAdDidPresentFullScreen(ad: AdropRewardedAd)`                              | 보상형 광고 표시 완료 (선택적 구현) |
| `onAdWillDismissFullScreen(ad: AdropRewardedAd)`                             | 보상형 광고 닫기 시작 (선택적 구현) |
| `onAdDidDismissFullScreen(ad: AdropRewardedAd)`                              | 보상형 광고 닫기 완료 (선택적 구현) |
| `onAdFailedToShowFullScreen(ad: AdropRewardedAd, errorCode: AdropErrorCode)` | 광고 표시 실패 (선택적 구현)     |

<Note>
  모든 콜백은 메인 스레드에서 호출됩니다 (`@UiThread`).
</Note>

***

## AdropUserDidEarnRewardHandler

보상 지급 시 호출되는 타입 별칭입니다.

### 정의

```kotlin theme={null}
typealias AdropUserDidEarnRewardHandler = (type: Int, amount: Int) -> Unit
```

### 파라미터

| 파라미터     | 타입    | 설명    |
| -------- | ----- | ----- |
| `type`   | `Int` | 보상 타입 |
| `amount` | `Int` | 보상 수량 |

### 사용 예시

```kotlin theme={null}
rewardedAd.show(this) { type, amount ->
    // 사용자에게 보상 지급
    when (type) {
        0 -> grantCoins(amount)
        1 -> grantLives(amount)
    }
}
```

***

## AdropPopupAd

팝업 광고를 표시하는 클래스입니다.

### 생성자

```kotlin theme={null}
AdropPopupAd(context: Context, unitId: String)
```

### 프로퍼티

| 프로퍼티                    | 타입                           | 설명                   |
| ----------------------- | ---------------------------- | -------------------- |
| `popupAdListener`       | `AdropPopupAdListener?`      | 팝업 광고 이벤트 리스너        |
| `closeListener`         | `AdropPopupAdCloseListener?` | 팝업 닫기 이벤트 리스너        |
| `useCustomClick`        | `Boolean`                    | 커스텀 클릭 처리 여부         |
| `closeTextColor`        | `Int?`                       | 닫기 버튼 텍스트 색상         |
| `hideForTodayTextColor` | `Int?`                       | "오늘 하루 보지 않기" 텍스트 색상 |
| `ctaTextColor`          | `Int?`                       | CTA 버튼 텍스트 색상        |
| `backgroundColor`       | `Int?`                       | 배경 색상                |
| `unitId`                | `String`                     | 광고 유닛 ID             |
| `creativeIds`           | `List<String>`               | 크리에이티브 ID 목록         |
| `creativeId`            | `String`                     | 현재 크리에이티브 ID         |
| `destinationURL`        | `String`                     | 목적지 URL              |
| `isLoaded`              | `Boolean`                    | 광고 로드 완료 여부          |
| `txId`                  | `String`                     | 트랜잭션 ID              |
| `campaignId`            | `String`                     | 캠페인 ID               |
| `browserTarget`         | `Int`                        | 목적지 URL을 여는 브라우저 타겟  |

### 메서드

| 메서드                        | 설명           |
| -------------------------- | ------------ |
| `load()`                   | 광고 로드        |
| `show(activity: Activity)` | 광고 표시        |
| `open(url: String?)`       | 광고 랜딩 페이지 열기 |
| `close()`                  | 광고 닫기        |
| `destroy()`                | 광고 제거        |

### 사용 예시

```kotlin theme={null}
val popupAd = AdropPopupAd(this, "YOUR_UNIT_ID")

// 스타일 커스터마이징
popupAd.closeTextColor = Color.WHITE
popupAd.backgroundColor = Color.parseColor("#80000000")

popupAd.popupAdListener = object : AdropPopupAdListener {
    override fun onAdReceived(ad: AdropPopupAd) {
        // 광고 로드 완료
        ad.show(this@MainActivity)
    }

    override fun onAdFailedToReceive(ad: AdropPopupAd, errorCode: AdropErrorCode) {
        // 광고 수신 실패
    }
}

popupAd.closeListener = object : AdropPopupAdCloseListener {
    override fun onTodayOffClicked(ad: AdropPopupAd) {
        // "오늘 하루 보지 않기" 클릭
    }
}

popupAd.load()
```

***

## AdropPopupAdListener

팝업 광고 이벤트를 처리하는 인터페이스입니다.

### 메서드

| 메서드                                                                       | 설명                   |
| ------------------------------------------------------------------------- | -------------------- |
| `onAdReceived(ad: AdropPopupAd)`                                          | 광고 수신 성공             |
| `onAdFailedToReceive(ad: AdropPopupAd, errorCode: AdropErrorCode)`        | 광고 수신 실패             |
| `onAdImpression(ad: AdropPopupAd)`                                        | 광고 노출 (선택적 구현)       |
| `onAdClicked(ad: AdropPopupAd)`                                           | 광고 클릭 (선택적 구현)       |
| `onAdWillPresentFullScreen(ad: AdropPopupAd)`                             | 팝업 광고 표시 시작 (선택적 구현) |
| `onAdDidPresentFullScreen(ad: AdropPopupAd)`                              | 팝업 광고 표시 완료 (선택적 구현) |
| `onAdWillDismissFullScreen(ad: AdropPopupAd)`                             | 팝업 광고 닫기 시작 (선택적 구현) |
| `onAdDidDismissFullScreen(ad: AdropPopupAd)`                              | 팝업 광고 닫기 완료 (선택적 구현) |
| `onAdFailedToShowFullScreen(ad: AdropPopupAd, errorCode: AdropErrorCode)` | 광고 표시 실패 (선택적 구현)    |
| `onAdVideoStart(ad: AdropPopupAd)`                                        | 동영상 재생 시작 (선택적 구현)   |
| `onAdVideoEnd(ad: AdropPopupAd)`                                          | 동영상 재생 종료 (선택적 구현)   |

<Note>
  모든 콜백은 메인 스레드에서 호출됩니다 (`@UiThread`).
</Note>

***

## AdropPopupAdCloseListener

팝업 광고 닫기 이벤트를 처리하는 인터페이스입니다.

### 메서드

| 메서드                                   | 설명                        |
| ------------------------------------- | ------------------------- |
| `onClosed(ad: AdropPopupAd)`          | 팝업 닫기 (선택적 구현)            |
| `onDimClicked(ad: AdropPopupAd)`      | 딤 영역 클릭 (선택적 구현)          |
| `onTodayOffClicked(ad: AdropPopupAd)` | "오늘 하루 보지 않기" 클릭 (선택적 구현) |

<Note>
  모든 콜백은 메인 스레드에서 호출됩니다 (`@UiThread`).
</Note>

***

## AdropSplashAd

스플래시 광고를 표시하는 클래스입니다.

### 생성자

```kotlin theme={null}
AdropSplashAd(application: Application, shouldSkip: ((splashAd: AdropSplashAd) -> Boolean)? = null)
```

### 파라미터

| 파라미터          | 타입                              | 설명                       |
| ------------- | ------------------------------- | ------------------------ |
| `application` | `Application`                   | 애플리케이션 인스턴스              |
| `shouldSkip`  | `((AdropSplashAd) -> Boolean)?` | 스플래시 광고 스킵 여부 판단 함수 (선택) |

### 프로퍼티

| 프로퍼티               | 타입                       | 설명              |
| ------------------ | ------------------------ | --------------- |
| `splashAdListener` | `AdropSplashAdListener?` | 스플래시 광고 이벤트 리스너 |
| `creativeId`       | `String`                 | 크리에이티브 ID       |
| `isClosed`         | `Boolean`                | 광고 닫힘 여부        |
| `isDestroyed`      | `Boolean`                | 광고 제거 여부        |
| `unitId`           | `String`                 | 광고 유닛 ID        |

### 메서드

| 메서드         | 설명                       |
| ----------- | ------------------------ |
| `close()`   | 광고 닫기                    |
| `destroy()` | 리소스 해제 및 라이프사이클 콜백 등록 해제 |

### 사용 예시

```kotlin theme={null}
// AndroidManifest.xml에 AdropSplashAdActivity 추가 필요
class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()

        val splashAd = AdropSplashAd(this) { ad ->
            // 특정 조건에서 스킵
            false
        }

        splashAd.splashAdListener = object : AdropSplashAdListener {
            override fun onAdReceived(ad: AdropSplashAd) {
                // 광고 수신
            }

            override fun onAdClose(ad: AdropSplashAd, impressed: Boolean) {
                // 광고 닫힘
            }
        }
    }
}
```

***

## AdropSplashAdListener

스플래시 광고 이벤트를 처리하는 인터페이스입니다.

### 메서드

| 메서드                                                                 | 설명                |
| ------------------------------------------------------------------- | ----------------- |
| `onAdReceived(ad: AdropSplashAd)`                                   | 광고 수신 성공 (선택적 구현) |
| `onAdFailedToReceive(ad: AdropSplashAd, errorCode: AdropErrorCode)` | 광고 수신 실패 (선택적 구현) |
| `onAdImpression(ad: AdropSplashAd)`                                 | 광고 노출 (선택적 구현)    |
| `onAdClose(ad: AdropSplashAd, impressed: Boolean)`                  | 광고 닫힘 (필수 구현)     |

### 파라미터

| 파라미터        | 타입        | 설명                |
| ----------- | --------- | ----------------- |
| `impressed` | `Boolean` | 광고가 실제로 노출되었는지 여부 |

<Note>
  모든 콜백은 메인 스레드에서 호출됩니다 (`@UiThread`).
</Note>

***

## AdropSplashAdView

스플래시 광고를 뷰로 표시하는 클래스입니다.

### 생성자

```kotlin theme={null}
AdropSplashAdView(context: Context, unitId: String, adRequestTimeout: Long = 1000L)
AdropSplashAdView(context: Context, attrs: AttributeSet?)
```

### 프로퍼티

| 프로퍼티              | 타입                           | 설명                          |
| ----------------- | ---------------------------- | --------------------------- |
| `listener`        | `AdropSplashAdViewListener?` | 스플래시 광고 뷰 이벤트 리스너           |
| `displayDuration` | `Long`                       | 표시 시간 (Deprecated: 콘솔에서 설정) |
| `creativeId`      | `String`                     | 크리에이티브 ID                   |
| `isClosed`        | `Boolean`                    | 광고 닫힘 여부                    |
| `unitId`          | `String`                     | 광고 유닛 ID                    |
| `txId`            | `String`                     | 트랜잭션 ID                     |
| `campaignId`      | `String`                     | 캠페인 ID                      |

### 메서드

| 메서드         | 설명                         |
| ----------- | -------------------------- |
| `load()`    | 광고 로드                      |
| `destroy()` | 리소스 해제 (타이머, 가시성 추적기, 리스너) |

### 사용 예시

```kotlin theme={null}
val splashAdView = AdropSplashAdView(this, "YOUR_UNIT_ID", adRequestTimeout = 2000L)

splashAdView.listener = object : AdropSplashAdViewListener {
    override fun onAdReceived(ad: AdropSplashAdView) {
        // 광고 수신
    }

    override fun onAdClose(ad: AdropSplashAdView, impressed: Boolean) {
        // 광고 닫힘 - 메인 화면으로 이동
        if (impressed) {
            // 광고가 노출됨
        }
        startMainActivity()
    }
}

// 레이아웃에 추가
container.addView(splashAdView)
splashAdView.load()
```

***

## AdropSplashAdViewListener

스플래시 광고 뷰 이벤트를 처리하는 인터페이스입니다.

### 메서드

| 메서드                                                                     | 설명                |
| ----------------------------------------------------------------------- | ----------------- |
| `onAdReceived(ad: AdropSplashAdView)`                                   | 광고 수신 성공 (선택적 구현) |
| `onAdFailedToReceive(ad: AdropSplashAdView, errorCode: AdropErrorCode)` | 광고 수신 실패 (선택적 구현) |
| `onAdImpression(ad: AdropSplashAdView)`                                 | 광고 노출 (선택적 구현)    |
| `onAdClose(ad: AdropSplashAdView, impressed: Boolean)`                  | 광고 닫힘 (필수 구현)     |

<Note>
  모든 콜백은 메인 스레드에서 호출됩니다 (`@UiThread`).
</Note>

***

## AdropKey

사용자 속성 키를 정의하는 클래스입니다.

### 상수

| 상수       | 값         | 설명   |
| -------- | --------- | ---- |
| `AGE`    | `"AGE"`   | 나이   |
| `BIRTH`  | `"BIRTH"` | 생년월일 |
| `GENDER` | `"GDR"`   | 성별   |

### 사용 예시

```kotlin theme={null}
val params = AdropEventParam.Builder()
    .putInt(AdropKey.AGE, 25)
    .putString(AdropKey.GENDER, AdropValue.AdropGender.MALE)
    .putString(AdropKey.BIRTH, "19990101")
    .build()
```

***

## AdropValue

사용자 속성 값을 정의하는 클래스입니다.

### 공통 상수

| 상수        | 값     | 설명     |
| --------- | ----- | ------ |
| `UNKNOWN` | `"U"` | 알 수 없음 |

### AdropBirth

생년월일 포맷을 정의합니다.

| 상수                   | 값            | 설명                     |
| -------------------- | ------------ | ---------------------- |
| `formatYear`         | `"yyyy"`     | 연도만 (예: 1999)          |
| `formatYearMonth`    | `"yyyyMM"`   | 연도와 월 (예: 199901)      |
| `formatYearMonthDay` | `"yyyyMMdd"` | 연도, 월, 일 (예: 19990101) |

### AdropGender

성별 값을 정의합니다.

| 상수       | 값     | 설명 |
| -------- | ----- | -- |
| `MALE`   | `"M"` | 남성 |
| `FEMALE` | `"F"` | 여성 |
| `OTHER`  | `"O"` | 기타 |

### 사용 예시

```kotlin theme={null}
val params = AdropEventParam.Builder()
    .putString(AdropKey.GENDER, AdropValue.AdropGender.MALE)
    .putString(AdropKey.BIRTH, "19990101") // formatYearMonthDay 사용
    .build()
```

***

## CreativeSize

크리에이티브의 크기를 나타내는 데이터 클래스입니다.

### 프로퍼티

| 프로퍼티     | 타입       | 설명      |
| -------- | -------- | ------- |
| `width`  | `Double` | 너비 (dp) |
| `height` | `Double` | 높이 (dp) |

### 사용 예시

```kotlin theme={null}
val banner = AdropBanner(this, "YOUR_UNIT_ID")
banner.adSize = CreativeSize(320.0, 50.0)
```

***

## AdropEventParam

사용자 정의 이벤트 파라미터를 생성하는 클래스입니다.

### Builder 메서드

| 메서드                                       | 설명                                |
| ----------------------------------------- | --------------------------------- |
| `putBoolean(key: String, value: Boolean)` | Boolean 값 추가                      |
| `putInt(key: String, value: Int)`         | Int 값 추가                          |
| `putFloat(key: String, value: Float)`     | Float 값 추가                        |
| `putString(key: String, value: String)`   | String 값 추가 (최대 1024자)            |
| `putLong(key: String, value: Long)`       | Long 값 추가 (최대값: 9007199254740991) |
| `putItems(items: List<AdropEventParam>)`  | 다중 아이템 이벤트를 위한 아이템 목록 추가          |
| `build()`                                 | AdropEventParam 인스턴스 생성           |

### 사용 예시

```kotlin theme={null}
val params = AdropEventParam.Builder()
    .putString(AdropKey.GENDER, AdropValue.AdropGender.MALE)
    .putInt(AdropKey.AGE, 25)
    .putString(AdropKey.BIRTH, "19990101")
    .build()
```

<Note>
  * 파라미터 키는 1\~64자여야 합니다.
  * 문자열 값은 최대 1024자까지 가능합니다.
  * `putLong()`에 전달하는 값은 JavaScript의 MAX\_SAFE\_INTEGER(9007199254740991)를 초과할 수 없습니다.
</Note>

***

## AdropMetrics

사용자 이벤트 및 속성을 관리하는 싱글턴 객체입니다.

### 정적 프로퍼티

| 프로퍼티              | 타입           | 설명                             |
| ----------------- | ------------ | ------------------------------ |
| `userDataConsent` | `Boolean`    | 현재 사용자 데이터 동의 상태 (기본값: `true`) |
| `properties`      | `JSONObject` | 현재 커스텀 사용자 속성                  |

### 정적 메서드

| 메서드                                                 | 설명                                                           |
| --------------------------------------------------- | ------------------------------------------------------------ |
| `sendEvent(name: String, params: AdropEventParam?)` | 사용자 이벤트 전송                                                   |
| `logEvent(name: String, params: AdropEventParam?)`  | **Deprecated.** `sendEvent`를 사용하세요.                          |
| `setProperty(key: String, value: Any?)`             | 타겟팅을 위한 사용자 속성 설정                                            |
| `setUserDataConsent(consent: Boolean)`              | 사용자 데이터 수집 동의 상태를 설정합니다. `false`이면 서버 전송이 차단됩니다 (로컬 저장은 허용). |

<Warning>
  `logEvent()`는 deprecated되었으며 향후 버전에서 제거됩니다. `sendEvent()`를 사용하세요.
</Warning>

### sendEvent

선택적 파라미터와 함께 사용자 이벤트를 전송합니다.

```kotlin theme={null}
// 단순 이벤트 (파라미터 없음)
AdropMetrics.sendEvent("app_open")

// 파라미터가 포함된 이벤트
val params = AdropEventParam.Builder()
    .putString("item_id", "SKU-123")
    .putString("item_name", "Widget")
    .putFloat("price", 29.99f)
    .build()
AdropMetrics.sendEvent("view_item", params)

// 다중 아이템 이벤트 (예: 구매)
val item1 = AdropEventParam.Builder()
    .putString("item_id", "A")
    .putString("item_name", "Product A")
    .putInt("price", 100)
    .putInt("quantity", 1)
    .build()
val item2 = AdropEventParam.Builder()
    .putString("item_id", "B")
    .putString("item_name", "Product B")
    .putInt("price", 200)
    .putInt("quantity", 2)
    .build()
val purchaseParams = AdropEventParam.Builder()
    .putString("tx_id", "tx_123")
    .putString("currency", "KRW")
    .putItems(listOf(item1, item2))
    .build()
AdropMetrics.sendEvent("purchase", purchaseParams)
```

<Note>
  * 이벤트 이름은 1\~64자여야 합니다.
  * 동일한 이름과 파라미터를 가진 중복 이벤트는 500ms 이내 전송이 제한됩니다.
  * `sendEvent()`를 호출하기 전에 SDK가 초기화되어야 합니다.
</Note>
