# Initialize

## 0. GDPR (General Data Protection Regulation) <a href="#id-0-gdpr" id="id-0-gdpr"></a>

GDPR은 유럽연합(이하 'EU')의 개인정보 보호 법령으로 서비스 제공자는 EU 사용자의 개인정보 또는 그에 준하는 정보에 대한 수집 및 활용에 대해 사용자에게 동의 여부를 확인받아야 합니다. GDPR 규정 준수 및 규정에 따른 광고네트워크 동작에 필요한 절차입니다.

## 1. Initialize & GDPR Content UI

초기화 시 EU 사용자의 GDPR 동의 여부를 받아 처리할 수 있는 관련 기능을 제공합니다. Main Activity의 `onCreate`에서 광고 관련 코드를 요청하기 전에 초기화 함수를 호출합니다.

{% hint style="danger" %}
ADX SDK에는 사용자로부터 **GDPR** 동의를 받을 수 있는 기능이 포함되어 있습니다.

***

**2024년 1월 16일**부터 IAB 유럽의 인증과 플랫폼 사업자의 <mark style="color:red;">**인증을 받은 동의 플랫폼(CMP)를 통해 GDPR 동의 관리를 처리해야 됨에 따라**</mark>, **ADX SDK 내부에서 자체적으로 제공되던 GDPR 동의 화면은 더 이상 지원되지 않으니, 애드몹 UMP (User Messaging Platform)를 통하여 GDPR 동의를 처리해야합니다.**

***

