> ## 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.

# 시작하기

> DARO Flutter SDK를 앱에 통합하는 방법을 안내합니다.

<Note>
  애드유닛은 앱에서 광고를 표시할 지면과 광고 포맷을 설정한 단위입니다. DARO 2.0 SDK에는 업데이트된 대시보드의 **Ad Unit Key**를 복사해 입력하세요. 앱 설정에 쓰는 Integration Key와는 다른 값입니다. API 인자 `adUnitId`, `unitId`, `key`와 예제의 `YOUR_AD_UNIT_ID`는 이름을 그대로 사용하지만, 입력할 값은 해당 애드유닛의 Ad Unit Key입니다. 기존 애드유닛 ID를 사용한 연동도 계속 지원합니다. 리포트·콜백의 식별자를 새 연동용 키와 혼동하지 마세요.
</Note>

## 시작하기 전에

2.0.0 미만의 레거시 SDK를 사용 중이라면 [마이그레이션 가이드](/ko/sdk-integration-v2/flutter/migration-guide)를 먼저 확인하세요.

<Warning>
  모든 광고는 `DaroFlutter.initialize()`가 완료된 뒤 로드하세요. 배너와 네이티브 광고 위젯도 초기화 이후에 표시해야 합니다.
</Warning>

### 요구사항

* Flutter 3.24.0 이상, Dart 3.5.0 이상
* Android minSdkVersion 23, Kotlin 2.2 이상
* iOS 13.0 이상. 사용하는 Flutter 버전의 최소 지원 버전이 더 높다면 그 요구사항을 따르세요.

## 패키지 설치하기

`pubspec.yaml`에 패키지 버전을 지정합니다.

```yaml theme={null}
dependencies:
  daro_flutter: 2.0.0
```

```bash theme={null}
flutter pub get
```

## 네이티브 설정 자동 구성

`daro_flutter 2.0.0`의 `configure`·`doctor` 명령으로 네이티브 설정을 적용하고 확인할 수 있습니다.

패키지를 설치한 뒤 앱 루트의 `pubspec.yaml` 옆에 `daro.yaml`을 작성합니다. 플랫폼별 앱의 Integration Key를 사용하고, 사용하지 않는 플랫폼은 생략하세요.

```yaml theme={null}
ios:
  integration_key: "YOUR_IOS_INTEGRATION_KEY"
android:
  integration_key: "YOUR_ANDROID_INTEGRATION_KEY"
```

각 플랫폼의 `integration_key`만 지정합니다.

앱 루트에서 다음 명령을 실행합니다.

```bash theme={null}
dart run daro_flutter:configure
dart run daro_flutter:doctor
```

