본문으로 건너뛰기

네이티브 심플 광고 옵션

광고 요청 타임아웃 (기본값 60초)

광고요청 이후 지정한 시간(초)경과 까지 광고 응답을 얻지 못하면 기존 요청이 무효화되며, GFPAdLoaderDelegate의 adLoader:didFailWithError:responseInfo: 메소드가 호출됩니다.

self.adLoader?.requestTimeoutInterval = ...

GFPNativeSimpleAdRenderingSetting

정보

이 섹션에서는 자주 사용되는 주요 옵션만 다룹니다. GFPNativeSimpleAdRenderingSetting이 제공하는 모든 옵션의 전체 목록은 네이티브 렌더링 옵션을 참고해 주세요.

AdBadge 렌더링 옵션

Native Simple 광고의 'AD' badge 표시 유무에 관련한 옵션입니다. YES로 설정 시 이미지의 우하단에 위치하며, NO로 설정 시 표시되지 않습니다.

위험

AdBadge 렌더링 옵션은 NAMSDK 4.3.0 부터 deprecate 되었습니다. AD마크는 내부 로직에 의해 렌더링됩니다.

let simpleRenderingSetting = GFPNativeSimpleAdRenderingSetting()
simpleRenderingSetting.renderAdBadge = true

let nativeSimpleOption = GFPAdNativeSimpleOptions()
nativeSimpleOption.simpleAdRenderingSetting = simpleRenderingSetting

AdMute 위치 및 터치 영역 옵션

Native Simple 광고의 Ad Choice의 영역 및 터치 영역에 관련한 옵션입니다. YES로 설정 시 Ad Choice의 위치 기준이 전체 뷰로 확대되며 터치 영역 또한 전체 뷰로 확대됩니다. 기본값은 NO입니다.

let simpleRenderingSetting = GFPNativeSimpleAdRenderingSetting()
simpleRenderingSetting.adChoicesPositionInFullAdView = true

let nativeSimpleOption = GFPAdNativeSimpleOptions()
nativeSimpleOption.simpleAdRenderingSetting = simpleRenderingSetting

스타일 설정

InterfaceStyle 전역 설정과 별개로, 특정 화면에서 UI 모드가 다를 때 개별 설정을 통해 아이콘 스타일을 맞출 수 있습니다. '광고 별 설정 > 전역 설정'의 우선 순위에 따라 적용되며, 광고 별 style 설정이 없을 경우 전역 설정을 따라갑니다.

let simpleRenderingSetting = GFPNativeSimpleAdRenderingSetting()
simpleRenderingSetting.adInterfaceStyle = .light
simpleRenderingSetting.adInterfaceStyle = .dark
simpleRenderingSetting.adInterfaceStyle = .system // 아이폰 설정의 style을 따라갑니다.

let nativeSimpleOption = GFPAdNativeSimpleOptions()
nativeSimpleOption.simpleAdRenderingSetting = simpleRenderingSetting

NS 커스텀 배경 설정

NS 광고 배경 스타일 설정

일반적으로 광고 디자인이 정해져 있는 Native Simple 광고에서 배경 정보가 없는 경우 커스텀 배경 스타일을 설정할 수 있는 옵션입니다.

let light = GFPBackgroundOptionAttributes()
light.color = UIColor(red: 237/255.0, green: 240/255.0, blue: 244/255.0, alpha: 1.0)
light.alpha = 0.74
light.cornerRadius = 8
light.leftMargin = 8
light.rightMargin = 8
light.bottomMargin = 0
light.topMargin = 0
light.maxWidth = 414
let dark = GFPBackgroundOptionAttributes()
dark.color = UIColor(red: 237/255.0, green: 240/255.0, blue: 244/255.0, alpha: 1.0)
dark.alpha = 0.74
dark.cornerRadius = 8
dark.leftMargin = 8
dark.rightMargin = 8
dark.bottomMargin = 0
dark.topMargin = 0
dark.maxWidth = 414
let bgOption = GFPBackgroundOption(light: light, dark: dark)
let renderingSetting = GFPNativeSimpleAdRenderingSetting()
renderingSetting.backgroundOption = bgOption
let nativeSimpleOption = GFPAdNativeSimpleOptions()
nativeSimpleOption.simpleAdRenderingSetting = renderingSetting
let adLoader = GFPAdLoader()
adLoader.setNativeSimpleDelegate(self, nativeSimpleOptions: nativeSimpleOption)

네이티브 심플 광고 Lazy Loading

Lazy Loading 활성화

