네이티브 광고 고급형

네이티브 광고 고급형은 광고 애셋이 광고를 말합니다. 이 광고는 레이아웃을 구축할 때 사용한 것과 동일한 유형의 보기로 나타나며, 게재되는 사용자 환경의 시각적 디자인과 어울리는 형식으로 표시될 수 있습니다. 코딩 측면에서 보면, 네이티브 광고가 로드될 때 광고 애셋을 포함하는 NativeAd 객체를 앱에서 수신하고, SDK가 아닌 앱이 광고 표시를 처리한다는 뜻입니다.

네이티브 광고에는 네이티브 광고의 시스템 정의 형식: 앱 설치 및 콘텐츠. 앱 설치 광고는 NativeAppInstallAd를 통해 표현되고, 콘텐츠 광고는 NativeContentAd를 통해 표현됩니다. 이러한 객체에는 네이티브 광고의 애셋이 포함되어 있습니다. 본 가이드에는 네이티브 광고 고급형을 Android 앱에 게재하는 방법이 나와 있습니다.

기본 요건

광고 로드

네이티브 광고는 생성 중에 맞춤설정에 필요한 자체 Builder 클래스를 포함하는 AdLoader 클래스를 통해 로드됩니다. AdLoader를 생성하는 동안 여기에 리스너를 추가하면 앱에서 어떤 유형의 네이티브 광고를 수신할 준비가 되었는지 지정합니다. 이렇게 되면 AdLoader가 해당 유형만 요청합니다.

AdLoader 구축

다음 코드에는 요청 한 번에 앱 설치 광고 또는 콘텐츠 광고를 로드할 수 있는 AdLoader를 생성하는 방법이 나와 있습니다.

자바

AdLoader adLoader = new AdLoader.Builder(context, "ca-app-pub-3940256099942544/2247696110")
    .forAppInstallAd(new OnAppInstallAdLoadedListener() {
        @Override
        public void onAppInstallAdLoaded(NativeAppInstallAd appInstallAd) {
            // Show the app install ad.
        }
    })
    .forContentAd(new OnContentAdLoadedListener() {
        @Override
        public void onContentAdLoaded(NativeContentAd contentAd) {
            // Show the content ad.
        }
    })
    .withAdListener(new AdListener() {
        @Override
        public void onAdFailedToLoad(int errorCode) {
            // Handle the failure by logging, altering the UI, and so on.
        }
    })
    .withNativeAdOptions(new NativeAdOptions.Builder()
            // Methods in the NativeAdOptions.Builder class can be
            // used here to specify individual options settings.
            .build())
    .build();

Kotlin

val adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forAppInstallAd { ad : NativeAppInstallAd ->
            // Show the app install ad.
        }
        .forContentAd { ad : NativeContentAd ->
            // Show the content ad.
        }
        .withAdListener(object : AdListener() {
            override fun onAdFailedToLoad(errorCode: Int) {
                // Handle the failure by logging, altering the UI, and so on.
            }
        })
        .withNativeAdOptions(NativeAdOptions.Builder()
                // Methods in the NativeAdOptions.Builder class can be
                // used here to specify individual options settings.
                .build())
        .build()

개별 형식 게재 준비

위의 처음 두 메소드는 AdLoader가 특정 유형의 네이티브 광고를 게재하게 합니다.

forAppInstallAd()
이 메소드를 호출하면 앱 설치 광고를 요청하도록 AdLoader가 구성됩니다. 광고가 성공적으로 로드되면 리스너 객체의 onAppInstallAdLoaded() 메소드가 호출됩니다.
forContentAd()
이 메소드는 콘텐츠 광고를 처리한다는 점을 제외하면 forAppInstallAd()와 동일합니다. 광고가 성공적으로 로드되면 리스너 객체에서 onContentAdLoaded() 메소드를 실행합니다.

AdLoader에 여러 네이티브 광고 형식을 처리하는 핸들러가 있어도 SDK에서는 광고 요청을 한 번만 합니다. Google에서는 게시자 수익을 최대화하는 광고를 선택해 게재합니다.

