네이티브 광고

네이티브 광고는 앱 측에서 레이아웃을 정의할 수 있는 광고 유형입니다. 이 기능을 통해 앱 디자인의 특성을 고려하여 광고의 시각적 스타일과 배치를 변경할 수 있습니다.

네이티브 광고는 광고 경험을 향상합니다. 그 결과 사용자 관심을 잃지 않으면서 광고를 더 많이 표시할 수 있습니다. 그러면 장기적으로 광고를 통한 최대 수익이 보장됩니다.

광고 렌더링은 광고 성능과 폼질을 높이는 네이티브 플랫폼 도구로 수행됩니다.

표시 예

이 가이드는 iOS 앱에 네이티브 광고를 통합하는 방법을 보여줍니다. 코드 예시와 지침 외에도 형식별 권장 사항 및 추가 리소스에 대한 링크가 포함되어 있습니다.

사전 준비

  1. 빠른 시작에 설명된 SDK 통합 단계를 수행하세요.
  2. 광고 SDK를 미리 초기화하세요.
  3. 최신 Yandex Mobile Ads SDK 버전을 사용하고 있는지 확인하세요. 중재를 사용하는 경우, 최신 통합 빌드 버전을 실행하고 있는지도 확인하세요.

실행

네이티브 광고 통합을 위한 주요 단계:

  • NativeAdLoader를 생성 및 구성합니다.
  • 로더에 대한 대리자를 설정하고 필요한 대리자 메서드를 구현합니다.
  • 광고를 로드합니다.
  • Adfox를 사용하는 경우 추가 설정을 전달합니다.
  • 로드된 광고를 표시합니다.

네이티브 광고 통합의 특징

  1. Yandex Mobile Ads SDK 메서드에 대한 모든 호출은 메인 스레드에서 이루어져야 합니다.

  2. func nativeAdLoader(_ loader: NativeAdLoader, didFailLoadingWithError error: Error) 메서드에서 오류를 수신할 때 새로운 광고를 로드하려고 시도하지 않는 것을 적극 권장합니다. func nativeAdLoader(_ loader: NativeAdLoader, didFailLoadingWithError error: Error)에서 광고를 로드해야 하는 경우, 네트워크 연결 제약으로 인해 반복적으로 광고 요청이 실패하지 않도록 광고 로드 재시도를 제한하세요.

  3. 광고와 그 로더에 대한 강한 참조를 광고와 상호작용하는 화면의 수명 주기 동안 유지하는 것이 좋습니다.

  4. 광고 콘텐츠를 기반으로 광고 컨테이너의 크기를 계산하는 것을 권장합니다.

    광고가 로드되면 모든 자산을 렌더링해야 합니다. 광고에서 사용할 수 있는 구성 요소 목록을 NativeAd 광고 객체에서 가져올 수 있습니다.

  5. 동영상이 포함된 광고는 일반적으로 CTR이 높아 광고 수익이 증가합니다. 동영상 광고를 표시하려면 광고 컨테이너와 MediaView 구성 요소의 크기가 최소 300x160dp(밀도 독립 화소)여야 합니다.

  6. 가능한 자산의 전체 세트를 포함하는 레이아웃을 사용하는 것을 권장합니다. Yandex의 경험에 따르면, 전체 자산 세트를 포함하는 레이아웃의 전환이 더 효과적입니다.

광고 로드

네이티브 광고를 로드하려면 NativeAdLoader 객체를 생성하세요.

광고 요청 매개변수는 NativeAdRequestConfiguration 클래스 객체를 사용해 구성됩니다. 요청 매개변수로 광고 단위 ID를 전달해야 합니다. 이미지 로딩 방법, 나이, 성별 및 광고 선택 품질을 향상할 수 있는 기타 데이터를 구성할 수도 있습니다. 광고 타겟팅 섹션에서 자세한 내용을 확인하세요.

