모바일 앱 입찰은 현재 선정된 퍼블리셔만 이용할 수 있습니다.

서버 간 입찰

내부 미디에이션은 공개적으로 제공되지 않습니다.

현재 Audience Network를 사용한 내부 입찰은 비공개 베타이고 공개적으로 제공되지 않습니다. 변경 사항이 있을 경우 추가적인 업데이트를 제공하겠습니다.

또는 Facebook과 파트너십을 맺은 미디에이션 플랫폼 중 하나를 통해 Audience Network 입찰에 액세스할 수 있습니다.

이 페이지:

Facebook Audience Network는 모바일 웹사이트와 모바일 앱에서 입찰을 지원합니다. 모바일 앱 입찰 통합은 모바일 클라이언트-서버 또는 서버-서버 사이에서 실행할 수 있습니다. 이 개요에서는 앱 입찰의 일반 개념을 설명합니다.

소개

앱 입찰의 정의

앱 입찰은 퍼블리셔가 동시에 여러 수요 소스에 실시간으로 모든 광고 기회를 제공함으로써 광고 인벤토리의 경매를 공정하고 공개적으로 구성하는 방법입니다. 모든 수요 소스는 값이 가장 높을 때 모든 노출에서 경쟁해 낙찰될 수 있습니다.

앱 입찰을 하는 이유

  • 실시간 경매는 모든 광고 요청을 최적화할 수 있는 기회입니다.
  • 광고 인벤토리의 실제 값을 알 수 있습니다.
  • 유지 관리가 간편하고 광고 운영 리소스가 덜 필요합니다.

통합 아키텍처

앱 입찰은 각 노출 기회에 대한 입찰을 제공하기 위해 실시간 공개 입찰(ORTB) 프로토콜을 구현하는 엔드포인트를 통해 제공됩니다. 앱 입찰에서 다음과 같은 작업을 실행하는 데 Audience Network SDK가 필요합니다.

  • buyeruid(Audience Network SDK에서는 bidderToken으로 지칭)를 얻습니다. 이 토큰은 입찰 요청에서 필수 필드이고 각 사용자와 앱에 대해 고유하므로 다른 사용자나 앱에 대해서는 유효하지 않습니다.
  • 입찰 응답을 읽어들이고 입찰자가 경매에서 낙찰되면 광고를 표시합니다.
  • 노출 및 클릭수를 기록합니다.

입찰 플로의 주요 단계

  1. 입찰자 토큰을 받습니다. Audience Network가 입찰 요청에 응답하려면 이 불투명 문자열이 필요합니다.
  2. 입찰 요청을 보내고 입찰 응답을 받습니다. 이 과정이 입찰 엔드포인트와의 주요 상호작용입니다. 이 단계에서는 ORTB 입찰에 대한 요청을 보내고 유효한 입찰 응답이나 오류를 수신합니다.
  3. 경매를 실행합니다. 경매를 실행하고 입찰 응답 중에서 낙찰자를 선택합니다. 대부분 경매는 실시간 입찰가와 기타 수요 소스의 추정된 CPM(예: 과거 평균 CPM)을 비교합니다. 그 이유는 일부 수요 소스가 실시간 입찰가를 지원하지 않기 때문입니다. 다음 중 하나를 통해 경매를 실행할 수 있습니다.
    • 자체적인 맞춤 경매 로직을 실행하는 내부 서버
    • 타사 경매 서버
    • 사용자 기기의 클라이언트
  4. 입찰 응답으로 광고를 검색합니다. Audience Network가 낙찰되면 입찰 응답의 adm 필드를 사용자 기기의 Audience Network SDK로 전달하여 광고를 읽어들입니다. adm 필드는 실제 광고를 포함하지 않으며, SDK가 Audience Network 서버에서 광고를 검색할 수 있는 정보만 포함합니다.

통합 유형

경매를 실행하면(위의 입찰 플로의 세 번째 단계) 클라이언트 측 또는 서버 측에서 호스팅할 수 있습니다. 아래는 3가지 통합 유형입니다.

서버 간 통합 아키텍처

서버 간 통합에서 경매 서버는 Facebook Audience Network 입찰 엔드포인트와 기타 모든 수요 소스를 호출해 입찰 응답을 받습니다. 그러면 경매 서버가 경매를 실행하고 낙찰되는 입찰가를 선택합니다. 이 경매 서버는 직접 구축한 경매 로직을 실행하는 사내 서버나 Audience Network의 앱 입찰과 통합된 타사 서버가 될 수 있습니다. 이를 통해 서버의 리소스와 이용 가능한 네트워크를 활용해 수요 소스의 입찰 엔드포인트를 호출할 수 있습니다. 또한 클라이언트 업데이트를 하지 않아도 이러한 엔드포인트 통합을 변경할 수 있습니다.


외부 광고 서버 통합

