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

# 타겟팅 설정

> Android SDK에서 타겟팅을 통해 특정 사용자 그룹에게 맞춤 광고를 노출하는 방법을 설명합니다.

## 개요

타겟팅 설정을 통해 특정 사용자 그룹에게 맞춤 광고를 노출할 수 있습니다. Adrop SDK는 두 가지 타겟팅 방식을 제공합니다:

* **오디언스 타겟팅**: 사용자의 속성(프로퍼티)을 기반으로 광고를 노출합니다.
* **문맥 타겟팅**: 콘텐츠의 맥락(카테고리, 주제 등)을 기반으로 광고를 노출합니다.

<Note>
  타겟팅 데이터를 수집하려면 광고 로드 전에 UID와 프로퍼티를 설정해야 합니다.
</Note>

***

## UID 설정

사용자 식별자(UID)를 설정하여 사용자를 구분합니다. UID는 타겟팅 광고의 기반이 됩니다.

### 사용법

<CodeGroup>
  ```kotlin Kotlin theme={null}
  import io.adrop.ads.Adrop

  // 사용자 로그인 후
  Adrop.setUID("user_123")
  ```

  ```java Java theme={null}
  import io.adrop.ads.Adrop;

  // 사용자 로그인 후
  Adrop.INSTANCE.setUID("user_123");
  ```
</CodeGroup>

### 파라미터

| 파라미터  | 타입       | 설명                        |
| ----- | -------- | ------------------------- |
| `uid` | `String` | 사용자 고유 식별자 (예: 서비스 회원 ID) |

<Warning>
  UID는 SHA-256으로 해시되어 전송됩니다. 개인정보(이메일, 전화번호 등)를 직접 전달하지 마세요.
</Warning>

***

## 오디언스 타겟팅

사용자의 속성 정보(프로퍼티)를 수집하여 특정 사용자 그룹에게 광고를 노출합니다.

### 프로퍼티 설정

`AdropMetrics.setProperty()` 메서드를 사용하여 사용자의 속성 정보를 수집합니다.

<CodeGroup>
  ```kotlin Kotlin theme={null}
  import io.adrop.ads.metrics.AdropMetrics

  // 문자열 프로퍼티
  AdropMetrics.setProperty("membership_level", "premium")

  // 숫자 프로퍼티
  AdropMetrics.setProperty("booking_count", 15)

  // 불린 프로퍼티
  AdropMetrics.setProperty("is_subscriber", true)

  // null 전달 (프로퍼티 제거)
  AdropMetrics.setProperty("membership_level", null)
  ```

  ```java Java theme={null}
  import io.adrop.ads.metrics.AdropMetrics;

  // 문자열 프로퍼티
  AdropMetrics.setProperty("membership_level", "premium");

  // 숫자 프로퍼티
  AdropMetrics.setProperty("booking_count", 15);

  // 불린 프로퍼티
  AdropMetrics.setProperty("is_subscriber", true);

  // null 전달 (프로퍼티 제거)
  AdropMetrics.setProperty("membership_level", null);
  ```
</CodeGroup>

### 파라미터

| 파라미터    | 타입       | 설명                                                |
| ------- | -------- | ------------------------------------------------- |
| `key`   | `String` | 프로퍼티 키 (최대 64자)                                   |
| `value` | `Any?`   | 프로퍼티 값 (String, Int, Double, Long, Boolean, null) |

<Warning>
  * 프로퍼티 키는 최대 64자까지 가능합니다.
  * 문자열 값은 최대 256자까지 가능합니다.
  * 숫자 값은 최대 9007199254740991까지 가능합니다.
  * 최대 256개의 프로퍼티를 설정할 수 있습니다.
</Warning>

### 기본 프로퍼티

Adrop SDK는 타겟팅을 위한 기본 프로퍼티를 제공합니다. `AdropKey`와 `AdropValue` 클래스를 사용하여 값을 설정합니다.

#### 나이 (생일)

생일 정보를 전달하면 자동으로 나이가 계산됩니다.