광고 로딩 결과에 대한 알림을 받으려면 NativeAdLoaderDelegate 프로토콜을 구현하고 이전에 생성된 NativeAdLoader의 대리자로 설정합니다.

광고를 로드하려면 loadAd(with: NativeAdRequestConfiguration) 메서드를 호출합니다.

다음 예시는 View Controller에서 네이티브 광고를 로드하는 방법을 보여줍니다.

final class CustomNativeViewController: UIViewController {
    private var adLoader: NativeAdLoader?

    override func viewDidLoad() {
        adLoader = NativeAdLoader()
        adLoader?.delegate = self
    }

    private func loadNativeAd() {
        let requestConfiguration = NativeAdRequestConfiguration(adUnitID: "R-M-XXXXX-YY")
        adLoader?.loadAd(with: requestConfiguration)
    }
}

extension CustomNativeViewController: NativeAdLoaderDelegate {
    func nativeAdLoader(_ loader: NativeAdLoader, didLoad ad: NativeAd) {
         //  네이티브 광고가 로드되었음을 알립니다
    }

    func nativeAdLoader(_ loader: NativeAdLoader, didFailLoadingWithError error: Error) {
        //  광고 로드에 실패했음을 알립니다
    }
}

광고 렌더링

광고가 로드되면 모든 자산을 렌더링해야 합니다. 광고에서 사용할 수 있는 구성 요소 목록을 NativeAd 광고 객체에서 가져올 수 있습니다.

광고 레이아웃을 구성하는 방법은 두 가지입니다.

  • 템플릿을 사용한 레이아웃.
  • 네이티브 광고 레이아웃 수동 설정.

템플릿을 사용한 레이아웃

네이티브 광고를 다루는 가장 쉬운 방법은 레이아웃을 위한 표준 템플릿을 사용하는 것입니다. 기본 버전에서는 몇 줄의 코드만 필요합니다.

템플릿에는 이미 필요한 자산의 전체 세트가 포함되어 있으며, 이들의 상호 배치를 정의합니다. 템플릿은 지원되는 모든 유형의 네이티브 광고와 함께 작동합니다.

final class NativeTemplateViewController: UIViewController, NativeAdDelegate {
    private let adView = NativeBannerView()

    // ...

    private lazy var adLoader: NativeAdLoader = {
        let adLoader = NativeAdLoader()
        adLoader.delegate = self
        return adLoader
    }()

    override func viewDidLoad() {
        setupUI()
        loadNativeAd()
    }

    private func loadNativeAd() {
        let requestConfiguration = NativeAdRequestConfiguration(adUnitID: "demo-native-content-yandex")
        adLoader.loadAd(with: requestConfiguration)
    }

    private func bindNativeAd(_ ad: NativeAd) {
        ad.delegate = self
        adView.ad = ad
    }

    private func setupUI() {
	// ...
    }
}

extension NativeTemplateViewController: NativeAdLoaderDelegate {
    func nativeAdLoader(_ loader: NativeAdLoader, didLoad ad: NativeAd) {
        bindNativeAd(ad)
    }

    func nativeAdLoader(_ loader: NativeAdLoader, didFailLoadingWithError error: Error) {
        // ...
    }
 }

네이티브 광고 템플릿을 사용자 정의할 수 있습니다. 템플릿을 사용한 레이아웃 설정에서 이에 대한 자세한 내용을 확인할 수 있습니다.

네이티브 광고 레이아웃 수동 설정

템플릿 설정만으로 원하는 효과를 얻을 수 없는 경우, 네이티브 광고를 수동으로 구성할 수 있습니다.

이 방법을 통해 네이티브 광고 레이아웃을 수동으로 생성하여 광고 자산의 상호 배치를 정의할 수 있습니다. 광고에는 필수 및 선택적 표시 자산이 모두 포함될 수 있습니다. 전체 목록은 네이티브 광고 자산에서 찾을 수 있습니다.

Совет

가능한 자산의 전체 세트를 포함하는 레이아웃을 사용하는 것을 권장합니다. 실제로 이러한 레이아웃은 전환율에 긍정적인 영향을 미칩니다.

