본문으로 건너뛰기

헤더 비딩

헤더비딩

PrebidMobile, Amazon Publisher Services(이하 "APS"라고 칭함)을 통한 HeaderBidding을 지원합니다.

정보

PrebidMobile, APS 연동은 사전입찰 결과를 파라미터로 전달하고 낙찰 소재를 SDK가 렌더링하는 방식입니다. 낙찰 시 Prebid SDK가 직접 소재를 렌더링하는 방식은 Magnite Prebid 연동을 참고해주세요. (since 8.24.0)

각 연동은 아래 버전을 기준으로 샘플 개발 및 검증이 완료되었습니다.

  • PrebidMobile: 1.5
  • APS: 3.4.6
  • Magnite Prebid: PrebidMobile 3.3.1
source 'https://github.com/CocoaPods/Specs.git'

target 'MyApplication' do
pod 'PrebidMobile', '1.5'
pod 'AmazonPublisherServicesSDK', '3.4.6'
end

PrebidMobile 연동

PrebidMobile을 통한 헤더비딩 연동은 배너 광고에 한해 지원됩니다.

아래 가이드는 NAMSDK 연동과 관련된 내용을 다루고 있습니다. PrebidMobile에 대한 자세한 내용은 공식 가이드를 참고해주시기 바랍니다.

Prebid 설정

Prebid.shared.prebidServerAccountId = @"accountId 입력";
//testAccountId: "bfa84af2-bd16-4d35-96ad-31c6bb888df0"

let bannerAdUnit = BannerAdUnit(configId: "configId 입력", size: CGSize(width: 300, height: 250))
//testConfigId: "6ace8c7d-88c0-4623-8117-75bc3f0a2e45"

Prebid 정보 요청

  • NSMutableDictionary를 파라미터로 fetchDemandWithAdObject:completion: 을 호출합니다.
  • fetch 성공 시 생성한 Dictionary에 "hb_"의 prefix를 가진 데이터가 추가됩니다.
let requestPrebid = NSMutableDictionary.init()

bannerAdUnit.fetchDemand(adObject: requestPrebid) { (resultCode) in
if resultCode == ResultCode.prebidDemandFetchSuccess {
//TODO: adParam 설정 후 banner 광고 요청
}
}

AdParam 설정 & 배너 로드

  • 2번의 스텝에서 얻은 Dictionary 데이터를 AdParam의 prebidHBParam에 설정합니다.
  • AdParam을 GFPAdLoader 혹은 GFPBannerView에 설정한 후 광고를 요청합니다.
  • AdParam에 대한 자세한 내용은 광고 요청 정보 가이드를 참고해주세요.
let adParam = GFPAdParam()
adParam.gender = .female
adParam.yearOfBirth = 1995

if let prebidParam = requestPrebid as? [String : String] {
adParam.prebidHBParam = prebidParam
}

//TODO: 광고 요청

APS 연동

APS을 통한 헤더비딩 연동은 배너 광고에 한해 지원됩니다.

아래 가이드는 NAMSDK 연동과 관련된 내용을 다루고 있습니다. APS에 대한 자세한 내용은 공식 가이드를 참고해주시기 바랍니다.

APS 설정

NAMSDK 에서는 MRAID 1.0, 2.0, 3.0 스펙 을 지원합니다. 아래의 MRAID 설정은 반드시 따라주시기 바랍니다.

DTBAds.sharedInstance().setAppKey("appKey 입력")
//testAppKey: "c5f20fe6e37146b08749d09bb2b6a4dd"

DTBAds.sharedInstance().mraidPolicy = CUSTOM_MRAID
DTBAds.sharedInstance().mraidCustomVersions = ["1.0", "2.0", "3.0"]

APS 정보 요청

자세한 내용은 APS 공식 가이드를 참고해주세요.

let dtbAdSize = DTBAdSize(bannerAdSizeWithWidth: 320, height: 50, andSlotUUID: "slotUUID 입력")
//testSlotUUID: "88e6293b-0bf0-43fc-947b-925babe7bf3f"

let dtbAdLoader = DTBAdLoader()
dtbAdLoader.setAdSizes([dtbAdSize])
dtbAdLoader.loadAd(self)
func onFailure(_ error: DTBAdError) {
/**Please implement the logic to send ad request without our parameters if you want to
show ads from other ad networks when Amazon ad request fails**/
}

func onSuccess(_ adResponse: DTBAdResponse!) {
/**Build the ad request to your ad server. This portion will differ depending on your
ad server**/
}

AdParam 설정 & 배너 로드

  • DTBAdCallback의 onSuccess 수신 시, APS 정보를 GFPAPSAdParam에 세팅 후, AdParam의 apsParam에 설정합니다.
  • AdParam을 GFPBannerView에 설정한 후 광고를 요청합니다.
    • (주의) [광고 요청 전, 이전 데이터 초기화 필요] AdParam을 재사용 한다면, onFailure 수신 시 AdParam의 apsParam을 리셋해주어야 합니다.