유럽 경제 지역 (European Economic Area)에서 Android 애플리케이션을 서비스하고 있거나, 또는 서비스할 계획이 있다면 **, 이 문서의** [<mark style="color:blue;">**UMP (User Messaging Platfom)**</mark>](https://platform-business.gitbook.io/adx/android/sdk-integration/pages/mYdtHuvsO8fLJBRT2xJw#1.-gdpr) **이동하여 기술된 내용에 따라 설정하여 주십시오.**
{% endhint %}

* `"<ADX_APP_ID>"`에 ADX에서 발급받은 <mark style="color:red;">**ADX App ID**</mark>를 사용합니다.
* **SDK 초기화는 앱 실행 시 한 번만 호출**하여 주시고, **광고 요청은 초기화가 완료된 후**에 이뤄져야 합니다.
  * `onCompleted`가 호출 된 후, 광고를 요청해야 합니다.
* GdprType은 아래 항목 중 하나를 선택하여 입력합니다.

| **GDPR 타입**           | **설명**                       |
| --------------------- | ---------------------------- |
| POPUP\_LOCATION       | 지역에 따라 동의 팝업 호출 (EU 지역)      |
| POPUP\_DEBUG          | 지역 상관없이 동의 팝업 호출 테스트 (DEBUG) |
| DIRECT\_NOT\_REQUIRED | 동의 여부가 필요없는 지역 (EU 외 지역)     |
| DIRECT\_DENIED        | 사용자가 개인정보 활용 및 수집 거부         |
| DIRECT\_CONFIRM       | 사용자가 개인정보 활용 및 수집 동의         |

### Case 1. EEA 사용자의 GDPR 동의 화면 제공 <a href="#case1" id="case1"></a>

유럽 경제 지역 (European Economic Area) 사용자에게 동의 여부를 선택할 수 있도록 동의 화면을 제공합니다.

{% hint style="danger" %}
유럽 경제 지역 (European Economic Area) 사용자에게 동의 여부를 선택할 수 있는 기능이 애드몹 UMP (User Messaging Platform)에 의해서 처리됩니다.
{% endhint %}

* `ADXConfiguration`에서 GdprType을 `POPUP_LOCATION`로 설정하시면, 사용자의 접속 국가에 따라 EU 사용자는 GDPR 동의 Consent UI를 통해 동의 여부를 결정할 수 있습니다.
* GdprType을 `POPUP_DEBUG`로 설정 시 접속 국가와 상관없이 Consent UI를 확인하실 수 있습니다.

{% hint style="warning" %}
**(주의사항)** `POPUP_LOCATION` 또는`POPUP_DEBUG` 의 경우 `initiailize` 의 `Context` 값으로 `Activity` 를 넣어주셔야 합니다. 그렇지 않은 경우 정상적으로 초기화되지 않습니다.
{% endhint %}

{% tabs %}
{% tab title="Java" %}

```java
// ADX 초기화 관련 설정
ADXConfiguration adxConfiguration = new ADXConfiguration.Builder()
                        .setAppId("<ADX_APP_ID>")
                        .setGdprType(ADXConfiguration.GdprType.POPUP_LOCATION)
                        .setTestDeviceIds(Arrays.asList("")) // UMP Test Device
                        .build();

ADXSdk.getInstance().initialize((Activity) this, adxConfiguration, new ADXSdk.OnInitializedListener() {
        @Override
        public void onCompleted(boolean result, ADXGDPR.ADXConsentState adxConsentState) {
                // 광고 초기화 완료
        }
});
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
// ADX 초기화 관련 설정
val adxConfiguration = ADXConfiguration.Builder()
    .setAppId("<ADX_APP_ID>")
    .setGdprType(ADXConfiguration.GdprType.POPUP_LOCATION)
    .setTestDeviceIds(mutableListOf("")) // UMP Test Device
    .build()

ADXSdk.getInstance().initialize(this as Activity, adxConfiguration) { result, adxConsentState ->
    // 광고 초기화 완료
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
애드몹 UMP의 GDPR 동의 화면을 테스트 목적으로 확인하려면, **아래 두 가지 설정이 필요합니다.**<br>

1\) 애드몹 대쉬보드 (<https://apps.admob.com)로> 이동한 다음에 아래 GDPR 메시지 작성 가이드 내용을 따라서 메시지 작성과 게시를 완료하십시오.\
[<mark style="color:blue;">https://support.google.com/admob/answer/10113207?hl=ko</mark>](https://support.google.com/admob/answer/10113207?hl=ko)

***

2\) 로그 출력에서 아래의 기기 ID를 확인합니다. 이 식별자 문자열을 **ADXConfiguration** 객체 생성 시 사용하는 **setTestDeviceIds** 파라미터에 입력하고, **setGdprType** 파라미터에는 **POPUP\_DEBUG**를 입력하여 주십시오.\
\
Use new ConsentDebugSettings.Builder().addTestDeviceHashedId("**33BE2250B43518CCDA7DE426D04EE231**") to set this as a debug device.
{% endhint %}

<figure><img src="/files/7aZmLVjOUx3PnNz4coHT" alt="" width="253"><figcaption><p>&#x3C;UMP GDPR 동의 화면></p></figcaption></figure>

### Case 2. 직접 동의 여부 설정 <a href="#case2" id="case2"></a>

유럽 경제 지역 (European Economic Area) 사용자가 없거나 앱 내에 회원가입이나 GDPR에서 정하는 개인정보에 준하는 정보를 수집하고 있으시다면 **한국에서 푸시알림 동의, 개인정보처리방침에 대해 동의절차를 진행하는 것과 같이 따로 직접 동의절차를 진행 및 처리**해주셔야 합니다.

* EU 외 지역으로 동의 여부가 필요 없는 경우, `ADXConfiguration`에서 GdprType을 `DIRECT_NOT_REQUIRED`로 설정해주세요.
* EU 지역으로 직접 동의 절차를 진행하시는 경우, 동의절차 결과에 따라 GdprType을 설정해주세요 .
  * 사용자가 개인정보 활용 및 수집 동의한 상태: `DIRECT_CONFIRM`
  * 사용자가 개인정보 활용 및 수집 거부한 상태: `DIRECT_DENIED`

{% tabs %}
{% tab title="Java" %}

```java
// ADX 초기화 관련 설정
ADXConfiguration adxConfiguration = new ADXConfiguration.Builder()
                        .setAppId("<ADX_APP_ID>")
                        .setGdprType(ADXConfiguration.GdprType.DIRECT_CONFIRM)
                        .build();

ADXSdk.getInstance().initialize((Activity) this, adxConfiguration, new ADXSdk.OnInitializedListener() {
        @Override
        public void onCompleted(boolean result, ADXGDPR.ADXConsentState adxConsentState) {
                // 광고 초기화 완료
        }
});
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
// ADX 초기화 관련 설정
val adxConfiguration = ADXConfiguration.Builder()
    .setAppId("<ADX_APP_ID>")
    .setGdprType(ADXConfiguration.GdprType.DIRECT_CONFIRM)
    .build()

ADXSdk.getInstance().initialize(this as Activity, adxConfiguration) { result, adxConsentState ->
    // 광고 초기화 완료
}
```

{% endtab %}
{% endtabs %}

## 2. Native Ad 초기화

#### 동일한 Activity에서 초기화 함수와 Native Ad 함수를 호출하는 경우

초기화 함수를 호출하기 전에 `AdxNativeAdFactory`의 `init()`과 `setAdxViewBinder()` 를 초기화 함수보다 먼저 호출해야합니다. 초기화 함수 호출 후 `OnInitializedListener`의 `onCompleted` 내에서 `AdxNativeAdFactory.preloadAd()`를 호출해야 합니다.

{% tabs %}
{% tab title="Java" %}

```java
AdxNativeAdFactory.init(this);

AdxNativeAdFactory.setAdxViewBinder("<NATIVE_AD_UNIT_ID>", new AdxViewBinder.Builder(R.layout.layout_media_native_ad)
        .mediaViewContainerId(R.id.mediaContainerId)
        .iconImageId(R.id.adIconId)
        .titleId(R.id.titleId)
        .adChoiceContainerId(R.id.adChoicesContainerId)
        .callToActionId(R.id.callToActionId)
        .build());
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
AdxNativeAdFactory.init(this)

AdxNativeAdFactory.setAdxViewBinder("<NATIVE_AD_UNIT_ID>", AdxViewBinder.Builder(R.layout.layout_media_native_ad)
        .mediaViewContainerId(R.id.mediaContainerId)
        .iconImageId(R.id.adIconId)
        .titleId(R.id.titleId)
        .adChoiceContainerId(R.id.adChoicesContainerId)
        .callToActionId(R.id.callToActionId)
        .build()
```

{% endtab %}
{% endtabs %}

Native Ad 구현 방법은 [해당 페이지](/adx/android/sdk-integration/ad-formats/native-ad.md)를 참고해주세요.

## 3. ConsentState

GDPR 동의 여부에 대해 4개의 상태값을 가집니다.

<table data-header-hidden><thead><tr><th width="281">State</th><th>Declaration</th></tr></thead><tbody><tr><td><strong>상태</strong></td><td><strong>설명</strong></td></tr><tr><td>ADXConsentStateUnknown</td><td>동의 여부가 존재하지 않는 사용자로 호출 상태로 개인화 광고가 노출되지 않습니다.</td></tr><tr><td>ADXConsentStateNotRequired</td><td><p>동의 여부가 필요없는 지역 (EU 외 지역)</p><p>개인화 광고가 노출됩니다.</p></td></tr><tr><td>ADXConsentStateDenied</td><td><p>사용자가 개인정보 활용 및 수집을 거부한 상태</p><p>개인화 광고가 노출되지 않습니다.</p></td></tr><tr><td>ADXConsentStateConfirm</td><td><p>사용자가 개인정보 활용 및 수집을 동의한 상태</p><p>개인화 광고가 노출됩니다.</p></td></tr></tbody></table>

동의 여부를 확인/변경 하시는 경우 `ADXGdprManager`의 아래 함수를 사용하여 주시기 바랍니다.

{% tabs %}
{% tab title="Java" %}

```java
// ADXGdprManager에 설정된 사용자의 동의 정보를 확인하실 수 있습니다.
ADXGdprManager.getResultGDPR(this);

// 직접 동의 여부를 변경합니다.
ADXGdprManager.saveResultGDPR(this, ADXConsentState);
```

{% endtab %}

{% tab title="Kotlin" %}

<pre class="language-kotlin"><code class="lang-kotlin">// ADXGdprManager에 설정된 사용자의 동의 정보를 확인하실 수 있습니다.
<strong>ADXGdprManager.getResultGDPR(this)
</strong>
// 직접 동의 여부를 변경합니다.
ADXGdprManager.saveResultGDPR(this, ADXConsentState)
</code></pre>

{% endtab %}
{% endtabs %}

## 4. GDPR 동의화면 재노출

GDPR 동의 화면을 사용자에게 재노출하여 동의 여부에 대한 상태 값을 변경할 수 있습니다.

{% tabs %}
{% tab title="Java" %}

```java
ADXSdk.getInstance().showGDPRForm((Activity) this, new ADXSdk.OnPrivacyOptionsFormListener() {
    @Override
    public void onCompleted(boolean result) {
    }
});
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
ADXSdk.getInstance().showGDPRForm(this as Activity, object : OnPrivacyOptionsFormListener() {
        fun onCompleted(result: Boolean) {
        }
})
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}

* 버튼 클릭과 같은 사용자 입력 이벤트에 의해서만 위의 메소드를 호출 하십시오. 사용자 입력 이벤트 없이 호출할 경우 정상적으로 동작하지 않을 수 있습니다.
* 유럽 경제 지역 (European Economic Area) 지역이 아닐 경우, GDPR 동의 화면이 재노출 안 될 수도 있습니다.
* GDPR 동의 여부에 대한 정보가 이미 존재할 경우, 유럽 경제 지역 (European Economic Area) 지역이 아니더라도 GDPR 동의 화면이 노출될 수 있습니다.
* SDK 2.6.0 버전부터 지원됩니다.
  {% endhint %}

## 5. Privacy Policy

AD(x)의 Privacy Policy 문서 URL은 `ADXGDPR`의 `getPrivacyURL()`을 호출하여 사용하실 수 있습니다.

{% tabs %}
{% tab title="Java" %}

```java
ADXGdprManager.getPrivacyURL();
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
ADXGdprManager.getPrivacyURL()
```

{% endtab %}
{% endtabs %}

## 6. 디버깅 로그 활성화

QA 진행 시 연동 및 미디에이션 정상 동작 확인을 위해 초기화 함수를 호출하기 전에 아래와 같이 추가되어야 합니다.

{% tabs %}
{% tab title="Java" %}

```java
ADXLogUtil.setLogEnable(true);
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
ADXLogUtil.setLogEnable(true)
```

{% endtab %}
{% endtabs %}

## 7. 아동 대상 설정

COPPA에 따라 콘텐츠를 아동 대상으로 처리하도록 지정해야 하거나 유럽 경제 지역 (EEA)에 거주하는 동의 연령 미만의 사용자를 대상으로 하는 서비스의 경우 초기화 함수 호출하기 전에 애드몹의 타겟팅 설정을 해야 합니다.\
\
자세한 내용은 애드몹 타겟팅(<https://developers.google.com/admob/android/targeting?hl=ko>) 통해 확인 하실 수 있습니다.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://platform-business.gitbook.io/adx/android/sdk-integration/initialize.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