네이티브 광고의 표시를 수동으로 구성하려면:

  1. YMANativeAdView 클래스에 대한 사용자 지정 view를 생성합니다.

  2. 사용자 정의 요소의 배치를 구성하여 구성 요소를 표시합니다.

  3. 이 사용자 정의 요소를 해당 YMANativeAdView 속성에 연결합니다.

    final class CustomNativeAdView: YMANativeAdView {
        // ...
    
        init() {
            super.init(frame: CGRect())
            setupUI()
            bindAssets()
        }
    
        private func bindViews() {
            titleLabel = customTitleLabel
            domainLabel = customDomainLabel
            warningLabel = customWarningLabel
            sponsoredLabel = customSponsoredLabel
            feedbackButton = customFeedbackButton
            callToActionButton = customCallToActionButton
            mediaView = customMediaView
            priceLabel = customPriceLabel
            reviewCountLabel = customReviewCountLabel
            ratingView = customRatingView
            bodyLabel = customBodyLabel
            iconImageView = customIconImageView
        }
    
        private func setupUI() {
        // ...
        }
    }
    

    Примечание

    사용자 정의 요소를 필수 구성 요소의 YMANativeAdView 속성에 연결하지 않으면 광고가 표시되지 않습니다.

  4. 사용자 정의 viewNativeAd 광고 객체에 연결하여 NativeAdLoaderDelegate 대리자의 nativeAdLoader(_ loader: NativeAdLoader, didLoad ad: NativeAd) 메서드에서 네이티브 광고를 표시합니다. 이를 위해 NativeAd 객체에 대해 bind(with adView: YMANativeAdView) 메서드를 호출합니다.

    final class NativeCustomViewController: UIViewController, NativeAdDelegate {
        private let adView = NativeCustomAdView()
    
        // ...
    
        private lazy var adLoader: NativeAdLoader = {
            let adLoader = NativeAdLoader()
            adLoader.delegate = self
            return adLoader
        }()
    
        override func viewDidLoad() {
            super.viewDidLoad()
            setupUI()
            loadNativeAd()
        }
    
        private func loadNativeAd() {
            let requestConfiguration = NativeAdRequestConfiguration(adUnitID: "demo-native-app-yandex")
            adLoader.loadAd(with: requestConfiguration)
        }
    
        private func bindNativeAd(_ ad: NativeAd) {
            ad.delegate = self
            do {
                try ad.bind(with: adView)
            } catch {
                // ...
            }
        }
    
        private func setupUI() {
        // ...
        }
    }
    
    extension NativeCustomViewController: NativeAdLoaderDelegate {
        func nativeAdLoader(_ loader: NativeAdLoader, didLoad ad: NativeAd) {
            bindNativeAd(ad)
        }
    
        func nativeAdLoader(_ loader: NativeAdLoader, didFailLoadingWithError error: Error) {
            // ...
        }
    }
    

여러 광고 로드

Yandex Mobile Ads SDK를 사용하면 한 번의 요청으로 여러 광고를 로드할 수 있습니다(최대 9개 광고).

Примечание

AdUnitID에 대한 데모 광고 단위 demo-native-bulk-yandex를 사용하세요. 지원되는 플랫폼은 데모 광고 단위 페이지에서 확인할 수 있습니다.

  1. 네이티브 광고를 가져오려면 NativeBulkAdLoader 클래스의 인스턴스를 생성합니다.

  2. NativeAdRequestConfiguration 클래스를 사용하여 nativeAdRequestConfiguration을 생성합니다. 요청 매개변수로 광고 단위 ID, 이미지 로드 방법, 나이, 성별 및 광고 선택 품질을 향상할 수 있는 기타 데이터를 사용할 수 있습니다.

  3. NativeBulkAdLoaderDelegate 프로토콜을 구현하는 광고 검색을 위한 대리자를 설정합니다.

  4. 광고 로딩 과정을 추적하려면 NativeBulkAdLoaderDelegate: 프로토콜 메서드( -nativeBulkAdLoader:didLoadAds:-nativeBulkAdLoader:didFailLoadingWithError:)를 구현합니다.

  5. 로더에 요청 구성 및 요청된 광고 수( adsCount 매개변수)를 전송합니다.

