> ## 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 Flutter SDK의 모든 클래스, 열거형에 대한 상세 레퍼런스입니다.

## Adrop

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

### 정적 프로퍼티

| 프로퍼티             | 타입                    | 설명                  |
| ---------------- | --------------------- | ------------------- |
| `consentManager` | `AdropConsentManager` | GDPR/CCPA 동의 관리 매니저 |

### 정적 메서드

| 메서드                                                                                   | 설명                             |
| ------------------------------------------------------------------------------------- | ------------------------------ |
| `initialize(bool production, {List<String>? targetCountries, bool? useInAppBrowser})` | SDK를 초기화합니다                    |
| `setUID(String uid)`                                                                  | 사용자 식별자를 설정합니다 (SHA-256으로 해시됨) |
| `setTheme(AdropTheme theme)`                                                          | 광고 테마를 설정합니다                   |
| `registerWebView(int webViewIdentifier)`                                              | 백필 광고 지원을 위해 WebView를 등록합니다    |

### 사용 예시

```dart theme={null}
import 'package:adrop_ads_flutter/adrop_ads_flutter.dart';

// 기본 초기화 (테스트 모드)
await Adrop.initialize(false);

// 프로덕션 모드 + 타겟 국가 설정
await Adrop.initialize(
  true,
  targetCountries: ['KR', 'JP', 'US'],
);

// 사용자 ID 설정
await Adrop.setUID('user123');

// 테마 설정
await Adrop.setTheme(AdropTheme.dark);
```

```dart theme={null}
// WebView 등록
import 'dart:io';
import 'package:webview_flutter_android/webview_flutter_android.dart';
import 'package:webview_flutter_wkwebview/webview_flutter_wkwebview.dart';

final int identifier;
if (Platform.isAndroid) {
  identifier = (controller.platform as AndroidWebViewController).webViewIdentifier;
} else if (Platform.isIOS) {
  identifier = (controller.platform as WebKitWebViewController).webViewIdentifier;
}
await Adrop.registerWebView(identifier);
```

***

## AdropTheme

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

### 값

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

### 사용 예시

```dart theme={null}
await Adrop.setTheme(AdropTheme.dark);
```

***

## AdropErrorCode

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

### 값

| 에러 코드                       | 코드 문자열                                    | 설명              |
| --------------------------- | ----------------------------------------- | --------------- |
| `network`                   | `ERROR_CODE_NETWORK`                      | 네트워크 오류         |
| `internal`                  | `ERROR_CODE_INTERNAL`                     | 내부 오류           |
| `initialize`                | `ERROR_CODE_INITIALIZE`                   | SDK 초기화 오류      |
| `invalidUnit`               | `ERROR_CODE_INVALID_UNIT`                 | 잘못된 광고 유닛 ID    |
| `notTargetCountry`          | `ERROR_CODE_NOT_TARGET_COUNTRY`           | 타겟 국가가 아님       |
| `inactive`                  | `ERROR_CODE_AD_INACTIVE`                  | 비활성화된 광고        |
| `adNoFill`                  | `ERROR_CODE_AD_NO_FILL`                   | 노출 가능한 광고 없음    |
| `adLoadDuplicate`           | `ERROR_CODE_AD_LOAD_DUPLICATED`           | 중복된 광고 로드 요청    |
| `adLoading`                 | `ERROR_CODE_AD_LOADING`                   | 광고 로딩 중         |
| `adEmpty`                   | `ERROR_CODE_AD_EMPTY`                     | 광고가 비어있음        |
| `adShown`                   | `ERROR_CODE_AD_SHOWN`                     | 광고가 이미 표시됨      |
| `adHideForToday`            | `ERROR_CODE_AD_HIDE_FOR_TODAY`            | 오늘 하루 보지 않기 설정됨 |
| `accountUsageLimitExceeded` | `ERROR_CODE_ACCOUNT_USAGE_LIMIT_EXCEEDED` | 계정 사용 한도 초과     |
| `adLandscapeUnsupported`    | `ERROR_CODE_LANDSCAPE_UNSUPPORTED`        | 가로 모드 미지원       |
| `backfillNoFill`            | `ERROR_CODE_AD_BACKFILL_NO_FILL`          | 백필 광고도 없음       |
| `undefined`                 | `UNDEFINED`                               | 정의되지 않은 오류      |

