네이티브 심플 광고 옵션
광고 요청 타임아웃 (기본값 60초)
광고요청 이후 지정한 시간(초)경과 까지 광고 응답을 얻지 못하면 기존 요청이 무효화되며, GFPAdLoaderDelegate의 adLoader:didFailWithError:responseInfo: 메소드가 호출됩니다.
- Swift
- Objective-C
self.adLoader?.requestTimeoutInterval = ...
self.adLoader.requestTimeoutInterval = ...
GFPNativeSimpleAdRenderingSetting
이 섹션에서는 자주 사용되는 주요 옵션만 다룹니다. GFPNativeSimpleAdRenderingSetting이 제공하는 모든 옵션의 전체 목록은 네이티브 렌더링 옵션을 참고해 주세요.
AdBadge 렌더링 옵션
Native Simple 광고의 'AD' badge 표시 유무에 관련한 옵션입니다. YES로 설정 시 이미지의 우하단에 위치하며, NO로 설정 시 표시되지 않습니다.
AdBadge 렌더링 옵션은 NAMSDK 4.3.0 부터 deprecate 되었습니다. AD마크는 내부 로직에 의해 렌더링됩니다.
- Swift
- Objective-C
let simpleRenderingSetting = GFPNativeSimpleAdRenderingSetting()
simpleRenderingSetting.renderAdBadge = true
let nativeSimpleOption = GFPAdNativeSimpleOptions()
nativeSimpleOption.simpleAdRenderingSetting = simpleRenderingSetting
GFPNativeSimpleAdRenderingSetting *simpleAdRenderingSetting = [[GFPNativeSimpleAdRenderingSetting alloc] init];
simpleAdRenderingSetting.renderAdBadge = YES;
GFPAdNativeSimpleOptions *nativeSimpleOptions = [[GFPAdNativeSimpleOptions alloc] init];
nativeSimpleOptions.simpleAdRenderingSetting = simpleAdRenderingSetting;
AdMute 위치 및 터치 영역 옵션
Native Simple 광고의 Ad Choice의 영역 및 터치 영역에 관련한 옵션입니다. YES로 설정 시 Ad Choice의 위치 기준이 전체 뷰로 확대되며 터치 영역 또한 전체 뷰로 확대됩니다. 기본값은 NO입니다.
- Swift
- Objective-C
let simpleRenderingSetting = GFPNativeSimpleAdRenderingSetting()
simpleRenderingSetting.adChoicesPositionInFullAdView = true
let nativeSimpleOption = GFPAdNativeSimpleOptions()
nativeSimpleOption.simpleAdRenderingSetting = simpleRenderingSetting
GFPNativeSimpleAdRenderingSetting *simpleAdRenderingSetting = [[GFPNativeSimpleAdRenderingSetting alloc] init];
simpleAdRenderingSetting.adChoicesPositionInFullAdView = YES;
GFPAdNativeSimpleOptions *nativeSimpleOptions = [[GFPAdNativeSimpleOptions alloc] init];
nativeSimpleOptions.simpleAdRenderingSetting = simpleAdRenderingSetting;
스타일 설정
InterfaceStyle 전역 설정과 별개로, 특정 화면에서 UI 모드가 다를 때 개별 설정을 통해 아이콘 스타일을 맞출 수 있습니다. '광고 별 설정 > 전역 설정'의 우선 순위에 따라 적용되며, 광고 별 style 설정이 없을 경우 전역 설정을 따라갑니다.
- Swift
- Objective-C
let simpleRenderingSetting = GFPNativeSimpleAdRenderingSetting()
simpleRenderingSetting.adInterfaceStyle = .light
simpleRenderingSetting.adInterfaceStyle = .dark
simpleRenderingSetting.adInterfaceStyle = .system // 아이폰 설정의 style을 따라갑니다.
let nativeSimpleOption = GFPAdNativeSimpleOptions()
nativeSimpleOption.simpleAdRenderingSetting = simpleRenderingSetting
GFPNativeAdRenderingSetting *simpleAdRenderingSetting = [[GFPNativeAdRenderingSetting alloc] init];
simpleAdRenderingSetting.adInterfaceStyle = GFPAdInterfaceStyleLight;
simpleAdRenderingSetting.adInterfaceStyle = GFPAdInterfaceStyleDark;
simpleAdRenderingSetting.adInterfaceStyle = GFPAdInterfaceStyleSystem; // 아이폰 설정의 style을 따라갑니다.
GFPAdNativeSimpleOptions *nativeSimpleOptions = [[GFPAdNativeSimpleOptions alloc] init];
nativeSimpleOptions.simpleAdRenderingSetting = simpleAdRenderingSetting;
NS 커스텀 배경 설정
NS 광고 배경 스타일 설정
일반적으로 광고 디자인이 정해져 있는 Native Simple 광고에서 배경 정보가 없는 경우 커스텀 배경 스타일을 설정할 수 있는 옵션입니다.
- Swift
- Objective-C
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)
GFPBackgroundOptionAttributes *light = [[GFPBackgroundOptionAttributes alloc] init];
light.color = [UIColor colorWithRed: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;
GFPBackgroundOptionAttributes *dark = [[GFPBackgroundOptionAttributes alloc] init];
dark.color = [UIColor colorWithRed: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;
GFPBackgroundOption *bgOption = [[GFPBackgroundOption alloc] initWithLight:light dark:dark];
GFPNativeSimpleAdRenderingSetting *renderingSetting = [[GFPNativeSimpleAdRenderingSetting alloc] init];
renderingSetting.backgroundOption = bgOption;
GFPAdNativeSimpleOptions *nativeSimpleOption = [[GFPAdNativeSimpleOptions alloc] init];
nativeSimpleOption.simpleAdRenderingSetting = renderingSetting;
GFPAdLoader *adLoader = [[GFPAdLoader alloc] init];
[adLoader setNativeSimpleDelegate:self nativeSimpleOptions:nativeSimpleOption];
네이티브 심플 광고 Lazy Loading
Lazy Loading 활성화
네이티브 심플 렌더링 옵션에서 lazy loading 을 활성화 시키면 네이티브 광고 뷰 객체가 먼저
GFPAdLoaderDelegate.adLoader(_ unifiedAdLoader: GFPAdLoader!, didReceive nativeSimpleAd: GFPNativeSimpleAd!)
으로 주어지며, 미디어 뷰의 이미지는 비동기로 로딩 됩니다.
- Swift
- Objective-C
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()
self.adLoader = [[GFPAdLoader alloc] initWithUnitID:self.unitID
rootViewController:self
adParam:adParam];
GFPAdNativeSimpleOptions *nativeSimpleOptions = [[GFPAdNativeSimpleOptions alloc] init];
nativeSimpleOptions.renderingSetting.useLazyMediaLoading = YES;
[self.adLoader setNativeSimpleDelegate:self nativeSimpleOptions:nativeSimpleOptions];
// 광고 요청
self.adLoader.delegate = self;
[self.adLoader loadAd];
플레이스홀더 표시
미디어가 비동기로 로딩 되는 동안 플레이스 홀더를 보여줄 수 있습니다. 플레이스홀더는 광고 뷰 위에 바로 나타나며, 뷰 요소에 크기가 맞도록 자동 조절됩니다.
- Swift
- Objective-C
func adLoader(_ unifiedAdLoader: GFPAdLoader!, didReceive nativeAdSimpleAd: GFPNativeSimpleAd!) {
self.nativeSimpleAdView.nativeAd = nativeSimpleAd
self.nativeSimpleAdView.mediaView?.showPlaceholder { imageView in
imageView.image = UIImage(named: "my_media_placeholder")
imageView.contentMode = .scaleAspectFill
imageView.clipsToBounds = true
}
- (void)adLoader:(GFPAdLoader *)unifiedAdLoader didReceiveNativeSimpleAd:(GFPNativeSimpleAd *)nativeSimpleAd {
self.nativeSimpleAdView.nativeAd = nativeSimpleAd
[self.nativeSimpleAdView.mediaView showPlaceholderWith:^(UIImageView *imageView) {
imageView.image = [UIImage imageNamed:@"my_media_placeholder"];
imageView.contentMode = UIViewContentModeScaleAspectFill;
imageView.clipsToBounds = YES;
}];
}
비동기 미디어 로딩 콜백
미디어 뷰, 아이콘 뷰 등 모든 미디어의 비동기 로딩이 완료되면
GFPNativeSimpleAdDelegate 의
nativeSimpleAdDidLoadMedia(_:) 가 호출됩니다.
하나라도 로딩이 실패하는 경우
nativeSimpleAdDidFail(toLoadMedia:) 가 호출됩니다.
- Swift
- Objective-C
// GFPNativeSimpleAdDelegate
func nativeSimpleAdDidLoadMedia(_ nativeSimpleAd: GFPNativeSimpleAd) {
self.nativeSimpleAdView.removePlaceholders() // Optional for safety.
}
func nativeSimpleAdDidFail(toLoadMedia nativeSimpleAd: GFPNativeSimpleAd) {
// Example showing new placeholders on failure.
self.nativeSimpleAdView.mediaView?.showPlaceholder { imageView in
imageView.image = UIImage(named: "my_fallback_media_placeholder")
imageView.contentMode = .scaleAspectFill
imageView.clipsToBounds = true
}
}
// GFPNativeSimpleAdDelegate
- (void)nativeSimpleAdDidLoadMedia:(GFPNativeSimpleAd *)nativeSimpleAd {
[self.nativeSimpleAdView removePlaceholders]; // Optional for safety.
}
- (void)nativeSimpleAdDidFailToLoadMedia:(GFPNativeSimpleAd *)nativeSimpleAd {
// Example showing new placeholders on failure.
[self.nativeSimpleAdView.mediaView showPlaceholderWith:^(UIImageView *imageView) {
imageView.image = [UIImage imageNamed:@"my_fallback_media_placeholder"];
imageView.contentMode = UIViewContentModeScaleAspectFill;
imageView.clipsToBounds = YES;
}];
}