AdLoader와 함께 AdListener 사용

위에서 설명한 AdLoader를 만드는 중에 withAdListener 함수가 AdListener를 설정합니다.

이 단계는 선택사항입니다. 이 메소드는 AdListener를 유일한 매개변수로 취하며, 광고 수명 주기 이벤트가 발생할 때 이 매개변수를 통해 AdLoader로부터 콜백을 수신합니다.

자바

.withAdListener(new AdListener() {
    // AdListener callbacks like OnAdFailedToLoad, OnAdOpened, OnAdClicked and
    // so on, can be overridden here.
})

Kotlin

.withAdListener(object : AdListener() {
    // AdListener callbacks like OnAdFailedToLoad, OnAdOpened, OnAdClicked and
    // so on, can be overridden here.
})

AdListeners가 네이티브 광고와 작동하는 방식과 배너 및 전면 광고와 작동하는 방식 간에는 중요한 차이가 있습니다. AdLoader에는 자체적인 형식별 리스너 (NativeAppInstallAd.OnAppInstallAdLoadedListener 등)가 있고 광고를 로드되었을 때 이를 사용하므로 네이티브 광고가 성공적으로 로드되면 AdListeneronAdLoaded() 메소드를 호출하지 않습니다.

옵션 설정

withNativeAdOptions()

위에서 설명한 AdLoader 생성에 포함되는 마지막 함수는 또 다른 선택사항 메소드인 withNativeAdOptions()입니다.

자바

.withNativeAdOptions(new NativeAdOptions.Builder()
    // Methods in the NativeAdOptions.Builder class can be
    // used here to specify individual options settings.
    .build()
)

Kotlin

.withNativeAdOptions(NativeAdOptions.Builder()
    // Methods in the NativeAdOptions.Builder class can be
    // used here to specify individual options settings.
    .build()
)

NativeAdOptions 객체를 사용하면 앱에서 광고 요청을 할 때 사용할 특정 옵션을 설정할 수 있습니다. Builder 클래스는 인스턴스를 생성할 때 사용할 다음 메소드를 제공합니다.

setReturnUrlsForImageAssets()

네이티브 광고의 이미지 애셋은 NativeAd.Image 인스턴스를 통해 반환됩니다. 이 인스턴스에는 DrawableUri가 포함됩니다. 이 옵션을 기본값인 false로 설정하면 SDK가 자동으로 이미지 애셋을 가져와서 DrawableUri에 적용합니다. 그러나 true로 설정하면 SDK는 Uri 필드만 채우며, 개발자가 원하는 실제 이미지를 직접 다운로드할 수 있습니다.

setImageOrientation()

일부 광고 소재에서는 다양한 기기 방향에 대응하는 여러 이미지를 사용합니다. NativeAdOptions 방향 상수(ORIENTATION_PORTRAIT, ORIENTATION_LANDSCAPE, ORIENTATION_ANY) 중 하나를 이용해 이 메소드를 호출하면 특정 방향에 적합한 이미지를 요청합니다. 이 메소드가 호출되지 않으면 ORIENTATION_LANDSCAPE의 기본값이 사용됩니다.

setRequestMultipleImages()

일부 이미지 애셋에는 이미지 하나가 아니라 여러 개의 이미지가 포함되어 있습니다. 이 값을 true로 설정하면 앱에서 둘 이상의 이미지가 포함된 애셋에 대해 모든 이미지를 표시할 준비가 되었다는 메시지가 표시됩니다. 기본값인 false로 설정하면 일련의 이미지가 포함된 애셋에 대해 첫 번째 이미지만 제공하도록 앱이 SDK에 지시합니다.

AdLoader를 만들 때 withNativeAdOptions를 전혀 호출하지 않으면 각 옵션의 기본값이 사용됩니다.

setAdChoicesPlacement()