### 프로퍼티

| 프로퍼티   | 타입       | 설명        |
| ------ | -------- | --------- |
| `code` | `String` | 에러 코드 문자열 |

### 팩토리 메서드

| 메서드                                     | 설명               |
| --------------------------------------- | ---------------- |
| `AdropErrorCode.getByCode(String code)` | 코드 문자열로 에러 코드 조회 |

***

## AdropAdChoicesPosition

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

### Values

| Value         | Integer | Description |
| ------------- | ------- | ----------- |
| `topLeft`     | 0       | 좌측 상단       |
| `topRight`    | 1       | 우측 상단 (기본값) |
| `bottomLeft`  | 2       | 좌측 하단       |
| `bottomRight` | 3       | 우측 하단       |

### Usage Example

```dart theme={null}
final nativeAd = AdropNativeAd(
  unitId: 'YOUR_UNIT_ID',
  preferredAdChoicesPosition: AdropAdChoicesPosition.bottomRight,
);
```

***

## AdropBannerView

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

### 생성자

```dart theme={null}
AdropBannerView({
  required String unitId,
  AdropBannerListener? listener,
})
```

### 프로퍼티

| 프로퍼티           | 타입              | 설명         |
| -------------- | --------------- | ---------- |
| `creativeSize` | `CreativeSize?` | 크리에이티브 크기  |
| `adSize`       | `Size?`         | 배너 뷰 크기 설정 |

### 메서드

| 메서드         | 반환 타입          | 설명     |
| ----------- | -------------- | ------ |
| `load()`    | `Future<void>` | 광고 로드  |
| `dispose()` | `Future<void>` | 리소스 해제 |

### 사용 예시

```dart theme={null}
late AdropBannerView bannerView;

@override
void initState() {
  super.initState();

  bannerView = AdropBannerView(
    unitId: 'YOUR_UNIT_ID',
    listener: AdropBannerListener(
      onAdReceived: (unitId, metadata) {
        setState(() => isLoaded = true);
      },
      onAdFailedToReceive: (unitId, errorCode) {
        debugPrint('에러: ${errorCode.code}');
      },
    ),
  );

  bannerView.load();
}

@override
void dispose() {
  bannerView.dispose();
  super.dispose();
}
```

***

## AdropBannerListener

배너 광고 이벤트를 처리하는 리스너 클래스입니다.

### 생성자

```dart theme={null}
AdropBannerListener({
  void Function(String unitId, Map<String, dynamic>? metadata)? onAdReceived,
  void Function(String unitId, Map<String, dynamic>? metadata)? onAdClicked,
  void Function(String unitId, Map<String, dynamic>? metadata)? onAdImpression,
  void Function(String unitId, AdropErrorCode errorCode)? onAdFailedToReceive,
  void Function(String unitId)? onAdVideoStart,
  void Function(String unitId)? onAdVideoEnd,
})
```

### 콜백

| 콜백                    | 파라미터                  | 설명           |
| --------------------- | --------------------- | ------------ |
| `onAdReceived`        | `unitId`, `metadata`  | 광고 수신 성공     |
| `onAdClicked`         | `unitId`, `metadata`  | 광고 클릭        |
| `onAdImpression`      | `unitId`, `metadata`  | 광고 노출        |
| `onAdFailedToReceive` | `unitId`, `errorCode` | 광고 수신 실패     |
| `onAdVideoStart`      | `unitId`              | 동영상 광고 재생 시작 |
| `onAdVideoEnd`        | `unitId`              | 동영상 광고 재생 종료 |

### 메타데이터 필드

| 필드               | 타입       | 설명                               |
| ---------------- | -------- | -------------------------------- |
| `creativeId`     | `String` | 크리에이티브 ID                        |
| `txId`           | `String` | 트랜잭션 ID                          |
| `campaignId`     | `String` | 캠페인 ID                           |
| `destinationURL` | `String` | 목적지 URL                          |
| `browserTarget`  | `int?`   | 브라우저 타겟 (0: 외부 브라우저, 1: 인앱 브라우저) |

