네이티브 광고

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

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

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

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

기본 요건

항상 테스트 광고로 테스트

앱을 빌드하고 테스트할 때는 실제 프로덕션 광고 대신 테스트 광고를 사용하세요.

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

ca-app-pub-3940256099942544/2247696110

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

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

광고 로드

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

AdLoader 구축

다음 코드에는 네이티브 광고를 로드할 수 있는 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() 메서드가 호출됩니다.

AdLoader로 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 광고는 모두 서로 다릅니다.

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

콜백

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>

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

광고 게재

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