외부 광고 서버 통합을 사용하면 현재의 폭포수식 미디에이션 환경과 앱 입찰을 연결할 수 있습니다. 이는 앱 입찰을 지원하는 수요 소스와 서버 간 통합을 진행한 다음, 경매 낙찰자를 폭포수식 미디에이션 플랫폼으로 전달하는 방식을 사용합니다. 이 플랫폼은 폭포수식 경쟁을 실행하고 전체 낙찰 수요 소스를 선택합니다. 이 통합은 폭포수식 미디에이션과 앱 입찰을 연결하는 중간 다리 역할을 합니다. 이 통합 유형을 사용하면 직접 경매 로직을 작성할 필요가 없습니다.

ORTB 요청/응답 및 지원되는 광고 형식

ORTB 요청

입찰 엔드포인트는 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를 통해 요청할 수 있는 네 가지 유형의 광고를 지원합니다. 여기에는 배너, 네이티브(네이티브 또는 네이티브 배너), 동영상(보상형 또는 인스트림 동영상)과 전면 광고가 있습니다. 참고: 배너, 네이티브 및 동영상 개체는 동시에 선택할 수 없지만 그중 하나는 필수로 포함해야 합니다.

입찰 요청에서 지원되는 광고 형식의 리스트는 다음과 같습니다.

광고 형식 입찰 요청의 매개변수

네이티브

{'id': ${AUCTION_ID}, 'native': { 'h': -1, 'w': -1 }, 'tagid': ${PLACEMENT_ID}}

네이티브 배너

{'id': ${AUCTION_ID}, 'native': { 'h': -1, 'w': -1 }, 'tagid': ${PLACEMENT_ID}}

전면 광고

{'id': ${AUCTION_ID}, 'banner': { 'h': 0, 'w': 0 }, 'tagid': ${PLACEMENT_ID}, 'instl': 1}

보상형 동영상

{'id': ${AUCTION_ID}, 'video': { 'h': 0, 'w': 0, 'ext': { 'videotype': 'rewarded' } }, 'tagid': ${PLACEMENT_ID}}

보상형 전면 광고

{'id': ${AUCTION_ID}, 'video': { 'h': 0, 'w': 0, 'ext': { 'videotype': 'rewarded_interstitial' } }, 'tagid': ${PLACEMENT_ID}}

배너 - 높이: 50

{'id': ${AUCTION_ID}, 'banner': { 'h': 50, 'w': -1 }, 'tagid': ${PLACEMENT_ID}}

배너 - 높이: 250*

{'id': ${AUCTION_ID}, 'banner': { 'h': 250, 'w': -1 }, 'tagid': ${PLACEMENT_ID}}

*이 광고 형식은 수익 관리자에서 배너 또는 중간 직사각형 노출 위치를 만들 수 있습니다.

ORTB 응답

입찰 응답은 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, lurlburl은 입찰 응답에서 제공됩니다. 입찰 응답 예시는 이전 섹션을 참조하세요. 입찰 시간 초과일 경우 대체 보고 경로를 제공합니다.

낙찰 알림

입찰 응답에서 낙찰 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달러를 지불한다는 의미). nurllurl의 정산 가격에는 동일한 단위를 사용해야 합니다. 정산은 퍼블리셔에게 직접 지불됩니다.

경매 역학

입찰은 항상 1차 가격 기준으로 진행됩니다. 즉, 입찰한 가격을 지불하고 전액을 지불한다고 가정하고 입찰합니다. 따라서 다른 입찰자가 입찰 가격보다 적게 지불한다고 가정하고 입찰하는 2차 가격 경매에서는 불리하게 됩니다.

조회 가능성

앱 노출의 경우 최고가 입찰자인지 여부와 관계없이 노출이 조회되었을 때만 가격을 지불합니다.

대기 시간

  • 대기 시간을 최소화하려면 API 호출 1회당 입찰 1회를 요청합니다(즉, 5개 슬롯을 경매할 경우 단일 입찰에 대해 API를 1회씩 총 5회 호출).
  • 지역별 엔드포인트는 제공하지 않습니다. Facebook 인프라는 가장 가까운 데이터 센터로 입찰 요청의 경로를 지정합니다.
  • HTTP/2 지속 연결을 사용합니다.
  • 입찰 요청의 ORTB tmax 필드를 경매 시간 초과로 채우면 Facebook에서 대기 시간과 성과가 균형을 이루는 입찰 전략을 선택합니다. (tmax에 대한 자세한 내용은 위의 입찰 요청 예시 참조)
  • 대기 시간 목표를 충족하기 위해 일부 처리를 연기하여 시간을 렌더링할 수 있습니다(즉, 빠르게 입찰하면 광고 렌더링이 느려지고 느리게 입찰하면 광고가 빠르게 렌더링됨).
  • Facebook은 대기 시간을 개선하기 위해 적극적으로 노력하고 있습니다. 현재 서버 간 입찰에는 시간 초과를 800ms로 지정하는 것이 좋습니다.