네이티브 광고

네이티브 광고는 플랫폼 고유의 UI 구성요소를 통해 사용자에게 표시되는 광고 애셋입니다. 이 광고는 레이아웃을 구축할 때 사용한 것과 동일한 유형의 보기로 나타나며, 앱의 시각적 디자인과 어울리는 형식으로 표시될 수 있습니다.

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

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

이 페이지에서는 SDK를 사용하여 네이티브 광고

기본 요건

항상 테스트 광고로 테스트

앱을 빌드하고 테스트할 때는 실제 프로덕션 광고가 아닌 테스트 광고를 사용해야 합니다.

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

/6499/example/native

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

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

광고 로드 중

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

AdLoader 구축

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

자바

AdLoader adLoader = new AdLoader.Builder(context, "/6499/example/native")
    .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, "/6499/example/native")
    .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() 메서드는 NativeAd 형식의 AdLoader를 준비합니다. 광고가 성공적으로 로드되면 리스너 객체의 onNativeAdLoaded() 메서드가 호출됩니다.

AdLoader로 AdListener 설정 (선택사항)

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

자바

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

Kotlin

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

광고 요청

AdLoader를 만들었으면 이를 사용하여 광고를 요청해야 합니다. 이 작업은 loadAd()loadAds()의 두 가지 방법으로 사용할 수 있습니다.

loadAd()

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

자바

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

Kotlin

adLoader.loadAd(AdManagerAdRequest.Builder().build())

loadAds()

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

자바

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

Kotlin

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

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

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

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

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

현재 미디에이션을 사용하도록 설정한 경우 loadAds() 메서드를 사용하지 마세요. 여러 네이티브 광고에 대한 요청은 미디에이션을 위해 구성된 광고 단위 ID에 사용할 수 없기 때문입니다.

콜백

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

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

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

자바

final AdLoader adLoader = new AdLoader.Builder(this, "/6499/example/native")
        .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 AdManagerAdRequest.Builder().build(), 3);

Kotlin

lateinit var adLoader: AdLoader
...
adLoader = AdLoader.Builder(this, "/6499/example/native")
    .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(AdManagerAdRequest.Builder().build(), 3)

리소스 해제

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

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

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

또 다른 주요 확인은 활동이 제거되었는지, 삭제된 경우 반환된 광고에서 destroy()를 호출하고 즉시 반환되는 것입니다.

자바

final AdLoader adLoader = new AdLoader.Builder(this, "/6499/example/native")
        .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, "/6499/example/native")
    .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()를 호출하지 마세요.

동영상 광고의 하드웨어 가속

네이티브 광고 보기에서 동영상 광고를 게재하려면 하드웨어 가속을 사용 설정해야 합니다.

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

하드웨어 가속 사용 설정

하드웨어 가속이 전역적으로 사용 설정된 상태에서 앱이 제대로 작동하지 않으면 개별 활동에 맞게 제어할 수 있습니다. 하드웨어 가속을 사용하거나 사용 중지하려면 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>

하드웨어 가속을 제어하는 옵션에 관한 자세한 내용은 HW 가속 가이드를 참고하세요. 활동이 사용 중지된 경우에는 개별 광고 보기에서 하드웨어 가속을 사용할 수 없으므로 활동 자체에 하드웨어 가속이 사용 설정되어 있어야 합니다.

광고 게재

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