<CodeGroup>
  ```kotlin Kotlin theme={null}
  import io.adrop.ads.metrics.AdropMetrics
  import io.adrop.ads.model.AdropKey
  import io.adrop.ads.model.AdropValue

  // 연도만 (yyyy)
  AdropMetrics.setProperty(AdropKey.BIRTH, "1990")

  // 연월 (yyyyMM)
  AdropMetrics.setProperty(AdropKey.BIRTH, "199003")

  // 연월일 (yyyyMMdd)
  AdropMetrics.setProperty(AdropKey.BIRTH, "19900315")
  ```

  ```java Java theme={null}
  import io.adrop.ads.metrics.AdropMetrics;
  import io.adrop.ads.model.AdropKey;
  import io.adrop.ads.model.AdropValue;

  // 연도만 (yyyy)
  AdropMetrics.setProperty(AdropKey.BIRTH, "1990");

  // 연월 (yyyyMM)
  AdropMetrics.setProperty(AdropKey.BIRTH, "199003");

  // 연월일 (yyyyMMdd)
  AdropMetrics.setProperty(AdropKey.BIRTH, "19900315");
  ```
</CodeGroup>

**날짜 포맷 상수**

| 상수                                         | 값            | 설명                  |
| ------------------------------------------ | ------------ | ------------------- |
| `AdropValue.AdropBirth.formatYear`         | `"yyyy"`     | 연도만 (예: "1990")     |
| `AdropValue.AdropBirth.formatYearMonth`    | `"yyyyMM"`   | 연월 (예: "199003")    |
| `AdropValue.AdropBirth.formatYearMonthDay` | `"yyyyMMdd"` | 연월일 (예: "19900315") |

#### 성별

<CodeGroup>
  ```kotlin Kotlin theme={null}
  import io.adrop.ads.metrics.AdropMetrics
  import io.adrop.ads.model.AdropKey
  import io.adrop.ads.model.AdropValue

  // 남성
  AdropMetrics.setProperty(AdropKey.GENDER, AdropValue.AdropGender.MALE)

  // 여성
  AdropMetrics.setProperty(AdropKey.GENDER, AdropValue.AdropGender.FEMALE)

  // 그 외
  AdropMetrics.setProperty(AdropKey.GENDER, AdropValue.AdropGender.OTHER)

  // 미확인
  AdropMetrics.setProperty(AdropKey.GENDER, AdropValue.UNKNOWN)
  ```

  ```java Java theme={null}
  import io.adrop.ads.metrics.AdropMetrics;
  import io.adrop.ads.model.AdropKey;
  import io.adrop.ads.model.AdropValue;

  // 남성
  AdropMetrics.setProperty(AdropKey.GENDER, AdropValue.AdropGender.MALE);

  // 여성
  AdropMetrics.setProperty(AdropKey.GENDER, AdropValue.AdropGender.FEMALE);

  // 그 외
  AdropMetrics.setProperty(AdropKey.GENDER, AdropValue.AdropGender.OTHER);

  // 미확인
  AdropMetrics.setProperty(AdropKey.GENDER, AdropValue.UNKNOWN);
  ```
</CodeGroup>

**성별 값 상수**

| 상수                              | 값     | 설명  |
| ------------------------------- | ----- | --- |
| `AdropValue.AdropGender.MALE`   | `"M"` | 남성  |
| `AdropValue.AdropGender.FEMALE` | `"F"` | 여성  |
| `AdropValue.AdropGender.OTHER`  | `"O"` | 그 외 |
| `AdropValue.UNKNOWN`            | `"U"` | 미확인 |

#### 나이 직접 설정

생일 대신 나이를 직접 설정할 수도 있습니다.

<CodeGroup>
  ```kotlin Kotlin theme={null}
  import io.adrop.ads.metrics.AdropMetrics
  import io.adrop.ads.model.AdropKey

  AdropMetrics.setProperty(AdropKey.AGE, 30)
  ```

  ```java Java theme={null}
  import io.adrop.ads.metrics.AdropMetrics;
  import io.adrop.ads.model.AdropKey;

  AdropMetrics.setProperty(AdropKey.AGE, 30);
  ```