기본적으로 AdChoices 오버레이는 오른쪽 상단으로 설정됩니다. 이 속성을 다음 중 하나로 설정하여 오버레이가 렌더링되는 위치를 앱이 변경할 수 있습니다.

  • ADCHOICES_TOP_LEFT
  • ADCHOICES_TOP_RIGHT
  • ADCHOICES_BOTTOM_RIGHT
  • ADCHOICES_BOTTOM_LEFT
setVideoOptions()

앱에서 이 메소드를 이용해 네이티브 광고의 일부로 반환되는 동영상 애셋에 대한 옵션을 설정할 수 있습니다. 자세한 내용은 본 가이드의 네이티브 동영상 섹션을 참조하세요.

광고 로드

AdLoader를 만들었으면 이를 이용해 광고를 로드하세요. 이 작업은 loadAd()loadAds() 메소드를 이용해 처리할 수 있습니다.

참고: 현재 loadAds() 메소드는 AdMob 광고에 대해서만 작동합니다. 미디에이션된 광고를 처리할 때는 loadAd()를 사용하세요.

loadAd() 메소드는 광고 1개에 대한 요청을 보냅니다.

loadAd()
이 메소드는 광고 1개에 대한 요청을 보냅니다.

자바

adLoader.loadAd(new AdRequest.Builder().build());

Kotlin

adLoader.loadAd(AdRequest.Builder().build())
loadAds()
이 메소드는 여러 광고(최대 5개)에 대한 요청을 보냅니다.

자바

adLoader.loadAds(new AdRequest.Builder().build(), 3);

Kotlin

adLoader.loadAds(AdRequest.Builder().build(), 3)

두 메소드 모두 AdRequest 객체를 첫 번째 매개변수로 사용합니다. 이는 배너 및 전면 광고에서 사용하는 AdRequest 클래스와 동일하며, AdRequest 클래스의 메소드를 이용해 다른 광고 형식에서처럼 타겟팅 정보를 추가할 수 있습니다.

loadAds()는 SDK가 요청에 대해 로드해야 하는 광고 수를 추가 매개변수로 사용합니다. 최대값은 5이며, SDK가 요청된 수의 광고를 정확하게 반환하지 않을 수 있습니다. loadAds() 호출에서 여러 광고가 반환될 때에는 각기 다른 광고가 반환됩니다.

loadAd() 호출 후 위에 정의된 리스너 메소드로 콜백을 한 번 하여 네이티브 광고 객체를 전달하거나 오류를 보고합니다.

loadAds() 호출 후에는 이러한 콜백을 여러 번 합니다(한 번 이상, 요청된 광고 수 이하). 앱에서 여러 광고를 요청하면 콜백 구현에서 AdLoader.isLoading()을 호출하여 로드 과정이 완료되었는지를 확인해야 합니다.

다음은 onAppInstallAdLoaded() 콜백에서 isLoading()을 확인하는 방법의 예입니다.

자바

final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forAppInstallAd(new NativeAppInstallAd.OnAppInstallAdLoadedListener() {
    @Override
    public void onAppInstallAdLoaded(NativeAppInstallAd ad) {
        ...
        // some code that displays the app install ad.
        ...
        if (adLoader.isLoading()) {
            // The AdLoader is still loading ads.
            // Expect more adLoaded or onAdFailedToLoad callbacks.
        } else {
            // The AdLoader has finished loading ads.
        }
    }
}).build();

adLoader.loadAds(new AdRequest.Builder().build(), 3);

Kotlin

lateinit var adLoader: AdLoader
...
adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
    .forAppInstallAd {
        ...
        // some code that displays the app install ad.
        ...        if (adLoader.isLoading) {
            // The AdLoader is still loading ads.
            // Expect more adLoaded or onAdFailedToLoad callbacks.
        } else {
            // The AdLoader has finished loading ads.
        }
    }.build()

adLoader.loadAds(AdRequest.Builder().build(), 3)

항상 테스트 광고로 테스트

앱을 제작하고 테스트할 때 실제 광고 대신 테스트 광고를 사용하세요. 이렇게 하지 않으면 계정이 정지될 수 있습니다.

테스트 광고를 로드하는 가장 쉬운 방법은 Android에서 네이티브 광고 고급형의 테스트 전용 광고 단위 ID를 사용하는 것입니다.

