Adrop SDK는 두 가지 타입의 타겟팅을 지원합니다:
오디언스 타겟팅 : 사용자 속성(성별, 연령, 관심사 등)을 기반으로 광고를 타겟팅
문맥 타겟팅 : 콘텐츠나 화면의 문맥에 따라 광고를 타겟팅
타겟팅을 활용하면 사용자에게 더 관련성 높은 광고를 보여줄 수 있으며, 광고주는 원하는 대상에게 효과적으로 광고를 전달할 수 있습니다.
오디언스 타겟팅
사용자 속성을 기반으로 광고를 타겟팅할 수 있습니다.
1. 타겟팅 생성
먼저 애드컨트롤 콘솔에서 오디언스 타겟팅을 생성하세요.
타겟팅 생성하기 콘솔에서 오디언스 타겟팅 생성 방법 확인
2. 사용자 ID 설정
광고 렌더링 전에 사용자 식별자를 설정해야 합니다.
import AdropAds
// 로그인 후 사용자 ID 설정
Adrop. setUID ( "user_id" )
타겟팅 광고가 정상 동작하려면 광고 지면 진입 전에 UID를 설정하세요.
3. 사용자 프로퍼티 설정
사용자 속성을 설정하면 더 정교한 타겟팅이 가능합니다.
import AdropAds
// 기본 제공 속성 설정
AdropMetrics. setProperty ( key : AdropKey. GENDER , value : AdropValue. AdropGender . MALE )
AdropMetrics. setProperty ( key : AdropKey. AGE , value : 30 )
AdropMetrics. setProperty ( key : AdropKey. BIRTH , value : "19931225" )
// 커스텀 속성 설정 (콘솔에서 등록 필요)
AdropMetrics. setProperty ( key : "membership" , value : "premium" )
AdropMetrics. setProperty ( key : "interest_tech" , value : true )
AdropMetrics. setProperty ( key : "last_purchase_date" , value : "2024-01-15" )
프로퍼티 값은 단일 값(String, Int, Bool)만 지원합니다. 배열이나 딕셔너리는 지원하지 않습니다.
기본 제공 속성
SDK는 일반적으로 사용되는 속성에 대한 사전 정의된 키를 제공합니다.
AdropKey
키 설명 값 타입 AdropKey.GENDER성별 AdropValue.AdropGender AdropKey.AGE연령 Int AdropKey.BIRTH생년월일 String (YYYY, YYYYMM, YYYYMMDD)
AdropValue
성별에 대한 사전 정의된 값:
값 설명 AdropValue.AdropGender.MALE남성 AdropValue.AdropGender.FEMALE여성 AdropValue.AdropGender.OTHER기타 AdropValue.UNKNOWN알 수 없음
// 성별 설정
AdropMetrics. setProperty ( key : AdropKey. GENDER , value : AdropValue. AdropGender . MALE )
AdropMetrics. setProperty ( key : AdropKey. GENDER , value : AdropValue. AdropGender . FEMALE )
AdropMetrics. setProperty ( key : AdropKey. GENDER , value : AdropValue. AdropGender . OTHER )
// 연령 설정
AdropMetrics. setProperty ( key : AdropKey. AGE , value : 25 )
// 생년월일 설정
AdropMetrics. setProperty ( key : AdropKey. BIRTH , value : "1999" ) // 연도만
AdropMetrics. setProperty ( key : AdropKey. BIRTH , value : "199903" ) // 연월
AdropMetrics. setProperty ( key : AdropKey. BIRTH , value : "19990315" ) // 전체
커스텀 속성
콘솔에서 추가 등록한 속성을 설정할 수 있습니다. 모든 커스텀 속성의 키는 문자열이며, 값은 String, Int, Bool 타입을 지원합니다.
// 문자열 값
AdropMetrics. setProperty ( key : "membership" , value : "premium" )
AdropMetrics. setProperty ( key : "favorite_category" , value : "electronics" )
// 정수 값
AdropMetrics. setProperty ( key : "purchase_count" , value : 5 )
AdropMetrics. setProperty ( key : "loyalty_points" , value : 1500 )
// 불린 값
AdropMetrics. setProperty ( key : "is_subscribed" , value : true )
AdropMetrics. setProperty ( key : "newsletter_opt_in" , value : false )
커스텀 속성을 사용하기 전에 반드시 콘솔에서 해당 속성을 먼저 등록해야 합니다.
제약 사항
프로퍼티 설정 시 다음 제약 사항에 유의하세요:
단일 값만 지원 : 배열([String], [Int])이나 딕셔너리([String: Any])는 지원하지 않습니다.
지원 타입 : String, Int, Bool만 사용 가능합니다.
사전 등록 필요 : 커스텀 속성은 콘솔에서 먼저 등록해야 합니다.
// ❌ 잘못된 사용 (배열/딕셔너리)
AdropMetrics. setProperty ( key : "interests" , value : [ "tech" , "gaming" ]) // 지원 안함
AdropMetrics. setProperty ( key : "profile" , value : [ "age" : 25 ]) // 지원 안함
// ✅ 올바른 사용
AdropMetrics. setProperty ( key : "interest_tech" , value : true )
AdropMetrics. setProperty ( key : "interest_gaming" , value : true )
AdropMetrics. setProperty ( key : "age" , value : 25 )
이벤트 트래킹
사용자 행동 이벤트를 추적하여 사용자 활동 기반의 오디언스를 구축할 수 있습니다. AdropMetrics.sendEvent()를 사용하여 이벤트를 전송합니다.
logEvent()는 더 이상 사용되지 않습니다(deprecated). 대신 sendEvent()를 사용하세요.
이벤트 전송
import AdropAds
// 단순 이벤트 (파라미터 없음)
AdropMetrics. sendEvent ( name : "app_open" )
// 파라미터가 있는 이벤트
AdropMetrics. sendEvent ( name : "view_item" , params : [
"item_id" : "SKU-123" ,
"item_name" : "Widget" ,
"item_category" : "Electronics" ,
"price" : 29.99
])
다중 아이템 이벤트
여러 아이템이 포함된 이벤트(예: purchase, begin_checkout)의 경우, "items" 키 아래에 딕셔너리 배열을 전달합니다.
import AdropAds
AdropMetrics. sendEvent ( name : "purchase" , params : [
"tx_id" : "tx_123" ,
"currency" : "KRW" ,
"items" : [
[ "item_id" : "A" , "item_name" : "Product A" , "price" : 100 , "quantity" : 1 ],
[ "item_id" : "B" , "item_name" : "Product B" , "price" : 200 , "quantity" : 2 ]
]
])
지원되는 이벤트 예시
이벤트 이름 설명 주요 파라미터 app_open앱 실행 — sign_up회원가입 methodview_item아이템 조회 item_id, item_name, priceadd_to_cart장바구니 추가 item_id, item_name, price, quantityadd_to_wishlist위시리스트 추가 item_id, item_name, pricebegin_checkout결제 시작 currency, itemspurchase구매 완료 tx_id, currency, itemspage_view페이지 조회 page_id, page_categoryclick요소 클릭 element_id, element_type
이벤트 이름은 1~64자여야 합니다.
파라미터 키는 1~64자여야 합니다.
문자열 파라미터 값은 최대 1024자까지 가능합니다.
동일한 이름과 파라미터를 가진 중복 이벤트는 500ms 이내 전송이 제한됩니다.
문맥 타겟팅
콘텐츠나 화면의 문맥에 따라 광고를 타겟팅할 수 있습니다.
1. 타겟팅 생성
먼저 애드컨트롤 콘솔에서 문맥 타겟팅을 생성하세요.
문맥 타겟팅 생성하기 콘솔에서 문맥 타겟팅 생성 방법 확인
2. 광고 지면에 값 설정
콘솔에서 설정한 Context ID를 광고 로드 시 전달합니다.
배너 광고
import AdropAds
let banner = AdropBanner ( unitId : "YOUR_UNIT_ID" )
banner. contextId = "sport" // 문맥 ID 설정
banner. load ()
네이티브 광고
import AdropAds
class ViewController : UIViewController {
private var adLoader: AdropNativeAdLoader ?
func loadAd () {
adLoader = AdropNativeAdLoader ( unitId : "YOUR_UNIT_ID" )
adLoader ? . contextId = "tech" // 문맥 ID 설정
adLoader ? . delegate = self
adLoader ? . loadAd ()
}
}
전면 광고
import AdropAds
class ViewController : UIViewController {
private var interstitial: AdropInterstitialAd ?
func loadAd () {
interstitial = AdropInterstitialAd ( unitId : "YOUR_UNIT_ID" )
interstitial ? . contextId = "news" // 문맥 ID 설정
interstitial ? . delegate = self
interstitial ? . load ()
}
}
보상형 광고
import AdropAds
class ViewController : UIViewController {
private var rewarded: AdropRewardedAd ?
func loadAd () {
rewarded = AdropRewardedAd ( unitId : "YOUR_UNIT_ID" )
rewarded ? . contextId = "game" // 문맥 ID 설정
rewarded ? . delegate = self
rewarded ? . load ()
}
}
동적 문맥 설정
화면이나 콘텐츠에 따라 동적으로 문맥을 설정할 수 있습니다.
import UIKit
import AdropAds
class ArticleViewController : UIViewController {
private var banner: AdropBanner ?
var articleCategory: String ? // 기사 카테고리
override func viewDidLoad () {
super . viewDidLoad ()
banner = AdropBanner ( unitId : "YOUR_UNIT_ID" )
// 기사 카테고리에 따라 문맥 설정
if let category = articleCategory {
banner ? . contextId = category // "sport", "tech", "business" 등
}
banner ? . delegate = self
view. addSubview (banner ! )
banner ? . load ()
}
}
// 사용 예시
let sportArticle = ArticleViewController ()
sportArticle. articleCategory = "sport"
let techArticle = ArticleViewController ()
techArticle. articleCategory = "tech"
SwiftUI에서 문맥 설정
import SwiftUI
import AdropAds
struct ArticleView : View {
let category: String
var body: some View {
VStack {
Text ( "기사 내용" )
// 카테고리에 따라 동적으로 문맥 설정
AdropBannerRepresented (
unitId : "YOUR_UNIT_ID" ,
contextId : category
)
. frame ( width : 320 , height : 100 )
}
}
}
// 사용 예시
struct ContentView : View {
var body: some View {
TabView {
ArticleView ( category : "sport" )
. tabItem { Label ( "스포츠" , systemImage : "sportscourt" ) }
ArticleView ( category : "tech" )
. tabItem { Label ( "기술" , systemImage : "cpu" ) }
ArticleView ( category : "business" )
. tabItem { Label ( "비즈니스" , systemImage : "chart.line.uptrend.xyaxis" ) }
}
}
}
전체 예제
오디언스 타겟팅 전체 예제
import UIKit
import AdropAds
class AppDelegate : UIResponder , UIApplicationDelegate {
func application (
_ application : UIApplication,
didFinishLaunchingWithOptions launchOptions : [UIApplication.LaunchOptionsKey: Any ] ?
) -> Bool {
// SDK 초기화
Adrop. initialize ( production : false )
// 사용자 로그인 후 UID 설정
Adrop. setUID ( "user_12345" )
// 기본 사용자 속성 설정
AdropMetrics. setProperty ( key : AdropKey. GENDER , value : AdropValue. AdropGender . MALE )
AdropMetrics. setProperty ( key : AdropKey. AGE , value : 28 )
AdropMetrics. setProperty ( key : AdropKey. BIRTH , value : "19960315" )
// 커스텀 속성 설정
AdropMetrics. setProperty ( key : "membership" , value : "premium" )
AdropMetrics. setProperty ( key : "interest_tech" , value : true )
AdropMetrics. setProperty ( key : "interest_sports" , value : true )
AdropMetrics. setProperty ( key : "purchase_count" , value : 15 )
// 앱 시작 이벤트 전송
AdropMetrics. sendEvent ( name : "app_open" )
return true
}
}
class ProductViewController : UIViewController {
override func viewDidLoad () {
super . viewDidLoad ()
// 상품 조회 이벤트
AdropMetrics. sendEvent (
name : "view_item" ,
params : [
"item_id" : "PROD_123" ,
"category" : "electronics" ,
"price" : 299.99
]
)
}
@IBAction func addToCartTapped ( _ sender : UIButton) {
// 장바구니 추가 이벤트
AdropMetrics. sendEvent (
name : "add_to_cart" ,
params : [
"item_id" : "PROD_123" ,
"quantity" : 1 ,
"price" : 299.99
]
)
}
func completePurchase () {
// 구매 완료 이벤트
AdropMetrics. sendEvent (
name : "purchase" ,
params : [
"transaction_id" : "T67890" ,
"value" : 299.99 ,
"currency" : "USD"
]
)
// 구매 횟수 업데이트
let newPurchaseCount = 16
AdropMetrics. setProperty ( key : "purchase_count" , value : newPurchaseCount)
}
}
문맥 타겟팅 전체 예제
import UIKit
import AdropAds
// 뉴스 앱 예제: 기사 카테고리에 따라 다른 광고 표시
class NewsArticleViewController : UIViewController {
private var banner: AdropBanner ?
// 기사 정보
var article: Article ?
struct Article {
let id: String
let title: String
let category: String // "sport", "tech", "business", "entertainment"
}
override func viewDidLoad () {
super . viewDidLoad ()
setupBanner ()
loadArticle ()
}
private func setupBanner () {
banner = AdropBanner ( unitId : "YOUR_UNIT_ID" )
// 기사 카테고리를 문맥 ID로 설정
if let category = article ? .category {
banner ? . contextId = category
}
banner ? . delegate = self
if let bannerView = banner {
view. addSubview (bannerView)
bannerView. translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint. activate ([
bannerView. centerXAnchor . constraint ( equalTo : view. centerXAnchor ),
bannerView. bottomAnchor . constraint ( equalTo : view. safeAreaLayoutGuide . bottomAnchor ),
bannerView. widthAnchor . constraint ( equalToConstant : 320 ),
bannerView. heightAnchor . constraint ( equalToConstant : 100 )
])
}
banner ? . load ()
}
private func loadArticle () {
// 기사 조회 이벤트 전송
if let article = article {
AdropMetrics. sendEvent (
name : "view_article" ,
params : [
"article_id" : article. id ,
"category" : article. category
]
)
}
}
}
extension NewsArticleViewController : AdropBannerDelegate {
func onAdReceived ( _ banner : AdropBanner) {
print ( "카테고리 ' \( article ? . category ?? "" ) ' 맞춤 광고 로드 성공" )
}
func onAdFailedToReceive ( _ banner : AdropBanner, _ errorCode : AdropErrorCode) {
print ( "광고 로드 실패: \( errorCode ) " )
}
func onAdImpression ( _ banner : AdropBanner) {
print ( "광고 노출" )
}
func onAdClicked ( _ banner : AdropBanner) {
print ( "광고 클릭" )
}
}
// 사용 예시
let sportArticle = NewsArticleViewController ()
sportArticle. article = NewsArticleViewController. Article (
id : "A123" ,
title : "프리미어리그 경기 결과" ,
category : "sport"
)
let techArticle = NewsArticleViewController ()
techArticle. article = NewsArticleViewController. Article (
id : "A124" ,
title : "새로운 AI 기술 발표" ,
category : "tech"
)
모범 사례
1. UID 설정 타이밍
사용자가 로그인하는 즉시 UID를 설정하세요.
// 로그인 성공 시
func didLoginSuccessfully ( userId : String ) {
Adrop. setUID (userId)
// 사용자 속성도 함께 설정
AdropMetrics. setProperty ( key : "is_logged_in" , value : true )
}
// 로그아웃 시
func didLogout () {
Adrop. setUID ( "" ) // UID 초기화
AdropMetrics. setProperty ( key : "is_logged_in" , value : false )
}
2. 프로퍼티 일관성 유지
사용자 프로퍼티는 앱 실행 시 또는 값이 변경될 때마다 설정하세요.
class UserManager {
func updateUserProfile ( profile : UserProfile) {
// 프로필 정보 업데이트 시 프로퍼티 동기화
AdropMetrics. setProperty ( key : AdropKey. AGE , value : profile. age )
AdropMetrics. setProperty ( key : "membership" , value : profile. membershipLevel )
AdropMetrics. setProperty ( key : "interest_ \( profile. mainInterest ) " , value : true )
}
}
3. 의미 있는 이벤트 전송
중요한 사용자 행동만 이벤트로 전송하세요.
// ✅ 좋은 예: 의미 있는 행동
AdropMetrics. sendEvent ( name : "purchase" , params : [ "value" : 99.99 ])
AdropMetrics. sendEvent ( name : "level_complete" , params : [ "level" : 10 ])
AdropMetrics. sendEvent ( name : "tutorial_complete" )
// ❌ 나쁜 예: 과도한 이벤트
AdropMetrics. sendEvent ( name : "button_tapped" ) // 너무 일반적
AdropMetrics. sendEvent ( name : "scroll" ) // 너무 빈번함
4. 문맥 ID 일관성
문맥 ID는 콘솔에 등록한 값과 정확히 일치해야 합니다.
// ✅ 좋은 예: 명확하고 일관된 ID
banner ? . contextId = "sport"
banner ? . contextId = "tech"
banner ? . contextId = "business"
// ❌ 나쁜 예: 불일치하거나 모호한 ID
banner ? . contextId = "Sport" // 대소문자 불일치
banner ? . contextId = "technology" // 콘솔과 다른 값
banner ? . contextId = "category_1" // 의미 불분명
다음 단계