func onSuccess(_ adResponse: DTBAdResponse!) {
let adParam = GFPAdParam()
adParam.gender = .female
adParam.yearOfBirth = 1995

let apsParam = GFPAPSAdParam()
apsParam.crid = adResponse.crid
apsParam.size = CGSize(width: adResponse.adSize.width, height: adResponse.adSize.height)

if let customTargeting = adResponse.customTargeting().map as? [String : NSObject] {
apsParam.apsHBParam = customTargeting
}

apsParam.skAdNetworkParams = adResponse.skAdNetworkParams;

adParam.apsParam = apsParam;

//TODO: banner 광고 요청
}

MRAID 3.0 Unload

MRAID 3.0의 Unload 호출 시에 발생하는 이벤트를 알리기 위해 다음 메서드가 GFPBannerViewDelegate에 추가되었습니다.

func bannerShouldUnload(_ bannerView: GFPBannerView) {
// ...
}

Magnite Prebid 연동 (since 8.24.0)

Magnite Prebid는 Prebid Rendered 방식의 헤더비딩입니다. 사전입찰 결과(winning bid)를 광고 요청 시 전달하고, GFP 서버에서 낙찰될 경우 Prebid SDK가 직접 소재를 렌더링합니다.

Magnite Prebid를 통한 헤더비딩 연동은 배너 광고에 한해 지원됩니다.

Prebid SDK에 대한 자세한 내용은 공식 가이드를 참고해주시기 바랍니다.

의존성 추가

target 'MyApplication' do
pod 'PrebidMobile', '3.3.1'
pod 'NAMSDKMediationMagnitePrebid'
end
정보

NAMSDK와 NAMSDKMediationMagnitePrebid 간 버전 호환성은 미디에이션 네트워크 버전에서 확인 후 적용 부탁드립니다.

Prebid SDK 초기화

Prebid SDK의 초기화는 매체 앱에서 진행해야 합니다. serverURL과 accountId는 Magnite로부터 발급받은 값을 사용합니다.

Prebid.shared.prebidServerAccountId = "accountId 입력"

try? Prebid.initializeSDK(serverURL: "serverURL 입력") { status, error in
// 초기화 결과 확인
}

사전 입찰 요청

Prebid SDK의 MediationBannerAdUnit을 통해 사전 입찰을 요청합니다. 자세한 내용은 Prebid 공식 가이드를 참고해주세요.

주의

아래 내용은 PrebidMobile 3.3.1 기준으로 작성된 예제이며, 관련된 코드는 매체에서 직접 관리합니다.

Prebid SDK API의 사용 방법 및 변경 사항은 Prebid 공식 가이드를 확인해주세요.

  • PrebidMediationDelegate를 구현하여 사전 입찰 결과(setUpAdObject(with:)로 전달되는 values)를 보관합니다.
  • MediationBannerAdUnit 생성 후 fetchDemand를 호출합니다.
  • fetch 성공 시 values의 PBMMediationAdUnitBidKey, PBMMediationTargetingInfoKey 키로 winning bid와 targeting keywords를 얻습니다.
  • fetchDemand 콜백 시점까지 MediationBannerAdUnit과 delegate 인스턴스가 해제되지 않도록 강한 참조로 보관해야 합니다.
import PrebidMobile

final class ExampleMagnitePrebidBidder: NSObject, PrebidMediationDelegate {
private(set) var values: [String: Any]?
private let placeholderAdView = UIView()

func setUpAdObject(with values: [String: Any]) -> Bool {
self.values = values
return true
}

func cleanUpAdObject() {
values = nil
}

func getAdView() -> UIView? {
return placeholderAdView
}
}
let configId = "configId 입력"

self.bidder = ExampleMagnitePrebidBidder()
self.adUnit = MediationBannerAdUnit(configID: configId,
size: CGSize(width: 320, height: 50),
mediationDelegate: self.bidder)
self.adUnit.adFormat = .banner

self.adUnit.fetchDemand { [weak self] resultCode in
guard let self = self else { return }

if resultCode == .prebidDemandFetchSuccess {
let bid = self.bidder.values?[PBMMediationAdUnitBidKey] as? Bid
let keywords = self.bidder.values?[PBMMediationTargetingInfoKey] as? [String: String]
//TODO: adParam 설정 후 banner 광고 요청
}
}

AdParam 설정 & 배너 로드

  • 사전 입찰 성공 시 GFPMagnitePrebidAdParam에 configId, targetingKeywords, winning bid를 설정합니다.
  • 생성한 파라미터를 AdParam의 magnitePrebidParam에 설정한 후 광고를 요청합니다.
  • 사전 입찰 실패 시에는 magnitePrebidParam 설정 없이 광고를 요청하면 일반 워터폴로 진행됩니다.
let magnitePrebidParam = GFPMagnitePrebidAdParam()
magnitePrebidParam.configId = configId
magnitePrebidParam.targetingKeywords = keywords
magnitePrebidParam.winningBid = bid

let adParam = GFPAdParam()
adParam.magnitePrebidParam = magnitePrebidParam

//TODO: 광고 요청