네이티브 광고

네이티브 광고는 플랫폼 고유의 UI 구성요소를 통해 사용자에게 표시되는 광고 애셋입니다. 이러한 뷰는 레이아웃을 빌드할 때 사용한 것과 동일한 유형의 뷰를 사용하며 앱의 시각적 디자인과 일치하는 형식으로 표시될 수 있습니다.

네이티브 광고가 로드되면 애셋이 포함된 광고 객체를 앱에서 수신하며, Google 모바일 광고 SDK가 아닌 앱에서 광고 표시를 처리합니다.

일반적으로 네이티브 광고의 성공적인 구현은 SDK를 사용하여 광고를 로드하는 작업과 앱에 광고 콘텐츠를 표시하는 작업으로 구성됩니다.

이 페이지에서는 SDK를 사용하여 네이티브 광고를 로드하는 방법을 설명합니다.

기본 요건

항상 테스트 광고로 테스트

앱을 제작하고 테스트할 때는 운영 중인 실제 광고 대신 테스트 광고를 사용하세요.

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

ca-app-pub-3940256099942544/2247696110

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

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

광고 로드

네이티브 광고는 AdLoader 클래스로 로드되며, 이 클래스에는 생성 중에 맞춤설정할 수 있는 자체 Builder 클래스가 있습니다. AdLoader를 빌드할 때 여기에 리스너를 추가하여 앱에서 어떤 유형의 네이티브 광고를 수신할 준비가 되었는지 지정합니다. 그러면 AdLoader는 해당 유형만 요청합니다.

PPID 구축

다음 코드에는 네이티브 광고를 로드할 수 있는 AdLoader를 만드는 방법이 나와 있습니다.

Java