// 요청 구성 생성
let requestConfiguration = MutableNativeAdRequestConfiguration(adUnitID: AdUnitID)

// 로더 생성
adLoader = NativeBulkAdLoader()
adLoader.delegate = self

// 로더에 요청 구성 및 요청된 광고의 수 전달
adLoader.loadAds(with: requestConfiguration, adsCount: adsCount)

// 대리인 메서드 구현

func nativeBulkAdLoader(_ nativeBulkAdLoader: NativeBulkAdLoader, didLoad ads: [NativeAd]) {
    // ..
    // id<NativeAd>이(가) 있는 객체를 개별적으로 처리
}

Примечание

대량 광고 요청을 통해 여러 개의 개별 광고를 선택할 수 있습니다.

대량 요청으로 반환된 광고 어레이에는 0개에서 adsCount개 사이의 NativeAd 객체가 포함될 수 있습니다. 수신된 모든 광고 객체는 위의 네이티브 광고 레이아웃 방식을 사용하여 서로 독립적으로 렌더링할 수 있습니다.

네이티브 광고 통합 테스트

광고 테스트를 위한 데모 광고 단위 사용

네이티브 광고 통합 및 앱 자체를 테스트하기 위해 테스트 광고를 사용하는 것이 좋습니다.

모든 광고 요청에 대해 테스트 광고가 반환되도록 보장하기 위해 특별한 데모 광고 배치 ID를 생성했습니다. 광고 통합을 확인하는 데 사용하세요.

텍스트 및 이미지 광고를 위한 데모 adUnitId: demo-native-content-yandex.

모바일 앱 광고를 위한 데모 adUnitId: demo-native-app-yandex.

Важно

앱을 스토어에 게시하기 전에 데모 광고 단위 ID를 Partner Interface에서 가져온 실제 ID로 교체해야 합니다.

광고 통합 테스트

네이티브 콘솔 도구를 사용하여 광고 통합을 테스트할 수 있습니다.

자세한 로그를 보려면 YMAMobileAds 클래스의 enableLogging 메서드를 호출하세요.

YMAMobileAds.enableLogging()

SDK 로그를 보려면 콘솔 도구로 이동하여 Subsystem = com.mobile.ads.ads.sdk를 설정하세요. 카테고리와 오류 수준별로 로그를 필터링할 수도 있습니다.

광고 통합에 문제가 있는 경우, 문제에 대한 상세한 보고서와 해결 방법에 대한 권장 사항을 받게 됩니다.

네이티브 광고 통합 표시기

Примечание

기본적으로 이 표시기는 시뮬레이터 모드(장치 유형 DeviceTypeSimulator)에서만 표시됩니다. 장치 유형은 DeviceType에서 확인할 수 있습니다.

네이티브 광고 통합 시 오류가 발생하면 시뮬레이터 모드에서 광고 상단에 표시기가 나타납니다. 표시기를 클릭하면 오류의 원인을 이해하는 데 도움이 되는 디버깅 정보가 포함된 메시지를 볼 수 있습니다. 표시기를 다시 클릭하면 메시지가 숨겨집니다.

실제 장치에서도 표시기를 활성화하려면 | enableVisibilityErrorIndicatorForDeviceType: 메서드에서 DeviceTypeHardware DeviceTypeSimulator 값을 전달하세요.

MobileAds.enableVisibilityErrorIndicator(for: [.hardware, .simulator])

표시기를 비활성화하려면 enableVisibilityErrorIndicatorForDeviceType: 메서드에서 값 DeviceTypeNone을 전달하세요.

MobileAds.enableVisibilityErrorIndicator(for: [])

추가 리소스