***

## AdropNativeAd

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

### 생성자

```dart theme={null}
AdropNativeAd({
  required String unitId,
  bool useCustomClick = false,
  AdropAdChoicesPosition preferredAdChoicesPosition = AdropAdChoicesPosition.topRight,
  AdropNativeListener? listener,
})
```

### 프로퍼티

| 프로퍼티                         | 타입                       | 설명                                               |
| ---------------------------- | ------------------------ | ------------------------------------------------ |
| `isLoaded`                   | `bool`                   | 광고 로드 완료 여부                                      |
| `unitId`                     | `String`                 | 광고 유닛 ID                                         |
| `creativeId`                 | `String`                 | 크리에이티브 ID                                        |
| `txId`                       | `String`                 | 트랜잭션 ID                                          |
| `campaignId`                 | `String`                 | 캠페인 ID                                           |
| `destinationURL`             | `String`                 | 목적지 URL                                          |
| `browserTarget`              | `BrowserTarget?`         | 목적지 URL 열림 방식 (외부/인앱 브라우저)                       |
| `properties`                 | `AdropNativeProperties`  | 네이티브 광고 속성                                       |
| `creativeSize`               | `CreativeSize`           | 크리에이티브 크기                                        |
| `isBackfilled`               | `bool`                   | 백필 광고 여부                                         |
| `preferredAdChoicesPosition` | `AdropAdChoicesPosition` | 백필 네이티브 광고의 AdChoices 마크 표시 위치 (기본값: `topRight`) |

### 메서드

| 메서드      | 반환 타입          | 설명    |
| -------- | -------------- | ----- |
| `load()` | `Future<void>` | 광고 로드 |

### 사용 예시

```dart theme={null}
final nativeAd = AdropNativeAd(
  unitId: 'YOUR_UNIT_ID',
  useCustomClick: true,
  listener: AdropNativeListener(
    onAdReceived: (ad) {
      debugPrint('광고 수신: ${ad.creativeId}');
    },
    onAdFailedToReceive: (ad, errorCode) {
      debugPrint('에러: ${errorCode.code}');
    },
  ),
);

await nativeAd.load();
```

***

## AdropNativeAdView

네이티브 광고를 화면에 표시하는 위젯입니다.

### 생성자

```dart theme={null}
AdropNativeAdView({
  required AdropNativeAd? ad,
  required Widget child,
})
```

### 사용 예시

```dart theme={null}
AdropNativeAdView(
  ad: nativeAd,
  child: Container(
    child: Column(
      children: [
        Text(nativeAd?.properties.headline ?? ''),
        Text(nativeAd?.properties.body ?? ''),
      ],
    ),
  ),
)
```

***

## AdropNativeListener

네이티브 광고 이벤트를 처리하는 리스너 클래스입니다.

### 생성자

```dart theme={null}
AdropNativeListener({
  void Function(AdropNativeAd ad)? onAdReceived,
  void Function(AdropNativeAd ad)? onAdClicked,
  void Function(AdropNativeAd ad)? onAdImpression,
  void Function(AdropNativeAd ad, AdropErrorCode errorCode)? onAdFailedToReceive,
  void Function(AdropNativeAd ad)? onAdVideoStart,
  void Function(AdropNativeAd ad)? onAdVideoEnd,
})
```

### 콜백

| 콜백                    | 파라미터              | 설명           |
| --------------------- | ----------------- | ------------ |
| `onAdReceived`        | `ad`              | 광고 수신 성공     |
| `onAdClicked`         | `ad`              | 광고 클릭        |
| `onAdImpression`      | `ad`              | 광고 노출        |
| `onAdFailedToReceive` | `ad`, `errorCode` | 광고 수신 실패     |
| `onAdVideoStart`      | `ad`              | 동영상 광고 재생 시작 |
| `onAdVideoEnd`        | `ad`              | 동영상 광고 재생 종료 |

***

## AdropNativeProperties

네이티브 광고의 콘텐츠 속성입니다.

### 프로퍼티