ca-app-pub-3940256099942544/2247696110

이 ID는 모든 요청에 대해 테스트 광고를 반환하도록 특별히 구성되었으며, 코딩, 테스트 및 디버깅 중에 앱에서 자유롭게 사용할 수 있습니다. 앱을 게시하기 전에 이 ID를 자체 광고 단위 ID로 바꿔야 합니다.

모바일 광고 SDK의 테스트 광고가 작동하는 방식에 대해 자세히 알아보려면 테스트 광고를 참조하세요.

광고 요청 시점

네이티브 광고를 표시하는 애플리케이션은 광고가 실제로 표시되는 시점을 미리 요청할 수 있습니다. 일반적으로 이러한 방식을 권장합니다. 예를 들어 네이티브 광고가 포함된 목록을 표시하는 앱은 전체 목록에 대한 네이티브 광고를 로드할 수 있습니다. 이 경우 일부는 사용자가 보기를 스크롤한 후에만 표시되고, 일부는 전혀 표시되지 않을 수 있습니다.

광고 표시

네이티브 광고가 로드되면 SDK가 해당 광고 형식의 리스너를 실행합니다. 그런 다음 앱이 광고를 표시하지만, 즉시 표시하지는 않아도 됩니다. 시스템 정의 광고 형식을 보다 쉽게 표시할 수 있도록 SDK에서 아래와 같은 유용한 리소스를 제공합니다.

광고 보기 클래스

시스템 정의 형식별로 앱 설치 광고에 해당하는 광고 보기 클래스인 NativeAppInstallAdView와 콘텐츠 광고에 해당하는 보기 클래스인 NativeContentAdView가 있습니다. 이러한 광고 보기 클래스는 게시자가 해당 형식 광고의 루트로 사용해야 하는 ViewGroup입니다. 예를 들어 NativeContentAdView 하나는 콘텐츠 광고에 하나에 해당합니다. 광고의 애셋(예: 스크린샷 애셋을 표시하는 ImageView)을 표시하는 데 사용되는 각 보기가 NativeContentAdView 객체의 하위 요소여야 합니다.

다음은 LinearLayout을 사용하여 애셋 보기를 표시하는 콘텐츠 광고 보기 계층 구조의 예입니다.

<com.google.android.gms.ads.formats.NativeContentAdView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <LinearLayout
    android:orientation="vertical"
    ... >
        <LinearLayout
        android:orientation="horizontal"
        ... >
          <TextView
            android:id="@+id/contentad_headline"
            ... />
         </LinearLayout>

         // Other assets such as image or media view, call to action, etc follow.
         ...
    </LinearLayout>
</com.google.android.gms.ads.formats.NativeContentAdView>

다음은 NativeContentAdView를 만들고 여기에 NativeContentAd를 채우는 코드 스니펫의 예입니다.

자바

AdLoader.Builder builder = new AdLoader.Builder(this, "<your ad unit ID>")
    .forContentAd(new NativeContentAd.OnContentAdLoadedListener() {
        @Override
        public void onContentAdLoaded(NativeContentAd nativeContentAd) {
            // Assumes you have a placeholder FrameLayout in your View layout
            // (with id fl_adplaceholder) where the ad is to be placed.
            FrameLayout frameLayout =
                findViewById(R.id.fl_adplaceholder);
            // Assumes that your ad layout is in a file call ad_unified.xml
            // in the res/layout folder
            NativeContentAdView adView = (NativeContentAdView) getLayoutInflater()
                .inflate(R.layout.ad_content, null);
            // This method sets the text, images and the native ad, etc into the ad
            // view.
            populateContentAdView(nativeContentAd, adView);
            frameLayout.removeAllViews();
            frameLayout.addView(adView);
        }
    });

Kotlin

