모바일 앱 입찰은 현재 선정된 퍼블리셔만 이용할 수 있습니다.
내부 미디에이션은 공개적으로 제공되지 않습니다.
현재 Audience Network를 사용한 내부 입찰은 비공개 베타이고 공개적으로 제공되지 않습니다. 변경 사항이 있을 경우 추가적인 업데이트를 제공하겠습니다.
또는 Facebook과 파트너십을 맺은 미디에이션 플랫폼 중 하나를 통해 Audience Network 입찰에 액세스할 수 있습니다.
Facebook Audience Network는 모바일 웹사이트와 모바일 앱에서 입찰을 지원합니다. 모바일 앱 입찰 통합은 모바일 클라이언트-서버 또는 서버-서버 사이에서 실행할 수 있습니다. 이 개요에서는 앱 입찰의 일반 개념을 설명합니다.
앱 입찰은 퍼블리셔가 동시에 여러 수요 소스에 실시간으로 모든 광고 기회를 제공함으로써 광고 인벤토리의 경매를 공정하고 공개적으로 구성하는 방법입니다. 모든 수요 소스는 값이 가장 높을 때 모든 노출에서 경쟁해 낙찰될 수 있습니다.
앱 입찰은 각 노출 기회에 대한 입찰을 제공하기 위해 실시간 공개 입찰(ORTB) 프로토콜을 구현하는 엔드포인트를 통해 제공됩니다. 앱 입찰에서 다음과 같은 작업을 실행하는 데 Audience Network SDK가 필요합니다.
buyeruid
(Audience Network SDK에서는 bidderToken
으로 지칭)를 얻습니다. 이 토큰은 입찰 요청에서 필수 필드이고 각 사용자와 앱에 대해 고유하므로 다른 사용자나 앱에 대해서는 유효하지 않습니다.adm
필드를 사용자 기기의 Audience Network SDK로 전달하여 광고를 읽어들입니다. adm
필드는 실제 광고를 포함하지 않으며, SDK가 Audience Network 서버에서 광고를 검색할 수 있는 정보만 포함합니다.경매를 실행하면(위의 입찰 플로의 세 번째 단계) 클라이언트 측 또는 서버 측에서 호스팅할 수 있습니다. 아래는 3가지 통합 유형입니다.
서버 간 통합 아키텍처
서버 간 통합에서 경매 서버는 Facebook Audience Network 입찰 엔드포인트와 기타 모든 수요 소스를 호출해 입찰 응답을 받습니다. 그러면 경매 서버가 경매를 실행하고 낙찰되는 입찰가를 선택합니다. 이 경매 서버는 직접 구축한 경매 로직을 실행하는 사내 서버나 Audience Network의 앱 입찰과 통합된 타사 서버가 될 수 있습니다. 이를 통해 서버의 리소스와 이용 가능한 네트워크를 활용해 수요 소스의 입찰 엔드포인트를 호출할 수 있습니다. 또한 클라이언트 업데이트를 하지 않아도 이러한 엔드포인트 통합을 변경할 수 있습니다.
외부 광고 서버 통합
외부 광고 서버 통합을 사용하면 현재의 폭포수식 미디에이션 환경과 앱 입찰을 연결할 수 있습니다. 이는 앱 입찰을 지원하는 수요 소스와 서버 간 통합을 진행한 다음, 경매 낙찰자를 폭포수식 미디에이션 플랫폼으로 전달하는 방식을 사용합니다. 이 플랫폼은 폭포수식 경쟁을 실행하고 전체 낙찰 수요 소스를 선택합니다. 이 통합은 폭포수식 미디에이션과 앱 입찰을 연결하는 중간 다리 역할을 합니다. 이 통합 유형을 사용하면 직접 경매 로직을 작성할 필요가 없습니다.
입찰 엔드포인트는 OpenRTB 프로토콜 v2.5의 하위 세트를 지원합니다.
참고: 전체 요청 샘플은 경매 서버 설정 가이드를 참조하세요.
'id' => string, // platform's auction identifier, 'imp' => vec< // slots to bid on shape( 'id' => string, // platform's identifier for this slot auction // only for banner impression opportunities 'banner' => shape( 'w' => int, // width 'h' => int, // height ), // only for native impression opportunities 'native' => shape( 'w' => int, // width 'h' => int, // height ), // only for video impression opportunities 'video' => shape( 'w' => int, // width 'h' => int, // height 'linearity' => int, // 1 = instream, optional 'ext' => shape( 'videotype' => string, // 'rewarded' for Rewarded Video impression opportunities, optional ), ), 'tagid' => string, // Placement ID 'instl' => int, // interstitial flag, 1 = On, 0 = Off, optional ) >, // app details (in-app bidding only) 'app' => shape( 'publisher' => shape( 'id' => string, // publisher app ID ), ), 'device' => shape( 'ua' => string, // device user-agent 'ifa' => string, // ID sanctioned for advertiser use // Do not send ip or ipv6 if you are requesting bids from the client device. // For server-side bid requests set ip or ipv6. 'ip' => string, // device IPv4 'ipv6' => string, // device IPv6 'dnt' => int, // "do not track", 1 = On, 0 = Off, optional 'lmt' => int, // "limit ad tracking", 1 = On, 0 = Off ), 'regs' => shape( // regulations object 'coppa' => int, // US FTC regulations for Children's Online Privacy Protection Act, 1 = On, 0 = Off, optional ), 'user' => shape( 'buyeruid' => string, // Audience Network Identity Token, mandatory ), 'ext' => shape( 'platformid' => string, // Mediation partner Platform ID or publisher FB app ID, mandatory 'authentication_id' => string // Authentication token to validate the originator of the request ), 'at' => int, // auction type: 1 = First Price, 2 = Second Price 'tmax' => int, // auction timeout in milliseconds 'test' => int, // 0 = normal, 1 = test-mode (we bid $99.99, but don't pay out), optional
현재 OpenRTB를 통해 요청할 수 있는 네 가지 유형의 광고를 지원합니다. 여기에는 배너, 네이티브(네이티브 또는 네이티브 배너), 동영상(보상형 또는 인스트림 동영상)과 전면 광고가 있습니다. 참고: 배너, 네이티브 및 동영상 개체는 동시에 선택할 수 없지만 그중 하나는 필수로 포함해야 합니다.
입찰 요청에서 지원되는 광고 형식의 리스트는 다음과 같습니다.
광고 형식 | 입찰 요청의 매개변수 |
---|---|
네이티브 |
|
네이티브 배너 |
|
전면 광고 |
|
보상형 동영상 |
|
보상형 전면 광고 |
|
배너 - 높이: 50 |
|
배너 - 높이: 250* |
|
*이 광고 형식은 수익 관리자에서 배너 또는 중간 직사각형 노출 위치를 만들 수 있습니다.
입찰 응답은 30분간 유효합니다. 입찰 응답을 수신하고 30분 이내에 언제든 광고를 요청할 수 있습니다. 30분을 초과한 입찰을 기반으로 한 노출에 대해서는 가격이 지불되지 않습니다.
참고: 입찰 응답으로 광고를 요청하면 광고가 클라이언트에 캐시될 수 있으나 이를 읽어들인 시점에서 60분 이내에 표시되어야 합니다. 60분을 초과하여 캐시된 광고를 기반으로 한 노출에 대해서는 가격이 지불되지 않습니다.
1 'id' => string // platform's request identifier 'seatbid' => vec< shape( 'bid' => vec< shape( 'id' => string, // Our identifier for this bid 'impid' => string, // platform's identifier for this slot auction 'price' => float, // Our bid price on CPM basis, in USD 'adm' => string, // Our creative - see Rendering The Ad 'nurl' => string, // URL to get if we win the impression 'lurl' => string, // URL to get if we lose the impression ) >, ), >, 'bidid' => string, // Our identifier for this response 'cur' => string, // bid currency: USD
ORTB에 정의된 적절한 실패 코드를 포함하여 반드시낙찰, 실패, 청구 가능 및 시간 초과 알림이 필요합니다. ORTB nurl, lurl 및 burl은 입찰 응답에서 제공됩니다. 입찰 응답 예시는 이전 섹션을 참조하세요. 입찰 시간 초과일 경우 대체 보고 경로를 제공합니다.
입찰 응답에서 낙찰 nurl이 제공됩니다. nurl에서 결제 가격을 채워야 합니다.
"https://www.facebook.com/audiencenetwork/nurl/?partner=${PARTNER_FBID}&app=${APP_FBID}&placement=${PLACEMENT_FBID}&auction=${AUCTION_ID}&impression=${IMPRESSION_ID}&request=${BID_REQUEST_ID}&bid=${BID_ID}&ortb_loss_code=0&clearing_price=${AUCTION_PRICE}"
${AUCTION_PRICE}
: 이는 입찰가와 동일한 단위(예: CPM 기준 USD)를 사용하여 경매의 결제 가격으로 대체해야 합니다.실패 lurl에는 채워야 하는 2개의 플래그가 포함되어 있습니다.
"https://www.facebook.com/audiencenetwork/nurl/?partner=${PARTNER_FBID}&app=${APP_FBID}&placement=${PLACEMENT_FBID}&auction=${AUCTION_ID}&impression=${IMPRESSION_ID}&request=${BID_REQUEST_ID}&bid=${BID_ID}&ortb_loss_code=${AUCTION_LOSS}&clearing_price=${AUCTION_PRICE}"
${AUCTION_LOSS}
: 이는 ORTB 실패 코드로 대체해야 합니다.${AUCTION_PRICE}
: 이는 입찰가와 동일한 단위(예: CPM 기준 USD)를 사용하여 경매의 결제 가격으로 대체해야 합니다.다음은 다양한 실패 코드와 그에 해당하는 실패 이유 리스트입니다.
실패 이유 | 설명 | ORTB v2.5 실패 코드 |
---|---|---|
잘못된 입찰 응답 | 입찰이 유효하지 않습니다(그러나 입찰이 있었고 지연되지 않았으며 nurl을 추출할 수 있을 정도로 유효함). | 3 |
입찰 시간 초과 * | 입찰 응답을 수신하였으나 경매 마감 시간에 늦었습니다. | 2 |
입찰 없음 | 입찰 없음은 HTTP 204(즉, 호출할 nurl이 없음)로 표시되지만 이 응답을 입찰 없음으로 해석할 수 있습니다(통합 문제일 가능성이 큼) 다수의 노출에 입찰을 요청할 수 있고, 전체가 아니라 일부에 입찰합니다. | 9 |
가장 높은 RTB 입찰자가 아님 | 다른 입찰자가 동일한 경매에 참가했다면 인공 입찰(예: RTB가 아닌 거래)을 포함하여 더 나은 입찰가를 제시합니다. | 102 |
재고가 실현되지 않음 | 입찰이 경매에서 낙찰되었으나 노출이 실현되지 않았습니다(예: 페이지가 짧아서 이 슬롯을 포함할 수 없거나 캐시된 광고를 사용하기 전에 사용자가 앱을 나갔습니다). 일부 파트너가 이 광고를 제공할 수 없어서(이벤트가 발생하지 않음) 광고가 제공되지 않을 경우 이를 유추합니다. | 4902 |
광고 서버에 전송됨 | 결정 프로세스에서 마지막 터치포인트가 광고 서버에 높은 입찰가를 전송하는 것일 경우 이를 전송합니다. 행 항목 누락, 광고 서버의 경매 무효화 또는 재고가 실현되지 않는 등으로 인해 노출이 여전히 실패할 수 있습니다. | 4900 |
광고 서버가 RTB 낙찰자를 선택하지 않음 | RTB 경매에 낙찰되었지만 광고 서버가 경매를 무효화했습니다(예: 직접). | 4903 |
낙찰 | 전체 결정 트리가 낙찰되었고 페이지에 태그가 배치되거나(웹) 광고 개체가 캐시되었습니다(앱). 여전히 조회 가능한 노출이 없을 수 있습니다. | 0 |
Audience Network SDK에서 노출 콜백이 트리거될 경우 청구 가능 알림이 필요합니다. burl에 결제 가격을 채워야 합니다.
"https://www.facebook.com/audiencenetwork/burl/?partner=${PARTNER_FBID}&app=${APP_FBID}&placement=${PLACEMENT_FBID}&auction=${AUCTION_ID}&impression=${IMPRESSION_ID}&request=${BID_REQUEST_ID}&bid=${BID_ID}&ortb_loss_code=0&clearing_price=${AUCTION_PRICE}"
${AUCTION_PRICE}
: 이는 입찰가와 동일한 단위(예: CPM 기준 USD)를 사용하여 경매의 결제 가격으로 대체해야 합니다.입찰 시간 초과일 경우 대체 보고 경로를 제공합니다. 입찰이 도착할 때까지 기다리지 않고 호출할 수 있는 일반 nurl입니다. 형식은 다음과 같습니다.
"https://www.facebook.com/audiencenetwork/nurl/?partner=${PARTNER_FBID}&app=${APP_FBID}&auction=${AUCTION_ID}&ortb_loss_code=2"
참고:${PARTNER_FBID}
, ${APP_FBID}
및 ${AUCTION_ID}
는 적절한 값으로 채워야 합니다. 아래의 표는 이러한 값에 대한 설명을 제공합니다.
매개변수 | 유형 | 설명 |
---|---|---|
PARTNER_FBID | 정수 | Facebook에서 발행하는 광고 경매 서버 ID입니다. 전담 광고 경매 파트너가 없다면 여기에 앱 ID를 사용하세요. |
APP_FBID | 정수 | 경매를 시작한 앱/비즈니스의 Facebook 발행 ID입니다. |
AUCTION_ID | 문자열 | 입찰 요청 발행에 사용한 경매의 클라이언트 생성 ID입니다. |
가격은 CPM에 근거하여 USD로 견적을 냅니다(예: 4.25는 낙찰 시 노출 1,000회당 4.25달러를 지불한다는 의미). nurl과 lurl의 정산 가격에는 동일한 단위를 사용해야 합니다. 정산은 퍼블리셔에게 직접 지불됩니다.
입찰은 항상 1차 가격 기준으로 진행됩니다. 즉, 입찰한 가격을 지불하고 전액을 지불한다고 가정하고 입찰합니다. 따라서 다른 입찰자가 입찰 가격보다 적게 지불한다고 가정하고 입찰하는 2차 가격 경매에서는 불리하게 됩니다.
앱 노출의 경우 최고가 입찰자인지 여부와 관계없이 노출이 조회되었을 때만 가격을 지불합니다.