| 프로퍼티             | 타입                    | 설명              |
| ---------------- | --------------------- | --------------- |
| `headline`       | `String?`             | 광고 제목           |
| `body`           | `String?`             | 광고 본문           |
| `creative`       | `String?`             | HTML 크리에이티브 콘텐츠 |
| `asset`          | `String?`             | 이미지 에셋 URL      |
| `destinationURL` | `String?`             | 클릭 시 이동할 URL    |
| `callToAction`   | `String?`             | CTA 버튼 텍스트      |
| `profile`        | `AdropNativeProfile?` | 광고주 프로필 정보      |
| `extra`          | `Map<String, String>` | 추가 커스텀 필드       |
| `isBackfilled`   | `bool`                | 백필 광고 여부        |

***

## AdropNativeProfile

네이티브 광고의 프로필 정보입니다.

### 프로퍼티

| 프로퍼티          | 타입        | 설명             |
| ------------- | --------- | -------------- |
| `displayName` | `String?` | 광고주 이름         |
| `displayLogo` | `String?` | 광고주 로고 이미지 URL |

***

## AdropInterstitialAd

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

### 생성자

```dart theme={null}
AdropInterstitialAd({
  required String unitId,
  AdropInterstitialListener? listener,
})
```

### 프로퍼티

| 프로퍼티             | 타입               | 설명                         |
| ---------------- | ---------------- | -------------------------- |
| `isLoaded`       | `bool`           | 광고 로드 완료 여부                |
| `unitId`         | `String`         | 광고 유닛 ID                   |
| `creativeId`     | `String`         | 크리에이티브 ID                  |
| `txId`           | `String`         | 트랜잭션 ID                    |
| `campaignId`     | `String`         | 캠페인 ID                     |
| `destinationURL` | `String`         | 목적지 URL                    |
| `browserTarget`  | `BrowserTarget?` | 목적지 URL 열림 방식 (외부/인앱 브라우저) |

### 메서드

| 메서드         | 반환 타입          | 설명                            |
| ----------- | -------------- | ----------------------------- |
| `load()`    | `Future<void>` | 광고 로드                         |
| `show()`    | `Future<void>` | 광고 표시                         |
| `close()`   | `Future<void>` | 프로그래밍 방식으로 광고 닫기 (Android 전용) |
| `dispose()` | `Future<void>` | 리소스 해제                        |

### 사용 예시

```dart theme={null}
final interstitialAd = AdropInterstitialAd(
  unitId: 'YOUR_UNIT_ID',
  listener: AdropInterstitialListener(
    onAdReceived: (ad) {
      ad.show();
    },
    onAdFailedToReceive: (ad, errorCode) {
      debugPrint('에러: ${errorCode.code}');
    },
    onAdDidDismissFullScreen: (ad) {
      debugPrint('광고 닫힘');
    },
  ),
);

await interstitialAd.load();
```

***

## AdropInterstitialListener

전면 광고 이벤트를 처리하는 리스너 클래스입니다.

### 생성자

```dart theme={null}
AdropInterstitialListener({
  void Function(AdropAd ad)? onAdReceived,
  void Function(AdropAd ad)? onAdClicked,
  void Function(AdropAd ad)? onAdImpression,
  void Function(AdropAd ad)? onAdWillPresentFullScreen,
  void Function(AdropAd ad)? onAdDidPresentFullScreen,
  void Function(AdropAd ad)? onAdWillDismissFullScreen,
  void Function(AdropAd ad)? onAdDidDismissFullScreen,
  void Function(AdropAd ad, AdropErrorCode errorCode)? onAdFailedToReceive,
  void Function(AdropAd ad, AdropErrorCode errorCode)? onAdFailedToShowFullScreen,
  void Function(AdropAd ad)? onAdBackButtonPressed,
})
```

### 콜백

| 콜백                           | 설명                          |
| ---------------------------- | --------------------------- |
| `onAdReceived`               | 광고 수신 성공                    |
| `onAdClicked`                | 광고 클릭                       |
| `onAdImpression`             | 광고 노출                       |
| `onAdWillPresentFullScreen`  | 광고 표시 시작 (iOS 전용)           |
| `onAdDidPresentFullScreen`   | 광고 표시 완료                    |
| `onAdWillDismissFullScreen`  | 광고 닫기 시작 (iOS 전용)           |
| `onAdDidDismissFullScreen`   | 광고 닫기 완료                    |
| `onAdFailedToReceive`        | 광고 수신 실패                    |
| `onAdFailedToShowFullScreen` | 광고 표시 실패                    |
| `onAdBackButtonPressed`      | 광고 표시 중 백버튼 누름 (Android 전용) |