val builder = AdLoader.Builder(this, "<your ad unit ID>")
    .forContentAd { contentAd ->
        // Assumes that your ad layout is in a file call ad_content.xml
        // in the res/layout folder
        val adView = layoutInflater
                .inflate(R.layout.ad_content, null) as NativeContentAdView
        // This method sets the text, images and the native ad, etc into the ad
        // view.
        populateNativeContentAdView(contentAd, adView)
        // Assumes you have a placeholder FrameLayout in your View layout
        // (with id ad_frame) where the ad is to be placed.
        ad_frame.removeAllViews()
        ad_frame.addView(adView)
    }

광고 보기 클래스에서도 개별 애셋에 사용되는 보기를 등록하는 데 사용되는 메소드와 NativeAd 객체 자체의 등록을 위한 메소드를 제공합니다. 이 방법으로 보기를 등록하면 다음과 같은 작업을 SDK가 자동으로 처리할 수 있습니다.

  • 클릭수 기록
  • 노출수 기록(첫 픽셀이 화면에 표시될 때를 노출로 간주)

AdChoices 오버레이

AdChoices 오버레이는 SDK가 각 광고 보기에 추가합니다. 네이티브 광고 보기에서 원하는 모서리 부분에 AdChoices 로고가 자동으로 삽입될 공간을 남겨두세요. 또한 AdChoices 오버레이가 잘 보일 수 있도록 배경색과 이미지를 적절히 선택하세요. 오버레이의 외형과 기능에 대해 자세히 알아보려면 네이티브 광고 고급형 필드에 대한 설명을 참조하세요.

광고 표시

보기가 광고임을 나타내는 광고 표시를 사용해야 합니다. 이와 관련된 정책 가이드라인을 참조하세요.

예시 코드

다음은 시스템 정의 네이티브 광고 형식을 표시하는 방법입니다.

  1. 적절한 광고 보기 클래스의 인스턴스를 만듭니다.
  2. 표시될 광고 애셋마다 다음과 같이 합니다.
    1. 광고 객체의 애셋으로 애셋 보기를 채웁니다.
    2. ViewGroup 클래스와 함께 애셋 보기를 등록합니다.
  3. 네이티브 광고 레이아웃에 대용량 매체 애셋이 포함되어 있으면 MediaView를 등록합니다.
  4. ViewGroup 클래스와 함께 광고 객체를 등록합니다.

다음은 NativeAppInstallAd를 표시하는 함수의 예입니다.

자바

private void displayAppInstallAd(ViewGroup parent, NativeAppInstallAd ad) {

    // Inflate a layout and add it to the parent ViewGroup.
    LayoutInflater inflater = (LayoutInflater) parent.getContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    NativeAppInstallAdView adView = (NativeAppInstallAdView) inflater
            .inflate(R.layout.my_ad_layout, parent);

    // Locate the view that will hold the headline, set its text, and call the
    // NativeAppInstallAdView's setHeadlineView method to register it.
    TextView headlineView = adView.findViewById<TextView>(R.id.ad_headline);
    headlineView.setText(ad.getHeadline());
    adView.setHeadlineView(headlineView);

    ...
    // Repeat the above process for the other assets in the NativeAppInstallAd
    // using additional view objects (Buttons, ImageViews, etc).
    ...

    // If the app is using a MediaView, it should be
    // instantiated and passed to setMediaView. This view is a little different
    // in that the asset is populated automatically, so there's one less step.
    MediaView mediaView = (MediaView) adView.findViewById(R.id.ad_media);
    adView.setMediaView(mediaView);

    // Call the NativeAppInstallAdView's setNativeAd method to register the
    // NativeAdObject.
    adView.setNativeAd(ad);

    // Ensure that the parent view doesn't already contain an ad view.
    parent.removeAllViews();

    // Place the AdView into the parent.
    parent.addView(adView);
}

Kotlin