AdLoader adLoader = new AdLoader.Builder(context, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
        @Override
        public void onNativeAdLoaded(NativeAd nativeAd) {
            // Show the ad.
        }
    })
    .withAdListener(new AdListener() {
        @Override
        public void onAdFailedToLoad(LoadAdError adError) {
            // 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")
    .forNativeAd { ad : NativeAd ->
        // Show the ad.
    }
    .withAdListener(object : AdListener() {
        override fun onAdFailedToLoad(adError: LoadAdError) {
            // 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()

forNativeAd() 메서드는 AdLoaderNativeAd 형식에 맞게 준비합니다. 광고가 성공적으로 로드되면 리스너 객체의 onNativeAdLoaded() 메서드가 호출됩니다.

PPID로 AdListener 설정 (선택사항)

AdLoader를 생성할 때 withAdListener 함수는 로더의 AdListener를 설정합니다. 이 메서드는 AdListener를 유일한 매개변수로 사용하며, 광고 수명 주기 이벤트가 발생할 때 이 매개변수를 통해 AdLoader에서 콜백을 수신합니다.

Java

.withAdListener(new AdListener() {
    // AdListener callbacks can be overridden here.
})

Kotlin

.withAdListener(object : AdListener() {
    // AdListener callbacks can be overridden here.
})

광고 요청

AdLoader 빌드를 완료한 후에는 이를 사용하여 광고를 요청해야 합니다. loadAd()loadAds()의 두 가지 메서드를 사용할 수 있습니다.

loadAd()

이 메서드는 단일 광고에 대한 요청을 보냅니다.

Java

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

Kotlin

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

loadAds()

이 메서드는 여러 광고 (최대 5개)에 대한 요청을 보냅니다.

Java

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

Kotlin

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

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

여러 광고 로드 (선택사항)

loadAds() 메서드는 SDK가 요청에 대해 로드해야 하는 광고 수를 추가 매개변수를 사용합니다. 이 개수의 한도는 5이며, SDK가 요청된 수의 광고를 정확하게 반환하지 않을 수도 있습니다.

반환된 Google 광고는 모두 서로 다르지만, 예약된 인벤토리 또는 서드 파티 구매자의 광고가 고유하지 않을 수도 있습니다.

현재 미디에이션을 위해 구성된 광고 단위 ID에는 여러 네이티브 광고에 대한 요청이 작동하지 않으므로 미디에이션을 사용하는 경우에는 loadAds() 메서드를 사용하지 마세요.

콜백

loadAd() 호출 후에는 이전에 정의한 리스너 메서드에 콜백이 한 번 실행되어 네이티브 광고 객체를 게재하거나 오류를 보고합니다.

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

다음은 onNativeAdLoaded() 콜백에서 isLoading()를 확인하는 방법을 보여주는 예입니다.

Java

final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
    @Override
    public void onNativeAdLoaded(NativeAd nativeAd) {
        ...
        // some code that displays the 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")
    .forNativeAd {
        ...
        // some code that displays the 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)

리소스 해제

로드된 네이티브 광고에는 destroy() 메서드를 사용해야 합니다. 이렇게 하면 사용된 리소스가 해제되고 메모리 누수가 방지됩니다.

활동의 onDestroy() 메서드에서 모든 NativeAd 참조가 제거되었는지 확인합니다.

onNativeAdLoaded 콜백에서 역참조될 기존 네이티브 광고를 삭제해야 합니다.

또 다른 주요 확인사항은 활동이 소멸되었는지 여부입니다. 소멸된 경우 반환된 광고에 대해 destroy()를 호출하고 즉시 반환합니다.

Java

final AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
        .forNativeAd(new NativeAd.OnNativeAdLoadedListener() {
    @Override
    public void onNativeAdLoaded(NativeAd nativeAd) {
        // If this callback occurs after the activity is destroyed, you
        // must call destroy and return or you may get a memory leak.
        // Note `isDestroyed()` is a method on Activity.
        if (isDestroyed()) {
            nativeAd.destroy();
            return;
        }
        ...
    }
}).build();

Kotlin

lateinit var adLoader: AdLoader
...
adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
    .forNativeAd { nativeAd ->
        // If this callback occurs after the activity is destroyed, you
        // must call destroy and return or you may get a memory leak.
        // Note `isDestroyed` is a method on Activity.
        if (isDestroyed) {
            nativeAd.destroy()
            return@forNativeAd
        }
        ...
    }.build()

권장사항

광고를 로드할 때는 다음 규칙을 따르세요.

  • 목록에 네이티브 광고를 사용하는 앱은 광고 목록을 사전 캐시해야 합니다.

  • 광고를 미리 캐시하는 경우, 캐시를 지우고 1시간 후에 새로고침합니다.

  • 첫 번째 요청이 로드가 완료될 때까지 AdLoader에서 loadAd() 또는 loadAds() 를 호출하지 마세요.

동영상 광고 하드웨어 가속

네이티브 광고 보기에서 동영상 광고가 성공적으로 표시되려면 하드웨어 가속을 사용해야 합니다.

하드웨어 가속은 기본적으로 사용 설정되어 있지만 일부 앱에서는 사용 중지할 수도 있습니다. 앱에 이 경우 광고를 사용하는 Activity 클래스에 하드웨어 가속을 사용하는 것이 좋습니다.

하드웨어 가속 사용 설정

하드웨어 가속이 전역적으로 사용 설정된 상태에서 앱이 제대로 작동하지 않으면 개별 활동에 맞게 제어할 수도 있습니다. 하드웨어 가속을 사용 설정하거나 중지하려면 AndroidManifest.xml<application><activity> 요소에 android:hardwareAccelerated 속성을 사용합니다. 다음 예에서는 전체 앱에 하드웨어 가속을 사용 설정하고 하나의 활동에는 하드웨어 가속을 사용 중지합니다.

<application android:hardwareAccelerated="true">
    <!-- For activities that use ads, hardwareAcceleration should be true. -->
    <activity android:hardwareAccelerated="true" />
    <!-- For activities that don't use ads, hardwareAcceleration can be false. -->
    <activity android:hardwareAccelerated="false" />
</application>

하드웨어 가속을 설정하는 옵션에 대해 자세히 알아보려면 하드웨어 가속 관련 가이드를 참고하세요. 활동이 사용 중지된 경우 개별 광고 보기에 하드웨어 가속을 사용 설정할 수 없으므로 활동 자체에서 하드웨어 가속을 사용 설정해야 합니다.

광고 표시

광고를 로드한 후에는 사용자에게 광고를 표시하기만 하면 됩니다. 광고 게재 방식을 알아보려면 네이티브 광고 고급형 가이드를 참고하세요.