***

## AdropRewardedAd

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

### 생성자

```dart theme={null}
AdropRewardedAd({
  required String unitId,
  AdropRewardedListener? listener,
})
```

### 프로퍼티

| 프로퍼티                            | 타입                               | 설명                              |
| ------------------------------- | -------------------------------- | ------------------------------- |
| `isLoaded`                      | `bool`                           | 광고 로드 완료 여부                     |
| `unitId`                        | `String`                         | 광고 유닛 ID                        |
| `creativeId`                    | `String`                         | 크리에이티브 ID                       |
| `txId`                          | `String`                         | 트랜잭션 ID                         |
| `campaignId`                    | `String`                         | 캠페인 ID                          |
| `destinationURL`                | `String`                         | 목적지 URL                         |
| `browserTarget`                 | `BrowserTarget?`                 | 목적지 URL 열림 방식 (외부/인앱 브라우저)      |
| `serverSideVerificationOptions` | `ServerSideVerificationOptions?` | 서버 측 검증 옵션 (userId, customData) |

### 메서드

| 메서드         | 반환 타입          | 설명     |
| ----------- | -------------- | ------ |
| `load()`    | `Future<void>` | 광고 로드  |
| `show()`    | `Future<void>` | 광고 표시  |
| `dispose()` | `Future<void>` | 리소스 해제 |

### 사용 예시

```dart theme={null}
final rewardedAd = AdropRewardedAd(
  unitId: 'YOUR_UNIT_ID',
  listener: AdropRewardedListener(
    onAdReceived: (ad) {
      ad.show();
    },
    onAdEarnRewardHandler: (ad, type, amount) {
      // 보상 지급
      debugPrint('보상: 타입=$type, 수량=$amount');
    },
  ),
);

await rewardedAd.load();
```

***

## ServerSideVerificationOptions

보상형 광고의 서버 측 검증(SSV) 옵션입니다. `load()` 호출 전에 설정하여 서버 콜백에 커스텀 데이터를 전달합니다.

### 생성자

```dart theme={null}
const ServerSideVerificationOptions({
  String? userId,
  String? customData,
})
```

### 프로퍼티

| 프로퍼티         | 타입        | 설명                     |
| ------------ | --------- | ---------------------- |
| `userId`     | `String?` | 서버 측 검증을 위한 사용자 식별자    |
| `customData` | `String?` | 서버 콜백에 전달할 커스텀 데이터 문자열 |

### 사용 예시

```dart theme={null}
final rewardedAd = AdropRewardedAd(
  unitId: 'YOUR_UNIT_ID',
  listener: AdropRewardedListener(
    onAdEarnRewardHandler: (ad, type, amount) {
      debugPrint('보상: 타입=$type, 수량=$amount');
    },
  ),
);

// 로드 전에 SSV 옵션 설정
rewardedAd.serverSideVerificationOptions = ServerSideVerificationOptions(
  userId: 'user_123',
  customData: 'extra_data',
);

await rewardedAd.load();
```

***

## AdropRewardedListener

보상형 광고 이벤트를 처리하는 리스너 클래스입니다.

### 생성자

```dart theme={null}
AdropRewardedListener({
  void Function(AdropAd ad)? onAdReceived,
  void Function(AdropAd ad)? onAdClicked,
  void Function(AdropAd ad)? onAdImpression,
  void Function(AdropAd ad)? onAdWillPresentFullScreen,
  void Function(AdropAd ad)? onAdDidPresentFullScreen,
  void Function(AdropAd ad)? onAdWillDismissFullScreen,
  void Function(AdropAd ad)? onAdDidDismissFullScreen,
  void Function(AdropAd ad, AdropErrorCode errorCode)? onAdFailedToReceive,
  void Function(AdropAd ad, AdropErrorCode errorCode)? onAdFailedToShowFullScreen,
  void Function(AdropAd ad, int type, int amount)? onAdEarnRewardHandler,
})
```

