개요
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)
이벤트 로깅
사용자 행동을 이벤트로 기록하여 더 정교한 타겟팅을 할 수 있습니다.복사
import AdropAds
// 파라미터 없는 이벤트
AdropMetrics.logEvent(name: "tutorial_complete")
// 파라미터가 있는 이벤트
AdropMetrics.logEvent(
name: "purchase",
params: [
"item_id": "SKU_12345",
"price": 9.99,
"currency": "USD"
]
)
// 게임 이벤트 예시
AdropMetrics.logEvent(
name: "level_complete",
params: [
"level": 5,
"score": 1500,
"time_spent": 180
]
)
일반적인 이벤트 예시
복사
// 앱 이벤트
AdropMetrics.logEvent(name: "app_open")
AdropMetrics.logEvent(name: "tutorial_begin")
AdropMetrics.logEvent(name: "tutorial_complete")
// 전자상거래 이벤트
AdropMetrics.logEvent(name: "view_item", params: ["item_id": "PROD_123"])
AdropMetrics.logEvent(name: "add_to_cart", params: ["item_id": "PROD_123", "quantity": 2])
AdropMetrics.logEvent(name: "begin_checkout", params: ["value": 49.99])
AdropMetrics.logEvent(name: "purchase", params: ["transaction_id": "T12345", "value": 49.99])
// 콘텐츠 이벤트
AdropMetrics.logEvent(name: "view_article", params: ["article_id": "A123", "category": "tech"])
AdropMetrics.logEvent(name: "share_content", params: ["content_type": "article", "item_id": "A123"])
// 게임 이벤트
AdropMetrics.logEvent(name: "level_start", params: ["level": 1])
AdropMetrics.logEvent(name: "level_complete", params: ["level": 1, "score": 1000])
AdropMetrics.logEvent(name: "unlock_achievement", params: ["achievement_id": "first_win"])
문맥 타겟팅
콘텐츠나 화면의 문맥에 따라 광고를 타겟팅할 수 있습니다.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.logEvent(name: "app_open")
return true
}
}
class ProductViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 상품 조회 이벤트
AdropMetrics.logEvent(
name: "view_item",
params: [
"item_id": "PROD_123",
"category": "electronics",
"price": 299.99
]
)
}
@IBAction func addToCartTapped(_ sender: UIButton) {
// 장바구니 추가 이벤트
AdropMetrics.logEvent(
name: "add_to_cart",
params: [
"item_id": "PROD_123",
"quantity": 1,
"price": 299.99
]
)
}
func completePurchase() {
// 구매 완료 이벤트
AdropMetrics.logEvent(
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.logEvent(
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.logEvent(name: "purchase", params: ["value": 99.99])
AdropMetrics.logEvent(name: "level_complete", params: ["level": 10])
AdropMetrics.logEvent(name: "tutorial_complete")
// ❌ 나쁜 예: 과도한 이벤트
AdropMetrics.logEvent(name: "button_tapped") // 너무 일반적
AdropMetrics.logEvent(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" // 의미 불분명