비디오 광고
CJ 메조미디어 DSP에 SSP 비디오 인벤토리 연동 시 가이드 입니다.
1. REQUEST
CJ 메조미디어 DSP 는 HTTP POST 방식으로 아래 정의된 객체를 JSON 형태로 구성한 뒤, 위의 URL 을 POST 방식으로 호출합니다. 요청 객체 정의는 OPEN RTB 2.5 규격을 따릅니다.
Request object
id
string
Y
요청 유니크 아이디
at
integer
Y
0 : fixed price, 1: first price, 2: second price
tmax
integer
Y
최대허용시간 (ms).
bcat
string array
N
IAB 카테고리 기준으로 광고주 카테고리를 차단합니다.
badv
string array
N
광고주의 도메인을 차단합니다.
bapp
string array
N
App의 번들이나 패키지명을 차단합니다.
Imp
id
string
Y
노출에 대한 유니크 아이디
bidfloor
float
Y
입찰로 인정받을 수 있는 최소 가격. 예) 4.12
bidfloorcur
string
Y
통화, 예) ‘KRW’
secure
integer
Y
0 : http, 1 : https
instl
integer
Y
전면광고 여부를 전달합니다. (default: 0) * 1 = the ad is interstitial or full screen * 0 = not interstitial.
displaymanager
string
Y
SSP 플랫폼명 또는 SDK명을 의미합니다.
displaymanagerver
string
Y
SSP 플랫폼 또는 SDK 버전을 의미합니다.
Video
imp / video
mimes
string array
Y
MIME 타입. 예) “video/mp4”
w
integer
Y
비디오의 가로 크기
h
integer
Y
비디오의 세로 크기
minduration
integer
Y
비디오가 재생되어야 하는 최소 시간(초)
maxduration
integer
Y
비디오가 재생될 수 있는 최대 시간(초)
protocols
integer array
Y
VAST 버전. “3” 을 전달합니다.
startdelay
integer
Y
프리롤, 미드롤, 포스트롤 광고 구분값을 전달합니다. * 0 = 프리롤 * -1 = 일반 미드롤 * -2 = 일반 포스트롤
linearity
integer
Y
1: Linear / In-Stream 2: Non-Linear / Overlay
delivery
integer array
Y
2 (Progressive) 로 전달합니다.
placement
integer
Y
비디오 게재 위치 * 1 = 플레이어 내 * 2 = 배너 내 * 3 = 기사 내 * 4 = 피드 내 * 5 = 전면/슬라이드/플로팅
ext
object
N
표준 항목 외에 필요한 정보를 전달합니다. (ex, rewarded)
Video / ext
imp / video / ext
rewarded
integer
N
Reward 광고 여부를 전달합니다. * 0 = no(non-reward) * 1 = yes(reward)
App
id
string
Y
퍼블리셔 ID
name
string
N
애플리케이션 이름
bundle
string
Y
번들 이름, 패키지 이름
storeurl
string
N
앱스토어 URL
cat
string array
N
카테고리
Publisher
app / publisher
id
string
Y
퍼블리셔 ID
name
string
N
퍼블리셔 명
cat
string array
N
카테고리
Device
ua
string
Y
디바이스의 User Agent 정보
dnt
integer
N
위치 추적 금지 활성화 여부. 0: 추적 가능, 1: 추적 금지.
ip
string
Y
IPV4 주소
model
string
N
모델명
os
string
Y
운영체제. 예) iOS, Anroid
osv
string
Y
운영체제 버전. 예) 8.1, 9.2
js
integer
N
RTB 프로토콜에 1로 정의되어 있습니다.
ifa
string
Y
Apple IFA 또는 Google 의 ADID
UA(User Agent)의 경우, AD Exchange 거래를 위한 조건으로 반드시 필수 제공해주셔야 합니다.
IP의 경우, Private IP(가상IP)가 아닌 Public IP 기준으로 전달주셔야 합니다. 공유기, 회사 내부망에 할당된 IP가 그대로 전달 될 경우 광고 거래가 제한적일 수 있습니다.
User
id
string
Y
사용자의 고유 ID
요청 예제 (APP)
{
"id": "cdc-7c6d-4029-dcd|1337",
"at": 0,
"tmax": 250,
"imp": [
{
"id": "150226007700",
"bidfloorcur": "KRW",
"bidfloor": 0,
"secure": 0,
"video": {
"mimes": [
"video\\/mp4"
],
"w": 1080,
"h": 1920,
"minduration": 5,
"maxduration": 30,
"protocols": [
3
],
"startdelay": 0,
"linearity": 1,
"delivery": [
2
],
"ext": {
"rewarded": 1
}
},
"instl": 0
}
],
"app": {
"id": "test-pub-app-id",
"name": "test-pub-app-name",
"bundle": "com.mezzo.co.kr ",
"storeurl": "https://itunes.apple.com/us/app/id1234567?mt=8",
"cat": [
"IAB1"
],
"publisher": {
"id": "test-pub-app-id",
"name": "test-pub-app-name",
"cat": [
"IAB1"
]
}
},
"device": {
"ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12H141",
"dnt": 0,
"ip": "192.168.1.1",
"model": "iPhone 7,2",
"os": "iOS",
"osv": "8.0",
"js": 1,
"ifa": "test-ifa-gaid"
},
"user": {
"id": "923123"
},
"ext": {
}
}
요청 예제 (WEB)
{
"id": "cdc-7c6d-4029-dcd|1337",
"at": 0,
"tmax": 250,
"imp": [
{
"id": "150226007700",
"bidfloorcur": "KRW",
"bidfloor": 0,
"secure": 0,
"video": {
"mimes": [
"video\\/mp4"
],
"w": 1080,
"h": 1920,
"minduration": 5,
"maxduration": 30,
"protocols": [
3
],
"startdelay": 0,
"linearity": 1,
"delivery": [
2
],
"ext": {
"rewarded": 1
}
},
"instl": 0
}
],
"site": {
"id": "test-pub-app-id",
"domain": "test-pub-web-domain",
"ref": " test-pub-web-ref",
"cat": [
"IAB1"
],
"publisher": {
"id": "test-pub-app-id",
"name": "test-pub-app-name",
"cat": [
"IAB1"
]
}
},
"device": {
"ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12H141",
"ip": "192.168.1.1"
},
"user": {
"id": "923123"
},
"ext": {
"price_type": 1,
"tracking_type": 0
}
}
2. RESPONSE
DSP 는 아래 정의된 객체를 HTTP body 에 포함해 응답합니다. 객체 정의는 OPEN RTB 2.3 규격을 따릅니다.
Bid Response
id
string
Y
Bid Request 의 ID
bidid
string
Y
Bid 오브젝트의 ID
cur
string
Y
입찰시 사용할 통화. 예) KRW
Bid
Ext
clickurl
string
Y
클릭 트래킹 URL
viewable
string
Y
광고 영역이 20% 이상 노출되면서 2초 이상 유지된 경우에 대한 트래킹 URL
breakaway
string
Y
광고 재생이 완료되지 않고 이탈한 이벤트에 대한 트래킹 URL.
breakaway URL 에 {m_sec} 이 포함된 경우, {m_sec} 을 광고 재생 시간으로 치환하여 URL 호출을 합니다. 예를 들어 breakaway 값을 http://breakaway.tracking.com/tracking.do?time={m_sec} 지정했고, 20초 재생 후 이탈 한 경우, http://breakaway.tracking.com/tracking.do?time=20 을 호출합니다.
Adm
VAST
adm / VAST
version
integer (속성)
Y
VAST 규약 버전. 3.0 인 경우, 3으로 작성합니다.
Ad
adm / Ad
Inline
adm / Ad / Inline
AdTitle
integer
N
광고 이름
Error
element
N
Player 에러 발생시 호출할 트래킹 URL
Impression
element
Y
동영상 시작시 호출할 트래킹 URL
AdSystem
adm / Ad / Inline / AdSystem
version
integer (속성)
N
광고 엔진 버전
Extensions
adm / Ad / Inline / Extensions
requestID
string
N
광고 요청 고유 코드
Creative
adm / Ad / Inline / Creatives / Creative
Linear
adm / Ad / Inline / Creatives / Creative / Linear
Duration
string
N
영상 길이 / 재생 시간. hh:mm:ss 형태로 지정합니다.
Tracking
adm / Ad / Inline / Creatives / Creative / Linear / TrackingEvents / Tracking
event
string (속성)
Y
이벤트 이름을 지정합니다. 예) start, firstQuartile, midpoint
offset
element array
N
이벤트 발생 조건이 되는 재생 시간을 지정합니다. hh:mm:ss 형태로 지정.
start
동영상이 시작된 경우 호출하는 트래킹 URL
firstQuartile
동영상이 25% 재생된 경우 호출하는 트래킹 URL
midpoint
동영상이 50% 재생된 경우 호출하는 트래킹 URL
thirdQuartile
동영상이 75% 재생된 경우 호출하는 트래킹 URL
complete
동영상 재생이 완료된 경우 호출하는 트래킹 URL
progress
동영상이 지정된 offset 속성만큼 재생된 경우 호출하는 트래킹 URL
VideoClicks
adm / Ad / Inline / Creative / Linear / VideoClicks
ClickThrough
string
Y
광고 랜딩 페이지 URL
ClickTracking
string
N
광고 클릭 이벤트 트래킹 URL
offset
string
N
지정된 시간까지 재생된 이후에 광고 클릭이 가능합니다.
MediaFile
adm / Ad / Inline / Creatives / Creative / Linear / MediaFiles / MediaFile
delivery
string (속성)
N
동영상 소재 재생 방식. progressive 를 지원합니다.
type
string (속성)
N
동영상 소재 타입. 예) video/mp4
width
integer (속성)
N
동영상 소재의 폭
height
integer (속성)
N
동영상 소재의 높이
bitrate
integer (속성)
N
동영상 소재의 비트레이트
Bid response 예제
{
"id": "req-12345-abcde",
"bidid": "5508",
"cur": "KRW",
"seatbid": [
{
"bid": [
{
"id": "147704390800",
"price": "60",
"adm": "%3CVAST+version%3D%223.0%22%3E%0D%0A%3CAd+id%3D%2250096%22+sequence%3D%221%22%3E%0D%0A%3CInLine%3E%0D%0A%3CAdSystem+version%3D%222%22%3EMAN%3C%2FAdSystem%3E%0D%0A%3CAdTitle%3E%0D%0A%3C%21%5BCDATA%5B+20160217_%ED%99%88%ED%94%8C%EB%9F%AC%EC%8A%A4_%ED%99%88%ED%94%8C%EB%9F%AC%EC%8A%A4_%EB%8F%99%EC%98%81%EC%83%81_%ED%85%8C%EC%8A%A4%ED%8A%B8+%5D%5D%3E%0D%0A%3C%2FAdTitle%3E%0D%0A%3CExtensions%3E%0D%0A%3CrequestID%3E%0D%0A%3C%21%5BCDATA%5B+-+%5D%5D%3E%0D%0A%3C%2FrequestID%3E%0D%0A%3C%2FExtensions%3E%0D%0A%3CError%3E%0D%0A%3C%21%5BCDATA%5B%0D%0Ahttp%3A%2F%2Fmtag.mman.kr%2Fad_tracking.mezzo%2F%3Fd_err%3D%5BERRORCODE%5D%5D%0D%0A%5D%5D%3E%0D%0A%3C%2FError%3E%0D%0A%3CImpression+id%3D%22man_server%22%3E%0D%0A%3C%21%5BCDATA%5B%0D%0Ahttp%3A%2F%2Fmtag.mman.kr%2Fad_tracking.mezzo%2F%3Fe_request_type%3Dimps_tracking%0D%0A%5D%5D%3E%0D%0A%3C%2FImpression%3E%0D%0A%3CCreatives%3E%0D%0A%3CCreative+id%3D%2225549%22+sequence%3D%221%22%3E%0D%0A%3CLinear%3E%0D%0A%3CDuration%3E00%3A00%3A30%3C%2FDuration%3E%0D%0A%3CTrackingEvents%3E%0D%0A%3CTracking+event%3D%22start%22%3E%0D%0A%3C%21%5BCDATA%5B%0D%0Ahttp%3A%2F%2Fmtag.mman.kr%2Fad_tracking.mezzo%2F%3Fe_request_type%3Dtrack_vast_q1%26e_version%3D2%0D%0A%5D%5D%3E%0D%0A%3C%2FTracking%3E%0D%0A%3CTracking+event%3D%22firstQuartile%22%3E%0D%0A%3C%21%5BCDATA%5B%0D%0Ahttp%3A%2F%2Fmtag.mman.kr%2Fad_tracking.mezzo%2F%3Fe_request_type%3Dtrack_vast_q2%26e_version%3D2%0D%0A%5D%5D%3E%0D%0A%3C%2FTracking%3E%0D%0A%3CTracking+event%3D%22midpoint%22%3E%0D%0A%3C%21%5BCDATA%5B%0D%0Ahttp%3A%2F%2Fmtag.mman.kr%2Fad_tracking.mezzo%2F%3Fe_request_type%3Dtrack_vast_q3%26e_version%3D2%0D%0A%5D%5D%3E%0D%0A%3C%2FTracking%3E%0D%0A%3CTracking+event%3D%22thirdQuartile%22%3E%0D%0A%3C%21%5BCDATA%5B%0D%0Ahttp%3A%2F%2Fmtag.mman.kr%2Fad_tracking.mezzo%2F%3Fe_request_type%3Dtrack_vast_q4%26e_version%3D2%5D%5D%3E%0D%0A%3C%2FTracking%3E%0D%0A%3CTracking+event%3D%22complete%22%3E%0D%0A%3C%21%5BCDATA%5B%0D%0Ahttp%3A%2F%2Fmtag.mman.kr%2Fad_tracking.mezzo%2F%3Fe_request_type%3Dtrack_vast_q5%26e_version%3D2%0D%0A%5D%5D%3E%0D%0A%3C%2FTracking%3E%0D%0A%3CTracking+event%3D%22progress%22+offset%3D%2200%3A00%3A05%22%3E%0D%0A%3C%21%5BCDATA%5B%0D%0Ahttp%3A%2F%2Fmtag.mman.kr%2Fad_tracking.mezzo%2F%3Fe_request_type%3Dimps_video_tracking%26e_version%3D2%0D%0A%5D%5D%3E%0D%0A%3C%2FTracking%3E%0D%0A%3CTracking+event%3D%22progress%22+offset%3D%2200%3A00%3A15%22%3E%0D%0A%3C%21%5BCDATA%5B%0D%0Ahttp%3A%2F%2Fmtag.mman.kr%2Fad_tracking.mezzo%2F%3Fe_request_type%3Dtrack_vast_view%26e_version%3D2%0D%0A%5D%5D%3E%0D%0A%3C%2FTracking%3E%0D%0A%3C%2FTrackingEvents%3E%0D%0A%3CVideoClicks%3E%0D%0A%3CClickThrough%3E%0D%0A%3C%21%5BCDATA%5B%0D%0Ahttp%3A%2F%2Fmtag.mman.kr%2Fad_tracking.mezzo%2F%3Fe_request_type%3Dclick%26e_version%3D2%0D%0A%5D%5D%3E%0D%0A%3C%2FClickThrough%3E%0D%0A%3CClickTracking%3E%3C%2FClickTracking%3E%0D%0A%3COffset%3E00%3A00%3A05%3C%2FOffset%3E%0D%0A%3C%2FVideoClicks%3E%0D%0A%3CMediaFiles%3E%0D%0A%3CMediaFile+delivery%3D%22progressive%22+type%3D%22video%2Fmp4%22+width%3D%22480%22+height%3D%22270%22+bitrate%3D%22350%22%3E%0D%0A%3C%21%5BCDATA%5B%0D%0Ahttp%3A%2F%2Fmtag.mman.kr%2Fvod.mezzo%2F%3Fe_version%3D2%26e_request_type%3Dvod%26i_video_name%3D20161014150027%26d_r%3D1%26i_rs_t%3D3%26d_p1%3D1%0D%0A%5D%5D%3E%0D%0A%3C%2FMediaFile%3E%0D%0A%3C%2FMediaFiles%3E%0D%0A%3C%2FLinear%3E%0D%0A%3C%2FCreative%3E%0D%0A%3C%2FCreatives%3E%0D%0A%3C%2FInLine%3E%0D%0A%3C%2FAd%3E%0D%0A%3C%2FVAST%3E",
"nurl": "http://abc.com/ad_tracking.mezzo/?e_request_type=imps_tracking",
"adomain": "http: //adver.co.kr",
"cid": "2234",
"crid": "2234",
"cat": [
"IAB1"
],
"ext": {
"clickurl": "http://abc.com/ad_tracking.mezzo/?e_request_type=click",
"viewable": "http://abc.com/ad_tracking.mezzo/?e_request_type=viewable",
"breakaway": "http://abc.com/ad_tracking.mezzo/?e_request_type=breakaway&sec={m_sec}"
}
}
]
}
]
}
Adm 예제
<?xml version="1.0" encoding="UTF-8"?>
<VAST version="3.0">
<Ad id="50096" sequence="1">
<InLine>
<AdSystem version="2">MAN</AdSystem>
<AdTitle><![CDATA[ 20160217_홈플러스_홈플러스_동영상_테스트 ]]></AdTitle>
<Extensions>
<requestID><![CDATA[ - ]]></requestID>
</Extensions>
<Error><![CDATA[http://mtag.mman.kr/ad_tracking.mezzo/?d_err=[ERRORCODE]]]]></Error>
<Impression id="man_server"><![CDATA[http://mtag.mman.kr/ad_tracking.mezzo/?e_request_type=imps_tracking]]></Impression>
<Creatives>
<Creative id="25549" sequence="1">
<Linear>
<Duration>00:00:30</Duration>
<TrackingEvents>
<Tracking event="start"><![CDATA[http://mtag.mman.kr/ad_tracking.mezzo/?e_request_type=track_vast_q1&e_version=2]]></Tracking>
<Tracking event="firstQuartile"><![CDATA[http://mtag.mman.kr/ad_tracking.mezzo/?e_request_type=track_vast_q2&e_version=2]]></Tracking>
<Tracking event="midpoint"><![CDATA[http://mtag.mman.kr/ad_tracking.mezzo/?e_request_type=track_vast_q3&e_version=2]]></Tracking>
<Tracking event="thirdQuartile"><![CDATA[http://mtag.mman.kr/ad_tracking.mezzo/?e_request_type=track_vast_q4&e_version=2]]></Tracking>
<Tracking event="complete"><![CDATA[http://mtag.mman.kr/ad_tracking.mezzo/?e_request_type=track_vast_q5&e_version=2]]></Tracking>
<Tracking event="progress" offset="00:00:05"><![CDATA[http://mtag.mman.kr/ad_tracking.mezzo/?e_request_type=imps_video_tracking&e_version=2]]></Tracking>
<Tracking event="progress" offset="00:00:15"><![CDATA[http://mtag.mman.kr/ad_tracking.mezzo/?e_request_type=track_vast_view&e_version=2]]></Tracking>
</TrackingEvents>
<VideoClicks>
<ClickThrough><![CDATA[http://mtag.mman.kr/ad_tracking.mezzo/?e_request_type=click&e_version=2]]></ClickThrough>
<ClickTracking></ClickTracking>
<Offset>00:00:05</Offset>
</VideoClicks>
<MediaFiles>
<MediaFile delivery="progressive" type="video/mp4" width="480" height="270" bitrate="350"><![CDATA[http://mtag.mman.kr/vod.mezzo/?e_version=2&e_request_type=vod&i_video_name=20161014150027&d_r=1&i_rs_t=3&d_p1=1]]></MediaFile>
</MediaFiles>
</Linear>
</Creative>
</Creatives>
</InLine>
</Ad>
</VAST>
SKAdNetwork 지원(iOS14 이상)
1
DSP는 Apple의 SKAdNetwork API에 Ad Network로 등록되어 있어야 한다. (https://developer.apple.com/documentation/storekit/skadnetwork/registering_an_ad_network)
2
Apple로부터 Public key를 발급받고 Postback URL을 설정해야 한다.
3
Apple로부터 발급받은 SKAdNetwork ID를 CJ MezzoMedia 담당자에게 전달하고 CJ MezzoMedia는 전달받은 SKAdNetwork ID를 자사와 제휴된 퍼블리셔의 info.plist에 등록 요청한다.
4
DSP에서 SKAdNetwork가 활성화된 캠페인 Response를 전달할 때는 SKAdNetwork ID 및 관련된 모든 정보를 포함해야한다.
5
광고주 App은 registerAppForAdNetworkAttribution()를 통해 SKAdNetwork 사용자로 등록해야 한다.
6
DSP는 SKAdNetwork를 통해 설치 데이터를 제공 받을 수 있다.
광고요청 추가내용 (SKAdNetwork)
BidRequest / imp / banner / ext / skadn
1
DSP에서 제공하는 SKAdNetwork ID가 퍼블리셔의 info.plist에 등록되어 있어야 한다.
2
사용자 기기의 운영체제가 iOS14 혹은 그 이상이어야 한다.
3
SKAdNetwork를 지원하는 버전의 SDK를 설치해야한다.
4
DSP는 CJ 메조미디어의 Bid Request 규약을 준수해야한다.
version
string
Y
사용하는 SKadNetwork 버전. “2.0” 혹은 그 이상.
“version”:”2.0”
sourceapp
string
Y
Apple App 스토어에 등록된 퍼블리셔 App ID. ‘BidRequest.app.bundle’ 과 매칭
“sourceapp”:”000000000”
skadnetids
string
Y
퍼블리셔 App 내 info.plist에 입력된 SKAdNetwork IDs
“skadnetids”:[“feyaarzu9v.skadnetwork”]
SKAdNetwork 광고 요청 예제
{
"imp":[{
"ext": {
"skadn": {
"version": "2.0",
"sourceapp": "000000000",
"skadnetids": ["feyaarzu9v.skadnetwork", "8sRFag4vVC.skadnetwork"]
}
}
}]
}
광고응답 추가내용 (SKAdNetwork)
BidResponse / imp / banner / ext / skadn
version
string
Y
사용하는 SKadNetwork 버전. “2.0” 혹은 그 이상.
“version”:”2.0”
network
string
Y
광고 네트워크 식별자. Request에 포함된 skadnetids와 최소 한 개는 매칭되어야 함
“network”:[“feyaarzu9v.skadnetwork”]
campaign
string
Y
Apple의 규격에 맞는 캠페인 ID. 1과 100 사이의 정수를 이용해서 표현해야함
“campaign”:”45”
itunesitem
string
Y
Apple App 스토어에 등록된 광고주 App ID. ‘Bidresponse.bid.bundle’과 매칭
“itunesitem”:”123456789”
nonce
string
Y
개별 광고 response의 유니크 ID
“nonce”:”123b1a78-b5ef-98ad-1234-ab-c4effa00b8”
sourceapp
string
Y
Apple App 스토어에 등록된 퍼블리셔 App ID. ‘BidRequest.imp.ext.skad.sourceapp’ 과 매칭
“sourceapp”:”000000000”
timestamp
string
Y
Unix time을 string 값으로 전달
“timestamp”:”1234567890”
signature
string
Y
Apple에서 제공하는 SKAdNetwork sigature 값
“signature”:”ABCDEFGHijkl-lmb…”
SKAdNetwork 광고 응답 예제
{
"seatbid": [{
"bid": [{
"ext": {
"skadn": {
"version": "2.0",
"network": "feyaarzu9v.skadnetwork ",
"campaign": "45",
"itunesitem": "123456789",
"nonce": "123b1a78-b5ef-98ad-1234-ab-c4effa00b8",
"sourceapp": "000000000",
"timestamp": "1234567890",
"signature": "ABCDEFGHijkl-lmbKBSE8QnhLTIHZZZWCFgZpRqRxHss65KoFAiAJgJKjdrWdkLUOCCjuEx2RmFS7daRzSVZRVZ8RyMyUXg"
}
}
}]
}]
}
Last updated