메인 콘텐츠로 건너뛰기

개요

타겟팅 설정을 통해 특정 사용자 그룹에게 맞춤 광고를 노출할 수 있습니다. Adrop SDK는 두 가지 타겟팅 방식을 제공합니다:
  • 오디언스 타겟팅: 사용자의 속성(프로퍼티)을 기반으로 광고를 노출합니다.
  • 문맥 타겟팅: 콘텐츠의 맥락(카테고리, 주제 등)을 기반으로 광고를 노출합니다.
타겟팅 데이터를 수집하려면 광고 로드 전에 UID와 프로퍼티를 설정해야 합니다.

UID 설정

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

사용법

import io.adrop.ads.Adrop

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

// 사용자 로그아웃 시
Adrop.setUID("")

파라미터

파라미터타입설명
uidString사용자 고유 식별자 (예: 서비스 회원 ID)
UID는 SHA-256으로 해시되어 전송됩니다. 개인정보(이메일, 전화번호 등)를 직접 전달하지 마세요.
로그아웃 시 빈 문자열("")을 전달하여 UID를 초기화하세요.

오디언스 타겟팅

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

프로퍼티 설정

AdropMetrics.setProperty() 메서드를 사용하여 사용자의 속성 정보를 수집합니다.
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)

파라미터

파라미터타입설명
keyString프로퍼티 키 (최대 64자)
valueAny?프로퍼티 값 (String, Int, Double, Long, Boolean, null)
  • 프로퍼티 키는 최대 64자까지 가능합니다.
  • 문자열 값은 최대 256자까지 가능합니다.
  • 숫자 값은 최대 9007199254740991까지 가능합니다.
  • 최대 256개의 프로퍼티를 설정할 수 있습니다.

기본 프로퍼티

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

나이 (생일)

생일 정보를 전달하면 자동으로 나이가 계산됩니다.
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")
날짜 포맷 상수
상수설명
AdropValue.AdropBirth.formatYear"yyyy"연도만 (예: “1990”)
AdropValue.AdropBirth.formatYearMonth"yyyyMM"연월 (예: “199003”)
AdropValue.AdropBirth.formatYearMonthDay"yyyyMMdd"연월일 (예: “19900315”)

성별

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)
성별 값 상수
상수설명
AdropValue.AdropGender.MALE"M"남성
AdropValue.AdropGender.FEMALE"F"여성
AdropValue.AdropGender.OTHER"O"그 외
AdropValue.UNKNOWN"U"미확인

나이 직접 설정

생일 대신 나이를 직접 설정할 수도 있습니다.
import io.adrop.ads.metrics.AdropMetrics
import io.adrop.ads.model.AdropKey

AdropMetrics.setProperty(AdropKey.AGE, 30)
BIRTHAGE 중 하나만 설정하면 됩니다. 둘 다 설정된 경우 BIRTH가 우선됩니다.

커스텀 프로퍼티

서비스에 맞는 커스텀 프로퍼티를 설정할 수 있습니다. 커스텀 프로퍼티는 애드컨트롤 콘솔타겟팅 메뉴에서 먼저 정의해야 합니다.
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)

// 미디어 앱 예시
AdropMetrics.setProperty("favorite_genres", arrayOf("drama", "action"))
AdropMetrics.setProperty("is_premium_subscriber", true)
커스텀 프로퍼티 이름은 콘솔에서 정의한 이름과 정확히 일치해야 합니다. 대소문자를 구분합니다.

프로퍼티 사용 예시

사용자가 앱의 특정 화면에 진입할 때 프로퍼티를 업데이트하는 예시입니다.
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)
    }
}

문맥 타겟팅

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

배너 광고

XML에서 설정

<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" />

코드에서 설정

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는 생성자에서만 설정 가능합니다

네이티브 광고

네이티브 광고는 생성자에서 contextId를 설정할 수 있습니다.
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와 함께 광고 로드
nativeAd.load("article_technology")

Context ID 사용 예시

뉴스 앱에서 기사 카테고리에 따라 광고를 노출하는 예시입니다.
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()
    }
}
Context ID는 콘솔에서 정의한 문맥 타겟팅 카테고리와 일치해야 합니다.

이벤트 트래킹

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

이벤트 전송

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)

다중 아이템 이벤트

여러 아이템이 포함된 이벤트(예: purchase, begin_checkout)의 경우, putItems()를 사용하여 아이템 목록을 추가합니다.
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)

지원되는 이벤트 예시

이벤트 이름설명주요 파라미터
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
  • 이벤트 이름은 1~64자여야 합니다.
  • 파라미터 키는 1~64자여야 합니다.
  • 문자열 파라미터 값은 최대 1024자까지 가능합니다.
  • 동일한 이름과 파라미터를 가진 중복 이벤트는 500ms 이내 전송이 제한됩니다.

모범 사례

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

// ✅ 올바른 예시
Adrop.setUID("user_123")
adropBanner.load()

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

2. 의미 있는 Context ID 사용

// ✅ 올바른 예시
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)

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

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)
    }
}

4. 로그아웃 시 UID 초기화

fun onUserLogout() {
    // UID 초기화
    Adrop.setUID("")

    // 필요시 프로퍼티도 초기화
    AdropMetrics.setProperty("membership_level", null)
    AdropMetrics.setProperty("total_booking_count", null)
}

관련 문서


FAQ

UID를 설정하지 않아도 광고는 노출되지만, 오디언스 타겟팅이 적용되지 않습니다. 기본 타겟팅(국가, 언어 등)만 사용됩니다. 정교한 타겟팅을 위해서는 UID 설정이 필수입니다.
프로퍼티 데이터는 수집 후 최대 24시간 내에 콘솔에 반영됩니다. 데이터가 표시되지 않는 경우:
  1. 콘솔에서 프로퍼티가 올바르게 정의되었는지 확인하세요.
  2. SDK에서 전달하는 프로퍼티 키가 콘솔과 정확히 일치하는지 확인하세요 (대소문자 구분).
  3. AdropMetrics.setProperty()가 광고 로드 전에 호출되는지 확인하세요.
Context ID는 콘텐츠의 맥락을 나타내는 의미 있는 문자열이어야 합니다. 예를 들어:
  • 뉴스 앱: "article_sports", "article_tech", "article_entertainment"
  • 쇼핑 앱: "category_fashion", "category_electronics"
  • 동영상 앱: "video_drama", "video_comedy"
콘솔에서 정의한 문맥 타겟팅 카테고리와 일치하도록 설정하세요.
네, 문자열 배열, 숫자 배열, 불린 배열을 모두 지원합니다. 예를 들어 사용자의 관심사를 배열로 전달할 수 있습니다:
AdropMetrics.setProperty("favorite_genres", arrayOf("drama", "action", "comedy"))
프로퍼티 값에 null을 전달하면 해당 프로퍼티가 삭제됩니다:
AdropMetrics.setProperty("membership_level", null)