### 콜백

| 콜백                           | 설명                |
| ---------------------------- | ----------------- |
| `onAdReceived`               | 광고 수신 성공          |
| `onAdClicked`                | 광고 클릭             |
| `onAdImpression`             | 광고 노출             |
| `onAdWillPresentFullScreen`  | 광고 표시 시작 (iOS 전용) |
| `onAdDidPresentFullScreen`   | 광고 표시 완료          |
| `onAdWillDismissFullScreen`  | 광고 닫기 시작 (iOS 전용) |
| `onAdDidDismissFullScreen`   | 광고 닫기 완료          |
| `onAdFailedToReceive`        | 광고 수신 실패          |
| `onAdFailedToShowFullScreen` | 광고 표시 실패          |
| `onAdEarnRewardHandler`      | 보상 획득             |

***

## AdropPopupAd

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

### 생성자

```dart theme={null}
AdropPopupAd({
  required String unitId,
  AdropPopupListener? listener,
  Color? closeTextColor,
  Color? hideForTodayTextColor,
  Color? backgroundColor,
})
```

### 프로퍼티

| 프로퍼티                    | 타입               | 설명                         |
| ----------------------- | ---------------- | -------------------------- |
| `isLoaded`              | `bool`           | 광고 로드 완료 여부                |
| `unitId`                | `String`         | 광고 유닛 ID                   |
| `creativeId`            | `String`         | 크리에이티브 ID                  |
| `txId`                  | `String`         | 트랜잭션 ID                    |
| `campaignId`            | `String`         | 캠페인 ID                     |
| `destinationURL`        | `String`         | 목적지 URL                    |
| `browserTarget`         | `BrowserTarget?` | 목적지 URL 열림 방식 (외부/인앱 브라우저) |
| `closeTextColor`        | `Color?`         | 닫기 버튼 텍스트 색상               |
| `hideForTodayTextColor` | `Color?`         | "오늘 하루 보지 않기" 텍스트 색상       |
| `backgroundColor`       | `Color?`         | 버튼 배경 색상                   |

### 메서드

| 메서드         | 반환 타입          | 설명     |
| ----------- | -------------- | ------ |
| `load()`    | `Future<void>` | 광고 로드  |
| `show()`    | `Future<void>` | 광고 표시  |
| `close()`   | `Future<void>` | 광고 닫기  |
| `dispose()` | `Future<void>` | 리소스 해제 |

### 사용 예시

```dart theme={null}
final popupAd = AdropPopupAd(
  unitId: 'YOUR_UNIT_ID',
  closeTextColor: Colors.white,
  backgroundColor: Colors.black87,
  listener: AdropPopupListener(
    onAdReceived: (ad) {
      ad.show();
    },
  ),
);

await popupAd.load();
```

***

## AdropPopupListener

팝업 광고 이벤트를 처리하는 리스너 클래스입니다.

### 생성자

```dart theme={null}
AdropPopupListener({
  void Function(AdropAd ad)? onAdReceived,
  void Function(AdropAd ad)? onAdClicked,
  void Function(AdropAd ad)? onAdImpression,
  void Function(AdropAd ad)? onAdWillPresentFullScreen,
  void Function(AdropAd ad)? onAdDidPresentFullScreen,
  void Function(AdropAd ad)? onAdWillDismissFullScreen,
  void Function(AdropAd ad)? onAdDidDismissFullScreen,
  void Function(AdropAd ad, AdropErrorCode errorCode)? onAdFailedToReceive,
  void Function(AdropAd ad, AdropErrorCode errorCode)? onAdFailedToShowFullScreen,
  void Function(AdropAd ad)? onAdVideoStart,
  void Function(AdropAd ad)? onAdVideoEnd,
})
```

***

## AdropMetrics

사용자 속성 및 이벤트를 관리하는 클래스입니다.

### 정적 메서드