fun displayAppInstallAd(parent: ViewGroup, ad: NativeAppInstallAd) {

    // Inflate a layout and add it to the parent ViewGroup.
    val inflater = parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)
            as LayoutInflater
    val adView = inflater.inflate(R.layout.my_ad_layout, parent) as NativeAppInstallAdView

    // Locate the view that will hold the headline, set its text, and use the
    // NativeAppInstallAdView's headlineView property to register it.
    val headlineView = adView.findViewById<TextView>(R.id.ad_headline)
    headlineView.text = ad.headline
    adView.headlineView = headlineView

    ...
    // Repeat the above process for the other assets in the NativeAppInstallAd using
    // additional view objects (Buttons, ImageViews, etc).
    ...

    // If the app is using a MediaView to display video, it should be instantiated
    // and assign to the mediaView property. This view is a little different in that
    // the asset is populated automatically, so there's one less step.
    val mediaView = adView.findViewById<MediaView>(R.id.ad_media)
    adView.mediaView = mediaView

    // Call the NativeAppInstallAdView's setNativeAd method to register the
    // NativeAdObject.
    adView.setNativeAd(ad)

    // Ensure that the parent view doesn't already contain an ad view.
    parent.removeAllViews()

    // Place the AdView into the parent.
    parent.addView(adView)
}

그럼 개별 작업을 살펴보겠습니다.

레이아웃 확장

자바

LayoutInflater inflater = (LayoutInflater) parent.getContext()
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
NativeAppInstallAdView adView = (NativeAppInstallAdView) inflater
        .inflate(R.layout.my_ad_layout, parent);

Kotlin

val inflater = parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)
        as LayoutInflater
val adView = inflater.inflate(R.layout.my_ad_layout, parent) as NativeAppInstallAdView
이 예에서는 앱 설치 광고를 표시한 다음 NativeAppInstallAdView에 대한 참조의 위치를 찾는 보기가 포함된 XML 레이아웃을 확장했습니다. 조각이나 활동에 NativeAppInstallAdView이 있거나 레이아웃 파일을 사용하지 않고 동적으로 인스턴스를 만든 경우, 기존의 객체를 재사용할 수 있습니다.

애셋 보기 게시 및 등록

이 샘플 코드에서는 광고 제목을 표시하는 데 사용되는 보기의 위치를 찾고, 광고 객체가 제공하는 문자열 애셋을 이용해 문구를 설정하며, 이를 다음 객체와 함께 등록합니다. NativeAppInstallAdView 객체

자바

TextView headlineView = adView.findViewById<TextView>(R.id.ad_headline);
headlineView.setText(ad.getHeadline());
adView.setHeadlineView(headlineView);

Kotlin

val headlineView = adView.findViewById<TextView>(R.id.ad_headline)
headlineView.text = ad.headline
adView.headlineView = headlineView

앱에서 표시하는 네이티브 광고 객체가 제공하는 애셋별로 보기의 위치를 찾고, 값을 설정하며, 이를 광고 보기 클래스와 함께 등록하는 과정을 반복해야 합니다.

클릭 처리

다음은 클릭 이벤트를 관찰하기 위해 광고 리스너를 사용하는 스니펫의 예입니다.

자바

.withAdListener(new AdListener() {
    @Override onAdClicked() {
      // Log the click event or other custom behavior.
    }
})

Kotlin

.withAdListener(object : AdListener() {
    override fun onAdClicked() {
      // Log the click event or other custom behavior.
    }
})

MediaView 등록

MediaView는 기본 매체 애셋을 표시하도록 만들어진 특수 View이며, 다음과 같이 작동합니다.

  • 로드된 광고에 동영상 애셋이 있으면 동영상에 버퍼가 발생하면서 MediaView 내에서 재생되기 시작합니다.
  • 로드된 광고에 동영상 애셋이 없으면 첫 번째 이미지 애셋이 다운로드되어 MediaView 안에 들어갑니다.

MediaView는 XML 레이아웃에서 정의하거나 동적으로 생성할 수 있는 View이며, 다른 애셋 보기와 마찬가지로 NativeAdView의 보기 계층 구조 안에 들어가야 합니다. MediaView를 사용하는 앱에서는 애셋을 채우지 않아도 되지만, 다음과 같이 NativeAdView와 함께 등록해야 합니다.

자바

MediaView mediaView = adView.findViewById(R.id.ad_media);
adView.setMediaView(mediaView);