</CodeGroup>

<Note>
  `BIRTH`와 `AGE` 중 하나만 설정하면 됩니다. 둘 다 설정된 경우 `BIRTH`가 우선됩니다.
</Note>

### 커스텀 프로퍼티

서비스에 맞는 커스텀 프로퍼티를 설정할 수 있습니다. 커스텀 프로퍼티는 [애드컨트롤 콘솔](https://console.adrop.io)의 **타겟팅** 메뉴에서 먼저 정의해야 합니다.

<CodeGroup>
  ```kotlin Kotlin theme={null}
  import io.adrop.ads.metrics.AdropMetrics

  // 로컬 액티비티 앱 예시
  AdropMetrics.setProperty("region", "Seoul")
  AdropMetrics.setProperty("booking_count", 5)

  // 쇼핑몰 앱 예시
  AdropMetrics.setProperty("membership_tier", "gold")
  AdropMetrics.setProperty("total_purchase_amount", 1500000)

  // 미디어 앱 예시
  // 참고: 배열 값은 직접 지원되지 않습니다. JSON 문자열을 사용하세요.
  AdropMetrics.setProperty("favorite_genres", """["drama","action"]""")
  AdropMetrics.setProperty("is_premium_subscriber", true)
  ```

  ```java Java theme={null}
  import io.adrop.ads.metrics.AdropMetrics;

  // 로컬 액티비티 앱 예시
  AdropMetrics.setProperty("region", "Seoul");
  AdropMetrics.setProperty("booking_count", 5);

  // 쇼핑몰 앱 예시
  AdropMetrics.setProperty("membership_tier", "gold");
  AdropMetrics.setProperty("total_purchase_amount", 1500000);

  // 미디어 앱 예시
  // 참고: 배열 값은 직접 지원되지 않습니다. JSON 문자열을 사용하세요.
  AdropMetrics.setProperty("favorite_genres", "[\"drama\",\"action\"]");
  AdropMetrics.setProperty("is_premium_subscriber", true);
  ```
</CodeGroup>

<Warning>
  커스텀 프로퍼티 이름은 콘솔에서 정의한 이름과 정확히 일치해야 합니다. 대소문자를 구분합니다.
</Warning>

### 프로퍼티 사용 예시

사용자가 앱의 특정 화면에 진입할 때 프로퍼티를 업데이트하는 예시입니다.

<CodeGroup>
  ```kotlin Kotlin theme={null}
  import io.adrop.ads.Adrop
  import io.adrop.ads.metrics.AdropMetrics
  import io.adrop.ads.model.AdropKey
  import io.adrop.ads.model.AdropValue

  class ProfileActivity : AppCompatActivity() {
      override fun onCreate(savedInstanceState: Bundle?) {
          super.onCreate(savedInstanceState)
          setContentView(R.layout.activity_profile)

          // 사용자 정보 가져오기
          val user = getUserInfo()

          // UID 설정
          Adrop.setUID(user.id)

          // 기본 프로퍼티 설정
          AdropMetrics.setProperty(AdropKey.BIRTH, user.birthDate)
          AdropMetrics.setProperty(AdropKey.GENDER, user.gender)

          // 커스텀 프로퍼티 설정
          AdropMetrics.setProperty("membership_level", user.membershipLevel)
          AdropMetrics.setProperty("total_booking_count", user.bookingCount)
      }
  }
  ```

  ```java Java theme={null}
  import io.adrop.ads.Adrop;
  import io.adrop.ads.metrics.AdropMetrics;
  import io.adrop.ads.model.AdropKey;
  import io.adrop.ads.model.AdropValue;

  public class ProfileActivity extends AppCompatActivity {
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_profile);

          // 사용자 정보 가져오기
          User user = getUserInfo();

          // UID 설정
          Adrop.INSTANCE.setUID(user.getId());

          // 기본 프로퍼티 설정
          AdropMetrics.setProperty(AdropKey.BIRTH, user.getBirthDate());
          AdropMetrics.setProperty(AdropKey.GENDER, user.getGender());

          // 커스텀 프로퍼티 설정
          AdropMetrics.setProperty("membership_level", user.getMembershipLevel());
          AdropMetrics.setProperty("total_booking_count", user.getBookingCount());
      }
  }
  ```
</CodeGroup>

***

## 문맥 타겟팅

콘텐츠의 맥락(카테고리, 주제 등)에 따라 광고를 노출합니다. 배너 광고와 네이티브 광고에서 `contextId` 속성을 사용합니다.

### 배너 광고

#### XML에서 설정

<CodeGroup>
  ```xml XML theme={null}
  <io.adrop.ads.banner.AdropBanner
      android:id="@+id/adropBanner"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      app:adrop_unit_id="PUBLIC_TEST_UNIT_ID_320_50"
      app:adrop_context_id="article_sports" />
  ```
</CodeGroup>

#### 코드에서 설정

<CodeGroup>
  ```kotlin Kotlin theme={null}
  import io.adrop.ads.banner.AdropBanner

  val adropBanner = AdropBanner(this, "PUBLIC_TEST_UNIT_ID_320_50", "article_sports")

  // 또는 기존 인스턴스에 설정
  val existingBanner = findViewById<AdropBanner>(R.id.adropBanner)
  // contextId는 생성자에서만 설정 가능합니다
  ```

  ```java Java theme={null}
  import io.adrop.ads.banner.AdropBanner;

  AdropBanner adropBanner = new AdropBanner(this, "PUBLIC_TEST_UNIT_ID_320_50", "article_sports");

  // 또는 기존 인스턴스에 설정
  AdropBanner existingBanner = findViewById(R.id.adropBanner);
  // contextId는 생성자에서만 설정 가능합니다
  ```
</CodeGroup>

### 네이티브 광고

네이티브 광고는 생성자에서 `contextId`를 설정할 수 있습니다.

<CodeGroup>
  ```kotlin Kotlin theme={null}
  import io.adrop.ads.nativeAd.AdropNativeAd
  import io.adrop.ads.nativeAd.AdropNativeAdListener

  val nativeAd = AdropNativeAd(this, "PUBLIC_TEST_UNIT_ID_NATIVE")
  nativeAd.listener = object : AdropNativeAdListener {
      override fun onAdReceived(ad: AdropNativeAd) {
          // 광고 수신 성공
      }

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

  // contextId는 생성자에서 설정, load()는 파라미터 없음
  nativeAd.load()
  ```

  ```java Java theme={null}
  import io.adrop.ads.nativeAd.AdropNativeAd;
  import io.adrop.ads.nativeAd.AdropNativeAdListener;

  // contextId는 생성자에서 설정
  AdropNativeAd nativeAd = new AdropNativeAd(this, "PUBLIC_TEST_UNIT_ID_NATIVE", "article_technology");
  nativeAd.setListener(new AdropNativeAdListener() {
      @Override
      public void onAdReceived(@NonNull AdropNativeAd ad) {
          // 광고 수신 성공
      }

      @Override
      public void onAdFailedToReceive(@NonNull AdropNativeAd ad, AdropErrorCode errorCode) {
          // 광고 수신 실패
      }
  });

  // load()는 파라미터 없음
  nativeAd.load();
  ```
</CodeGroup>

### Context ID 사용 예시

뉴스 앱에서 기사 카테고리에 따라 광고를 노출하는 예시입니다.

<CodeGroup>
  ```kotlin Kotlin theme={null}
  import io.adrop.ads.banner.AdropBanner

  class ArticleActivity : AppCompatActivity() {
      private lateinit var adropBanner: AdropBanner

      override fun onCreate(savedInstanceState: Bundle?) {
          super.onCreate(savedInstanceState)
          setContentView(R.layout.activity_article)

          // 기사 카테고리 가져오기
          val articleCategory = getArticleCategory() // "sports", "technology", "entertainment" 등

          // 카테고리에 맞는 Context ID로 배너 생성
          val contextId = "article_$articleCategory"
          adropBanner = AdropBanner(this, "YOUR_UNIT_ID", contextId)

          // 레이아웃에 추가
          val container = findViewById<ViewGroup>(R.id.ad_container)
          container.addView(adropBanner)

          // 광고 로드
          adropBanner.load()
      }
  }
  ```

  ```java Java theme={null}
  import io.adrop.ads.banner.AdropBanner;

  public class ArticleActivity extends AppCompatActivity {
      private AdropBanner adropBanner;

      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_article);

          // 기사 카테고리 가져오기
          String articleCategory = getArticleCategory(); // "sports", "technology", "entertainment" 등

          // 카테고리에 맞는 Context ID로 배너 생성
          String contextId = "article_" + articleCategory;
          adropBanner = new AdropBanner(this, "YOUR_UNIT_ID", contextId);

          // 레이아웃에 추가
          ViewGroup container = findViewById(R.id.ad_container);
          container.addView(adropBanner);

          // 광고 로드
          adropBanner.load();
      }
  }
  ```
</CodeGroup>

<Note>
  Context ID는 콘솔에서 정의한 문맥 타겟팅 카테고리와 일치해야 합니다.
</Note>

***

## 이벤트 트래킹

사용자 행동 이벤트를 추적하여 사용자 활동 기반의 오디언스를 구축할 수 있습니다. `AdropMetrics.sendEvent()`를 사용하여 이벤트를 전송합니다.

<Note>
  `logEvent()`는 deprecated되었습니다. `sendEvent()`를 사용하세요.
</Note>

### 이벤트 전송

<CodeGroup>
  ```kotlin Kotlin theme={null}
  import io.adrop.ads.metrics.AdropMetrics
  import io.adrop.ads.metrics.AdropEventParam

  // 단순 이벤트 (파라미터 없음)
  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)
  ```

  ```java Java theme={null}
  import io.adrop.ads.metrics.AdropMetrics;
  import io.adrop.ads.metrics.AdropEventParam;

  // 단순 이벤트 (파라미터 없음)
  AdropMetrics.sendEvent("app_open");

  // 파라미터가 있는 이벤트
  AdropEventParam params = new AdropEventParam.Builder()
      .putString("item_id", "SKU-123")
      .putString("item_name", "Widget")
      .putFloat("price", 29.99f)
      .build();
  AdropMetrics.sendEvent("view_item", params);
  ```
</CodeGroup>

### 다중 아이템 이벤트

여러 아이템이 포함된 이벤트(예: purchase, begin\_checkout)의 경우, `putItems()`를 사용하여 아이템 목록을 추가합니다.

<CodeGroup>
  ```kotlin Kotlin theme={null}
  import io.adrop.ads.metrics.AdropMetrics
  import io.adrop.ads.metrics.AdropEventParam

  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 params = AdropEventParam.Builder()
      .putString("tx_id", "tx_123")
      .putString("currency", "KRW")
      .putItems(listOf(item1, item2))
      .build()
  AdropMetrics.sendEvent("purchase", params)
  ```

  ```java Java theme={null}
  import io.adrop.ads.metrics.AdropMetrics;
  import io.adrop.ads.metrics.AdropEventParam;

  AdropEventParam item1 = new AdropEventParam.Builder()
      .putString("item_id", "A")
      .putString("item_name", "Product A")
      .putInt("price", 100)
      .putInt("quantity", 1)
      .build();
  AdropEventParam item2 = new AdropEventParam.Builder()
      .putString("item_id", "B")
      .putString("item_name", "Product B")
      .putInt("price", 200)
      .putInt("quantity", 2)
      .build();
  AdropEventParam params = new AdropEventParam.Builder()
      .putString("tx_id", "tx_123")
      .putString("currency", "KRW")
      .putItems(java.util.Arrays.asList(item1, item2))
      .build();
  AdropMetrics.sendEvent("purchase", params);
  ```
</CodeGroup>

### 지원되는 이벤트 예시

| 이벤트 이름            | 설명       | 주요 파라미터                                     |
| ----------------- | -------- | ------------------------------------------- |
| `app_open`        | 앱 열기     | —                                           |
| `sign_up`         | 회원가입     | `method`                                    |
| `view_item`       | 아이템 조회   | `item_id`, `item_name`, `price`             |
| `add_to_cart`     | 장바구니 추가  | `item_id`, `item_name`, `price`, `quantity` |
| `add_to_wishlist` | 위시리스트 추가 | `item_id`, `item_name`, `price`             |
| `begin_checkout`  | 결제 시작    | `currency`, `items`                         |
| `purchase`        | 구매 완료    | `tx_id`, `currency`, `items`                |
| `page_view`       | 페이지 조회   | `page_id`, `page_category`                  |
| `click`           | 요소 클릭    | `element_id`, `element_type`                |

<Note>
  * 이벤트 이름은 1\~64자여야 합니다.
  * 파라미터 키는 1\~64자여야 합니다.
  * 문자열 파라미터 값은 최대 1024자까지 가능합니다.
  * 동일한 이름과 파라미터를 가진 중복 이벤트는 500ms 이내 전송이 제한됩니다.
</Note>

***

## 모범 사례

### 1. UID는 광고 로드 전에 설정

<CodeGroup>
  ```kotlin Kotlin theme={null}
  // 올바른 예시
  Adrop.setUID("user_123")
  adropBanner.load()

  // 잘못된 예시
  adropBanner.load()
  Adrop.setUID("user_123") // 광고 로드 후 설정하면 타겟팅이 적용되지 않음
  ```

  ```java Java theme={null}
  // 올바른 예시
  Adrop.INSTANCE.setUID("user_123");
  adropBanner.load();

  // 잘못된 예시
  adropBanner.load();
  Adrop.INSTANCE.setUID("user_123"); // 광고 로드 후 설정하면 타겟팅이 적용되지 않음
  ```
</CodeGroup>

### 2. 의미 있는 Context ID 사용

<CodeGroup>
  ```kotlin Kotlin theme={null}
  // 올바른 예시
  val contextId = "article_${article.category}" // "article_sports", "article_tech"
  val adropBanner = AdropBanner(this, unitId, contextId)

  // 잘못된 예시
  val contextId = "page_${randomNumber}" // 의미 없는 랜덤 값
  val adropBanner = AdropBanner(this, unitId, contextId)
  ```

  ```java Java theme={null}
  // 올바른 예시
  String contextId = "article_" + article.getCategory(); // "article_sports", "article_tech"
  AdropBanner adropBanner = new AdropBanner(this, unitId, contextId);

  // 잘못된 예시
  String contextId = "page_" + randomNumber; // 의미 없는 랜덤 값
  AdropBanner adropBanner = new AdropBanner(this, unitId, contextId);
  ```
</CodeGroup>

### 3. 프로퍼티는 변경될 때마다 업데이트

<CodeGroup>
  ```kotlin Kotlin theme={null}
  class MainActivity : AppCompatActivity() {
      override fun onCreate(savedInstanceState: Bundle?) {
          super.onCreate(savedInstanceState)

          // 앱 시작 시 초기 프로퍼티 설정
          updateUserProperties()
      }

      fun onUserPurchaseComplete(purchaseAmount: Int) {
          // 구매 완료 시 프로퍼티 업데이트
          val currentTotal = getCurrentTotalPurchase()
          AdropMetrics.setProperty("total_purchase_amount", currentTotal + purchaseAmount)
      }

      fun onMembershipUpgrade(newTier: String) {
          // 멤버십 업그레이드 시 프로퍼티 업데이트
          AdropMetrics.setProperty("membership_tier", newTier)
      }
  }
  ```

  ```java Java theme={null}
  public class MainActivity extends AppCompatActivity {
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);

          // 앱 시작 시 초기 프로퍼티 설정
          updateUserProperties();
      }

      public void onUserPurchaseComplete(int purchaseAmount) {
          // 구매 완료 시 프로퍼티 업데이트
          int currentTotal = getCurrentTotalPurchase();
          AdropMetrics.setProperty("total_purchase_amount", currentTotal + purchaseAmount);
      }

      public void onMembershipUpgrade(String newTier) {
          // 멤버십 업그레이드 시 프로퍼티 업데이트
          AdropMetrics.setProperty("membership_tier", newTier);
      }
  }
  ```
</CodeGroup>

***

## 관련 문서

<CardGroup cols={2}>
  <Card title="오디언스 타겟팅 만들기" icon="users" href="/ko/targeting/audience">
    콘솔에서 오디언스 타겟팅 생성하기
  </Card>

  <Card title="문맥 타겟팅 만들기" icon="book" href="/ko/targeting/context">
    콘솔에서 문맥 타겟팅 생성하기
  </Card>

  <Card title="타겟팅 판매하기" icon="won-sign" href="/ko/targeting/sell">
    타겟팅 판매하기
  </Card>

  <Card title="배너 광고" icon="rectangle-ad" href="/ko/sdk/android/banner">
    배너 광고 구현하기
  </Card>

  <Card title="네이티브 광고" icon="mobile" href="/ko/sdk/android/native">
    네이티브 광고 구현하기
  </Card>

  <Card title="레퍼런스" icon="code" href="/ko/sdk/android/reference">
    클래스, 리스너, 에러 코드
  </Card>
</CardGroup>

***

## FAQ

<AccordionGroup>
  <Accordion title="UID를 설정하지 않으면 타겟팅 광고가 노출되지 않나요?">
    UID를 설정하지 않아도 광고는 노출되지만, 오디언스 타겟팅이 적용되지 않습니다. 기본 타겟팅(국가, 언어 등)만 사용됩니다. 정교한 타겟팅을 위해서는 UID 설정이 필수입니다.
  </Accordion>

  <Accordion title="프로퍼티를 설정했는데 콘솔에서 데이터가 보이지 않아요.">
    프로퍼티 데이터는 수집 후 최대 24시간 내에 콘솔에 반영됩니다. 데이터가 표시되지 않는 경우:

    1. 콘솔에서 프로퍼티가 올바르게 정의되었는지 확인하세요.
    2. SDK에서 전달하는 프로퍼티 키가 콘솔과 정확히 일치하는지 확인하세요 (대소문자 구분).
    3. `AdropMetrics.setProperty()`가 광고 로드 전에 호출되는지 확인하세요.
  </Accordion>

  <Accordion title="Context ID는 어떤 형식으로 만들어야 하나요?">
    Context ID는 콘텐츠의 맥락을 나타내는 의미 있는 문자열이어야 합니다. 예를 들어:

    * 뉴스 앱: `"article_sports"`, `"article_tech"`, `"article_entertainment"`
    * 쇼핑 앱: `"category_fashion"`, `"category_electronics"`
    * 동영상 앱: `"video_drama"`, `"video_comedy"`

    콘솔에서 정의한 문맥 타겟팅 카테고리와 일치하도록 설정하세요.
  </Accordion>

  <Accordion title="배열 타입의 프로퍼티를 설정할 수 있나요?">
    아니요, 배열 값은 직접 지원되지 않습니다. `setProperty`는 String, Int, Double, Long, Boolean, null 값만 허용합니다. 여러 값을 저장하려면 JSON 문자열을 사용하세요:

    ```kotlin theme={null}
    AdropMetrics.setProperty("favorite_genres", """["drama","action","comedy"]""")
    ```
  </Accordion>

  <Accordion title="프로퍼티 값을 삭제하려면 어떻게 하나요?">
    프로퍼티 값에 `null`을 전달하면 해당 프로퍼티가 삭제됩니다:

    ```kotlin theme={null}
    AdropMetrics.setProperty("membership_level", null)
    ```
  </Accordion>
</AccordionGroup>