| 메서드                                                      | 반환 타입                          | 설명                              |
| -------------------------------------------------------- | ------------------------------ | ------------------------------- |
| `setProperty(String key, dynamic value)`                 | `Future<void>`                 | 사용자 속성 설정                       |
| `sendEvent(String name, [Map<String, dynamic>? params])` | `Future<void>`                 | 이벤트 전송                          |
| `logEvent(String name, [dynamic params])`                | `Future<void>`                 | 이벤트 로깅 (비추천, `sendEvent` 사용 권장) |
| `properties()`                                           | `Future<Map<String, dynamic>>` | 모든 속성 조회                        |

### 사용 예시

```dart theme={null}
import 'package:adrop_ads_flutter/adrop_ads_flutter.dart';

// 속성 설정
await AdropMetrics.setProperty('membership_level', 'premium');
await AdropMetrics.setProperty('age', 25);
await AdropMetrics.setProperty('is_subscriber', true);

// 속성 제거
await AdropMetrics.setProperty('membership_level', null);

// 이벤트 전송
await AdropMetrics.sendEvent('purchase', {
  'item_id': 'SKU_001',
  'price': 29900,
});

// 모든 속성 조회
final props = await AdropMetrics.properties();
debugPrint('속성: $props');
```

***

## AdropConsentManager

사용자 동의를 관리하는 클래스입니다 (GDPR, CCPA 등). `Adrop.consentManager`를 통해 접근합니다.

### 메서드

| 메서드                                                      | 반환 타입                        | 설명                            |
| -------------------------------------------------------- | ---------------------------- | ----------------------------- |
| `requestConsentInfoUpdate(listener)`                     | `Future<void>`               | 동의 정보 업데이트 요청 및 필요 시 동의 양식 표시 |
| `getConsentStatus()`                                     | `Future<AdropConsentStatus>` | 현재 동의 상태 조회                   |
| `canRequestAds()`                                        | `Future<bool>`               | 광고 요청 가능 여부 확인                |
| `setDebugSettings(AdropConsentDebugGeography geography)` | `Future<void>`               | 테스트용 디버그 지역 설정                |
| `reset()`                                                | `Future<void>`               | 동의 정보 초기화                     |

### 사용 예시

```dart theme={null}
// 동의 요청
Adrop.consentManager.requestConsentInfoUpdate((result) {
  debugPrint('상태: ${result.status}');
  debugPrint('광고 요청 가능: ${result.canRequestAds}');
});

// 상태를 개별적으로 확인
final status = await Adrop.consentManager.getConsentStatus();
final canRequest = await Adrop.consentManager.canRequestAds();
```

***

## AdropConsentResult

동의 정보 업데이트 콜백이 반환하는 결과 객체입니다.

### 프로퍼티

| 프로퍼티                     | 타입                   | 설명                    |
| ------------------------ | -------------------- | --------------------- |
| `status`                 | `AdropConsentStatus` | 현재 동의 상태              |
| `canRequestAds`          | `bool`               | 광고 요청 가능 여부           |
| `canShowPersonalizedAds` | `bool`               | 개인화 광고 표시 가능 여부       |
| `error`                  | `String?`            | 오류 메시지 (오류가 없으면 null) |

***

## AdropConsentStatus

사용자의 동의 상태를 나타내는 열거형입니다.

### 값

| 값             | 설명                |
| ------------- | ----------------- |
| `unknown`     | 동의 상태가 아직 결정되지 않음 |
| `required`    | 동의 필요 (팝업이 표시됨)   |
| `notRequired` | 동의 불필요 (비GDPR 지역) |
| `obtained`    | 이미 동의 완료됨         |

***

## AdropConsentDebugGeography

다양한 지역에서의 동의 흐름을 테스트하기 위한 열거형입니다.

### 값

| 값                  | 설명                  |
| ------------------ | ------------------- |
| `disabled`         | 실제 기기 위치 사용         |
| `eea`              | GDPR 테스트 (유럽 경제 지역) |
| `regulatedUSState` | CCPA 테스트 (캘리포니아 등)  |
| `other`            | 규제가 없는 지역 테스트       |

***

## BrowserTarget

광고 클릭 시 목적지 URL이 열리는 방식을 제어하는 열거형입니다.

### 값