* `configure`는 Android·iOS 필수 설정을 적용합니다. SDK 업데이트나 Integration Key 변경 후 다시 실행하세요.
* `doctor`는 설정을 점검합니다. 문제가 발견되면 출력된 안내에 따라 수정하세요.
* 자동 설정은 기본 Flutter 프로젝트를 대상으로 합니다. 프로젝트 구조를 변경해 자동 설정이 지원되지 않으면 아래 수동 절차를 따르세요.
* 기존 수동 DARO 설정과 중복되지 않도록 정리하고, 자동으로 적용된 설정은 다시 추가하지 마세요.
* iOS 추적 권한 설명 등 앱에 필요한 권한 설정은 별도로 완료한 뒤 [SDK 초기화하기](#sdk-초기화하기)로 진행하세요.
* 앱을 빌드하고 실행하여 SDK 초기화와 광고 동작을 확인하세요.

## Android 프로젝트 설정하기

[Android 시작하기](/ko/sdk-integration-v2/android/get-started)에 따라 저장소, DARO Gradle 플러그인과 Integration Key를 설정하세요. `daro_flutter`가 제공하는 네이티브 SDK 의존성을 사용합니다.

* 프로젝트 설정은 `android/` 디렉토리에 적용합니다.
* 앱 모듈에 `so.daro` 플러그인을 적용합니다.
* `android/app/src/main/AndroidManifest.xml`의 `<application>`에 앱의 Integration Key를 추가합니다.

```xml theme={null}
<meta-data
    android:name="DARO_INTEGRATION_KEY"
    android:value="YOUR_INTEGRATION_KEY" />
```

minSdkVersion이 26 미만이면 [Android 시작하기](/ko/sdk-integration-v2/android/get-started)의 desugaring 설정도 적용하세요.

## iOS 프로젝트 설정하기

[iOS 시작하기](/ko/sdk-integration-v2/ios_new/get-started)에 따라 빌드 도구를 설치하고 `ios/Runner/Info.plist`에 Integration Key, `SKAdNetworkItems`, 추적 권한 안내 문구를 설정하세요.

```xml theme={null}
<key>DaroIntegrationKey</key>
<string>YOUR_INTEGRATION_KEY</string>
```

`daro_flutter`가 `DaroAds` 의존성을 제공하므로 동일한 SDK를 Podfile에 중복 추가하지 마세요. 기존 `post_install` 블록에 다음 훅을 추가하고 Flutter의 빌드 설정을 유지합니다.

```ruby theme={null}
post_install do |installer|
  hook = Dir.glob(File.expand_path('Pods/*/**/Scripts/daro_integration_key.rb', __dir__)).first
  raise '[Daro] Integration Key hook not found' unless hook
  require hook
  Daro::IntegrationKey.install!(installer)

  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
  end
end
```

<Warning>
  `post_install` 블록은 하나만 사용하세요. 기존 블록에 훅을 합치고 앱에서 추가한 설정을 유지합니다. Integration Key와 훅 설정을 모두 완료해야 합니다.
</Warning>

`flutter pub get` 실행 후 `ios/` 디렉토리에서 다음 명령을 실행합니다.

```bash theme={null}
pod install
```

## SDK 초기화하기

앱의 동의 수집 흐름을 완료한 뒤 아래 함수에 사용자 선택과 적용 대상 판단을 전달하세요. GDPR은 `DaroGdprStatus`, CCPA는 `DaroCcpaStatus`, COPPA는 `DaroCoppaStatus`를 사용하며, 옵트인을 기본값으로 가정하지 않습니다. COPPA를 포함한 설정이 완료된 다음 초기화하세요. 상태 변경 시 해당 동의 문자열도 함께 전달합니다. `MyApp`은 앱의 루트 위젯입니다. 앱의 진입점에서 `WidgetsFlutterBinding.ensureInitialized()`를 호출한 뒤 동의 수집에 필요한 플러그인을 사용하고, 결과가 준비되면 `startAppWithPrivacy`를 호출하세요.

```dart theme={null}
import 'package:flutter/material.dart';
import 'package:daro_flutter/daro_flutter.dart';

Future<void> startAppWithPrivacy({
  required DaroGdprStatus gdpr,
  required DaroCcpaStatus ccpa,
  required DaroCoppaStatus coppa,
  String? gdprConsentString,
  String? ccpaConsentString,
}) async {
  WidgetsFlutterBinding.ensureInitialized();
  await DaroFlutter.setGdpr(gdpr, consentString: gdprConsentString);
  await DaroFlutter.setCcpa(ccpa, consentString: ccpaConsentString);
  await DaroFlutter.setCoppa(coppa);
  await DaroFlutter.initialize();
  runApp(const MyApp());
}
```

## 광고 노출 확인하기

[app-ads.txt 설정](/ko/app-ads-txt-settings)을 완료하고 실제 기기에서 사용하는 광고 포맷의 로드, 노출, 닫힘 및 콜백을 확인하세요.

* [배너 / MREC 광고](/ko/sdk-integration-v2/flutter/ad-formats/banner)
* [네이티브 광고](/ko/sdk-integration-v2/flutter/ad-formats/native): Android와 iOS 각각에서 팩토리를 등록해야 합니다.
* [인터스티셜 광고](/ko/sdk-integration-v2/flutter/ad-formats/interstitial)
* [리워드 비디오 광고](/ko/sdk-integration-v2/flutter/ad-formats/rewarded)
* [라이트 팝업 광고](/ko/sdk-integration-v2/flutter/ad-formats/lightpopup)
* [앱 오프닝 광고](/ko/sdk-integration-v2/flutter/ad-formats/appopen)
