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

# 시작하기

> Unity 프로젝트에 DARO Unity SDK를 설치하고 초기화하는 방법을 안내합니다.

## 시작하기 전에

Unity 프로젝트에 DARO Unity SDK를 설치하기 전에 다음 항목을 준비하세요.

* DARO 대시보드에서 발급한 iOS 또는 Android 앱 키
* 플랫폼별 DARO key file
* 사용할 광고 포맷별 광고 단위 ID
* Android 또는 iOS 빌드 환경

## SDK 설치하기

권장 설치 방법은 `DaroPackageInstaller.unitypackage`를 사용하는 것입니다.

<Steps>
  <Step title="Installer 패키지 가져오기">
    GitHub Release에서 [`DaroPackageInstaller.unitypackage`](https://github.com/delightroom/DaroUnitySDK/releases/download/sdk%2F0.4.0/DaroPackageInstaller.unitypackage) 파일을 다운로드합니다.
  </Step>

  <Step title="Unity 프로젝트에 import하기">
    Unity Editor에서 **Assets > Import Package > Custom Package**를 선택한 뒤 `DaroPackageInstaller.unitypackage`를 import합니다.
  </Step>

  <Step title="패키지 설치 확인하기">
    Installer가 `Packages/manifest.json`에 OpenUPM scoped registry, EDM4U, `so.daro.unity` 의존성을 추가합니다.

    `so.daro.unity` 최신 패키지 버전은 `0.4.0`이며, EDM4U `com.google.external-dependency-manager@1.2.187`을 사용합니다.
  </Step>

  <Step title="Integration Manager 실행하기">
    Unity Editor에서 **Assets > Daro > Integration Manager**를 열고 프로젝트 설정을 검증합니다.
  </Step>
</Steps>

<Tip>
  Installer는 Unity 프로젝트의 `Packages/manifest.json`에 OpenUPM registry를 추가하고 `so.daro.unity@0.4.0` 설치를 시작합니다.
</Tip>

## 프로젝트 설정하기

Unity Editor에서 **Daro > Integration Manager**를 열고 플랫폼별 설정을 입력합니다.

<Steps>
  <Step title="Settings Asset 생성">
    Integration Manager에서 **Create Settings Asset**을 선택합니다.
  </Step>

  <Step title="iOS 설정 입력">
    iOS 빌드를 사용하는 경우 `iOS Daro App Key`, `iOS Key File`, `AdMob App ID`, ATT 문구를 입력합니다.
  </Step>

  <Step title="Android 설정 입력">
    Android 빌드를 사용하는 경우 `Android Daro App Key`, `Android Key File`을 입력합니다.
  </Step>

  <Step title="Android 빌드 템플릿 활성화">
    Android 빌드를 사용하는 경우 Unity Editor에서 **Edit > Project Settings > Player > Android > Publishing Settings > Build**로 이동한 뒤 다음 항목을 활성화합니다.

    * **Custom Main Gradle Template**
    * **Custom Gradle Properties Template**
    * **Custom Gradle Settings Template**

    활성화하면 다음 파일이 생성됩니다.

    * `Assets/Plugins/Android/mainTemplate.gradle`
    * `Assets/Plugins/Android/gradleTemplate.properties`
    * `Assets/Plugins/Android/settingsTemplate.gradle`

    Android 빌드 시 DARO Unity SDK가 필요한 Gradle 플러그인, 최소 SDK 설정, ProGuard 규칙을 내보낸 프로젝트에 적용합니다.
  </Step>

  <Step title="설정 검증">
    Integration Manager에서 현재 빌드 타겟의 설정 검증 결과를 확인합니다.
  </Step>
</Steps>

<Warning>
  Unity `6000.3.17f1` 이상에서 Android 빌드를 하는 경우 `Assets/Plugins/Android/gradleTemplate.properties`에 다음 설정을 추가하세요.

  ```properties theme={null}
  android.uniquePackageNames=false
  ```

  Unity `6000.3.17f1`부터 AGP 9.0이 적용되어 Android 라이브러리 namespace 중복 검사가 기본으로 활성화됩니다. Pangle 7.7의 `pag-sdk`와 `pag-sdk-ad` AAR은 동일한 `com.bytedance` namespace를 사용하므로 `processDebugMainManifest` 단계에서 매니페스트 병합이 실패할 수 있습니다. 이 문제는 EDM4U 의존성 해석 오류와 별개입니다.
</Warning>

<Tip>
  앱 키와 key file은 `InitializeAsync()`의 인자로 전달하지 않습니다. Unity 빌드 시점에 iOS `Info.plist`와 Android `AndroidManifest.xml` 또는 `gradle.properties`로 주입됩니다.
</Tip>

## SDK 초기화하기

앱 시작 시점에 `DaroSdk.InitializeAsync()`를 호출합니다.

```csharp theme={null}
using Daro;
using UnityEngine;

public sealed class GameBootstrap : MonoBehaviour
{
    private async void Start()
    {
        DaroSdk.HasGdprConsent = true;
        DaroSdk.SetUserId("user-12345");

        await DaroSdk.InitializeAsync();
        Debug.Log("Daro SDK ready");
    }
}
```

<Tip>
  개인정보 보호 설정과 사용자 ID는 SDK 초기화 전에도 설정할 수 있습니다.
</Tip>

## 광고 인스턴스 사용 흐름

전체 화면 광고 인스턴스는 다음 순서로 사용합니다.

1. `await DaroSdk.InitializeAsync()`를 완료합니다.
2. 광고 인스턴스를 생성합니다.
3. 이벤트 핸들러를 등록합니다.
4. `Load()`를 호출합니다.
5. 로드 완료 후 `IsReady()`를 확인하고 `Show()`를 호출합니다.
6. 화면이 사라질 때 `Dispose()`를 호출합니다.

배너 광고는 `Load()`가 성공하면 자동으로 표시됩니다. `Show()`는 `Hide()` 후 배너를 다시 표시할 때만 사용하세요.

<Tip>
  SDK 콜백은 Unity 메인 스레드에서 전달됩니다. 생성자와 `Load()`, `Show()`, `Hide()`, `Dispose()` 같은 공개 SDK 메서드도 Unity 메인 스레드에서 호출하세요.
</Tip>

<Warning>
  광고 인스턴스가 더 이상 필요하지 않을 때 `Dispose()`를 명시적으로 호출하세요. SDK 0.4.0은 finalizer 기반 정리를 보조 수단으로 제공하지만, 정리 시점은 보장되지 않습니다.
</Warning>

```csharp theme={null}
using Daro;
using UnityEngine;

public sealed class InterstitialAdHost : MonoBehaviour
{
    private const string AdUnitId = "your-ad-unit-id";
    private DaroInterstitialAd ad;

    private void OnEnable()
    {
        ad = new DaroInterstitialAd(AdUnitId);
        ad.OnAdLoaded += info => Debug.Log($"Loaded: {info.AdUnitId}");
        ad.OnAdFailedToLoad += error => Debug.LogWarning(error.Message);
        ad.Load();
    }

    public void Show()
    {
        if (ad != null && ad.IsReady())
        {
            ad.Show();
        }
    }

    private void OnDisable()
    {
        ad?.Dispose();
        ad = null;
    }
}
```