| 값          | 설명               |
| ---------- | ---------------- |
| `external` | 시스템 기본 브라우저에서 열기 |
| `internal` | 인앱 브라우저에서 열기     |

### 사용 예시

```dart theme={null}
final ad = interstitialAd;
if (ad.browserTarget == BrowserTarget.internal) {
  debugPrint('인앱 브라우저에서 광고가 열립니다');
}
```

***

## CreativeSize

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

### 생성자

```dart theme={null}
const CreativeSize({
  required double width,
  required double height,
})
```

### 프로퍼티

| 프로퍼티     | 타입       | 설명 |
| -------- | -------- | -- |
| `width`  | `double` | 너비 |
| `height` | `double` | 높이 |

***

## AdropProperties

`AdropMetrics.setProperty`에서 사용하는 미리 정의된 사용자 속성 키 열거형입니다.

### 값

| 값        | 코드      | 설명                                   |
| -------- | ------- | ------------------------------------ |
| `age`    | `AGE`   | 사용자 나이                               |
| `birth`  | `BIRTH` | 사용자 생년월일 (yyyy, yyyyMM, yyyyMMdd 형식) |
| `gender` | `GDR`   | 사용자 성별 (`AdropGender` 값 사용)          |

### 사용 예시

```dart theme={null}
await AdropMetrics.setProperty(AdropProperties.age.code, 25);
await AdropMetrics.setProperty(AdropProperties.birth.code, '19900101');
await AdropMetrics.setProperty(AdropProperties.gender.code, AdropGender.male.code);
```

***

## AdropGender

`AdropProperties.gender`와 함께 사용하는 성별 값 열거형입니다.

### 값

| 값         | 코드  | 설명     |
| --------- | --- | ------ |
| `male`    | `M` | 남성     |
| `female`  | `F` | 여성     |
| `other`   | `O` | 기타     |
| `unknown` | `U` | 알 수 없음 |

***

## 비추천 클래스

다음 클래스는 deprecated 상태이며 향후 버전에서 제거될 예정입니다.

| Deprecated 클래스           | 마이그레이션               | 비고                                                     |
| ------------------------ | -------------------- | ------------------------------------------------------ |
| `AdropBanner`            | `AdropBannerView` 사용 | 배너 광고 위젯. `AdropBannerView`와 `AdropBannerListener`로 대체 |
| `AdropNavigatorObserver` | 제거 가능                | 더 이상 기능을 제공하지 않으며 향후 버전에서 제거 예정                        |

마이그레이션에 대한 자세한 내용은 [시작하기](/ko/sdk/flutter/overview#deprecated-class-migration)를 참조하세요.

***

## 테스트 유닛 ID

개발 및 테스트 시 사용할 수 있는 유닛 ID입니다.

| 포맷           | 테스트 유닛 ID                          |
| ------------ | ---------------------------------- |
| 배너 (320x50)  | `PUBLIC_TEST_UNIT_ID_320_50`       |
| 배너 (320x100) | `PUBLIC_TEST_UNIT_ID_320_100`      |
| 네이티브         | `PUBLIC_TEST_UNIT_ID_NATIVE`       |
| 전면 광고        | `PUBLIC_TEST_UNIT_ID_INTERSTITIAL` |
| 보상형 광고       | `PUBLIC_TEST_UNIT_ID_REWARDED`     |
| 팝업 광고 (하단)   | `PUBLIC_TEST_UNIT_ID_POPUP_BOTTOM` |
| 팝업 광고 (중앙)   | `PUBLIC_TEST_UNIT_ID_POPUP_CENTER` |
| 스플래시 광고      | `PUBLIC_TEST_UNIT_ID_SPLASH`       |

<Warning>
  프로덕션 배포 전에 반드시 실제 유닛 ID로 교체하세요.
</Warning>

***

## 관련 문서

<CardGroup cols={2}>
  <Card title="시작하기" icon="rocket" href="/ko/sdk/flutter/overview">
    SDK 설치 및 설정 가이드
  </Card>

  <Card title="예제" icon="code" href="/ko/sdk/flutter/examples">
    예제 코드 및 샘플 프로젝트
  </Card>
</CardGroup>