Kotlin

adView.mediaView = adView.findViewById(R.id.ad_media)

네이티브 광고 객체 등록

마지막 단계이며, 네이티브 광고 객체를 표시하는 보기와 함께 네이티브 광고 객체를 등록합니다.

자바

adView.setNativeAd(ad);

Kotlin

adView.setNativeAd(ad)

네이티브 동영상

일부 네이티브 광고에는 이미지, 텍스트, 숫자와 함께 동영상 애셋도 포함됩니다. 동영상 애셋은 일부 광고에만 포함되며, 앱에서 이를 표시하지 않아도 됩니다.

모바일 광고 SDK는 동영상의 구성 및 표시를 단순화하기 위해 다음과 같은 동영상 관련 클래스를 제공합니다.

VideoOptions

VideoOptions 클래스를 사용하면 앱에서 네이티브 동영상 애셋이 작동하는 방식을 구성할 수 있습니다. VideoOptions 객체는 AdLoader를 만들 때 사용되는 NativeAdOptions 객체에 할당해야 합니다.

자바

VideoOptions videoOptions = new VideoOptions.Builder()
        .setStartMuted(false)
        .build();

NativeAdOptions adOptions = new NativeAdOptions.Builder()
        .setVideoOptions(videoOptions)
        .build();

AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forAppInstallAd( ... )
        .forContentAd( ... )
        .withNativeAdOptions(adOptions)
        .build();

Kotlin

val videoOptions = VideoOptions.Builder()
        .setStartMuted(false)
        .build()

val adOptions = NativeAdOptions.Builder()
        .setVideoOptions(videoOptions)
        .build()

val adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forAppInstallAd( ... )
        .forContentAd( ... )
        .withNativeAdOptions(adOptions)
        .build()

현재 VideoOptions.Builder 클래스에서는 동영상 애셋이 음소거된 상태로 시작할지를 SDK에 알리는 setStartMuted() 메소드 하나를 제공합니다. 기본값은 true입니다.

VideoController

VideoController 클래스는 동영상 애셋에 대한 정보를 검색하는 데 사용됩니다. 앱이 NativeAppInstallAd에서 컨트롤러에 대한 참조를 가져올 때 getVideoController() 메소드를 호출합니다.

자바

VideoController vc = myNativeAd.getVideoController();

Kotlin

val vc = myNativeAd.videoController

이 메소드는 광고에 동영상 에셋이 없는 경우에도 항상 VideoController 객체를 반환합니다.

VideoController는 동영상 상태를 쿼리하는 방법으로 다음을 제공합니다.

  • hasVideoContent(): 광고에 동영상 애셋이 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
  • getAspectRatio(): 동영상의 가로세로 비율(너비/높이)을 반환합니다. 동영상 애셋이 없으면 0을 반환합니다.

앱에서 VideoController.VideoLifecycleCallbacks 클래스를 이용해 동영상 애셋의 수명 주기에 이벤트가 발생할 때 알림을 받을 수도 있습니다.

자바

VideoController vc = nativeAd.getVideoController();

vc.setVideoLifecycleCallbacks(new VideoController.VideoLifecycleCallbacks() {
    public void onVideoEnd() {
        // Here apps can take action knowing video playback is finished.
        // It's always a good idea to wait for playback to complete before
        // replacing or refreshing a native ad, for example.
        super.onVideoEnd();
    }
});

Kotlin

val vc = nativeAd.videoController

vc.setVideoLifecycleCallbacks(object : VideoController.VideoLifecycleCallbacks() {
    override fun onVideoEnd() {
        // Here apps can take action knowing video playback is finished.
        // It's always a good idea to wait for playback to complete before
        // replacing or refreshing a native ad, for example.
        super.onVideoEnd()
    }
})

광고 삭제

네이티브 광고 게재가 끝나면 광고가 올바르게 폐기되도록 광고를 삭제해야 합니다.

자바

nativeAd.destroy();

Kotlin

nativeAd.destroy()

추가 리소스

GitHub의 샘플

Codelab

다음 단계