네이티브 심플 렌더링 옵션에서 useLazyMediaLoading 을 활성화하면 광고 로드 콜백은 먼저 호출되고, 미디어 뷰의 이미지 리소스는 이후 비동기로 로딩됩니다.

self.adLoader = GFPAdLoader(unitID: "UnitId", rootViewController: self, adParam: adParam)

let nativeSimpleOption = GFPAdNativeSimpleOptions()
nativeSimpleOption.renderingSetting.useLazyMediaLoading = true
self.adLoader?.setNativeSimpleDelegate(self, nativeSimpleOptions: nativeSimpleOption)

self.adLoader?.delegate = self
self.adLoader?.loadAd()

플레이스홀더 표시

플레이스홀더는 nativeSimpleAdView.nativeAd = nativeSimpleAd 를 설정한 이후에 표시해야 합니다. 이 시점 이후에는 미디어 뷰의 크기와 위치가 결정되어 플레이스홀더가 뷰 영역에 맞게 표시됩니다.

func adLoader(_ unifiedAdLoader: GFPAdLoader!, didReceive nativeSimpleAd: GFPNativeSimpleAd!) {
nativeSimpleAd.delegate = self
nativeSimpleAdView.nativeAd = nativeSimpleAd

if nativeSimpleAd.mediaLoadingState == .loading {
nativeSimpleAdView.mediaView?.showPlaceholder { imageView in
imageView.image = UIImage(named: "my_media_placeholder")
imageView.contentMode = .scaleAspectFill
imageView.clipsToBounds = true
}
}
}

플레이스홀더 제거

Lazy Loading 으로 로딩된 미디어가 성공적으로 로딩되면 SDK가 플레이스홀더를 자동으로 제거합니다. 따라서 일반적인 경우 앱에서 removePlaceholders() 를 직접 호출하지 않아도 됩니다.

미디어 로딩이 실패한 경우 SDK는 플레이스홀더를 자동으로 제거하지 않습니다. 실패 상태의 플레이스홀더를 보여주려면 nativeSimpleAdDidFail(toLoadMedia:) 또는 nativeSimpleAdDidFailToLoadMedia: 에서 새 플레이스홀더를 설정하거나, 필요에 따라 removePlaceholders() 를 직접 호출합니다.

플레이스홀더가 제거되기 전에 페이드 아웃 같은 커스텀 효과를 적용하려면 placeholderWillRemoveHandler 를 설정합니다. 커스텀 효과가 끝난 뒤 반드시 removeHandler 를 호출해야 실제 플레이스홀더가 제거됩니다.

테이블/컬렉션 셀을 재사용하는 경우에는 이전 광고의 플레이스홀더가 남지 않도록 prepareForReuse 등 reset 시점에 removePlaceholders() 호출을 권장합니다.

비동기 미디어 로딩 콜백

미디어 뷰의 비동기 로딩이 성공적으로 완료되면 GFPNativeSimpleAdDelegatenativeSimpleAdDidLoadMedia(_:) 가 호출됩니다.

로딩이 실패하면 nativeSimpleAdDidFail(toLoadMedia:) 가 호출됩니다. 실패 시 기존 플레이스홀더는 자동 삭제되지 않으므로, 실패 상태에 맞는 플레이스홀더를 다시 설정하거나 직접 제거해 주세요.

미디어 asset 의 로딩 상태 변화는 nativeSimpleAd(_:didChangeMediaAssetLoadingState:assetType:) 콜백 또는 mediaLoadingState 프로퍼티로도 확인할 수 있습니다.

// GFPNativeSimpleAdDelegate
func nativeSimpleAdDidLoadMedia(_ nativeSimpleAd: GFPNativeSimpleAd) {
// SDK가 placeholder를 자동 제거합니다.
}

func nativeSimpleAdDidFail(toLoadMedia nativeSimpleAd: GFPNativeSimpleAd) {
if nativeSimpleAd.mediaLoadingState == .failed {
nativeSimpleAdView.mediaView?.showPlaceholder { imageView in
imageView.image = UIImage(named: "my_fallback_media_placeholder")
imageView.contentMode = .scaleAspectFill
imageView.clipsToBounds = true
}
}
}

func nativeSimpleAd(_ nativeSimpleAd: GFPNativeSimpleAd,
didChangeMediaAssetLoadingState state: GFPNativeAdMediaLoadingState,
assetType: GFPNativeAdMediaAssetType) {
if assetType == .media, state == .failed {
// 미디어 로딩 실패 처리
}
}