배너 광고
배너 광고는 앱 레이아웃의 일부를 차지하는 사각형 모양의 광고형식으로서 종종 화면 상단 또는 하단에 배치되거나 스크롤 가능한 콘텐츠 내에 인라인으로 배치됩니다.
시작하기 앞서
- 광고 호출을 위해 Ad Unit ID 가 필요합니다.
- NAM Admin 을 통해 광고 공급자 설정, Inventory 설정, 광고 유닛 등록 등의 과정을 마무리하여 주시기 바랍니다.
- 관련 내용은 NAM 관리자에게 문의 부탁드립니다.
- 광고를 오버레이로 덮는 다른 View 가 있을 경우, 경우에 따라서 노출 측정이 제대로 되지 않아 성과 지표 측정에 불이익이 있을 수 있습니다.
[Step 1] NAM SDK 적용 완료
연동 가이드를 참고해 주세요.
이하 내용은 NAM SDK 적용이 완료된 상태를 가정하고 진행합니다.
[Step 2] 광고 뷰 컨테이너 정의
먼저, 배너 광고의 컨테이너 역할을 할 ViewGroup
을 레이아웃 XML 파일에 추가해야 합니다.
아래 예제에서는 banner_ad_container
라는 id 로 배너 광고가 게재될 ViewGroup 을 선언했습니다.
<!-- Banner ad view container -->
<FrameLayout
android:id="@+id/banner_ad_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_alignParentBottom="true"/>
[Step 3] 레이아웃에 GfpBannerAdView 추가
GfpBannerAdView 를 만들어 앱의 레이아웃에 추가합니다. GfpBannerAdView 생성시에는 광고 요청을 위한 필수 정보에 해당되는 Ad Unit ID
를 비롯하여, 단일 광고 요청에 대한 런타임 정보(예: 타겟팅 정보) 가 포함된 AdParam 객체를 생성 후 매개변수로 전달해야만 합니다.
AdParam 에 대한 자세한 설명은 광고 요청 정보를 참고해 주시기 바랍니다.
- Kotlin
- Java
// Create a new ad parameter.
val adParam = AdParam.Builder()
.setAdUnitId("YOUR_AD_UNIT_ID")
...
.build()
// Create a new banner ad view.
val bannerAdView = GfpBannerAdView(this, adParam)
// Replace ad container with new banner ad view.
bannerAdContainer.removeAllViews();
bannerAdContainer.addView(bannerAdView)
// Create a new ad parameter.
AdParam adParam = new AdParam.Builder()
.setAdUnitId("YOUR_AD_UNIT_ID")
...
.build();
// Create a new banner ad view.
GfpBannerAdView bannerAdView = new GfpBannerAdView(this, adParam);
// Replace ad container with new banner ad view.
bannerAdContainer.removeAllViews();
bannerAdContainer.addView(bannerAdView)
[Step 4] 추가 맞춤 설정 (선택사항)
배너 광고에서는 필수는 아니지만 선택적으로 배너 광고의 레이아웃 타입 설정 및 단일 광고 요청에 대한 타임아웃 설정 등 더 나은 광고 경험을 제공할 수 있는 추가 맞춤 설정을 제공합니다. 자세한 내용은 추가 맞춤 설정 가이드를 참고해주시기 바랍니다.
[Step 5] 광고 이벤트 수신 설정
배너 광고의 생명 주기(예: 로드, 클릭, 노출, 에러, ...) 에 대한 이벤트는 BannerAdListener 를 통해서 수신할 수 있습니다.
광고 이벤트 수신시, 전달되는 GfpBannerAd 매개변수를 통해서 이벤트가 발생한 광고의 다양한 정보를 알 수 있습니다. 예를 들어 GfpBannerAd.getAdProviderName() 의 경우 현재 로드된 광고를 제공하는 광고 공급자 이름을 알 수 있습니다.
올바른 이벤트 전달을 위해서 배너 광고를 로드하기 전에 BannerAdListener 를 설정하는 것이 좋습니다.
- Kotlin
- Java
bannerAdView.setAdListener(object : BannerAdListener() {
override fun onAdLoaded(ad: GfpBannerAd) {
// Called when an banner ad is loaded.
}
override fun onAdClicked(ad: GfpBannerAd) {
// Called when an banner ad is clicked.
}
override fun onAdImpression(ad: GfpBannerAd) {
// Called when an impression is recorded for an banner ad.
}
override fun onAdMuted(ad: GfpBannerAd) {
// (Only for NDA module) Called when an banner ad is muted.
}
override fun onAdMetaChanged(ad: GfpBannerAd, params: Map<String, String>) {
// Called when the meta data of the banner ad changes.
}
override fun onAdSizeChanged(ad: GfpBannerAd) {
// Called when the banner ad is changed in size.
}
override fun onError(ad: GfpBannerAd, error: GfpError) {
// Called when an error happened while the banner ad is
// attempting to load or rendering an ad.
}
})
bannerAdView.setAdListener(new BannerAdListener() {
@Override
public void onAdLoaded(GfpBannerAd ad) {
// Called when an banner ad is loaded.
}
@Override
public void onAdClicked(GfpBannerAd ad) {
// Called when an banner ad is clicked.
}
@Override
public void onAdImpression(GfpBannerAd ad) {
// Called when an impression is recorded for an banner ad.
}
@Override
public void onAdMuted(GfpBannerAd ad) {
// (Only for NDA module) Called when an banner ad is muted.
}
@Override
public void onAdMetaChanged(GfpBannerAd ad, Map<String, String> params) {
// Called when the meta data of the banner ad changes.
}
@Override
public void onAdSizeChanged(GfpBannerAd ad) {
// Called when the banner ad is changed in size.
}
@Override
public void onError(GfpBannerAd ad, GfpError error) {
// Called when an error happened while the banner ad is
// attempting to load or rendering an ad.
}
});
[Step 6] 광고 로드
GfpBannerAdView 에 대한 설정이 마무리 되었다면, GfpBannerAdView 의 loadAd() 메서드를 통해 광고를 로드할 수 있습니다.
UI 스레드에서 광고를 로드해야 합니다.
기선언된 GfpBannerAdView 를 재사용하여 광고를 요청하려면 destroy() 호출 없이 loadAd() 만 호출해야만 합니다. 만약, destroy() 메서드 호출한 후 loadAd() 를 호출하면, 리소스가 해제된 상태로 요청이 발생하여 광고 이벤트를 수신하지 못하는 등의 이슈가 발생할 수 있습니다.
- Kotlin
- Java
class ExampleActivity : AppCompatActivity() {
private var bannerAdView: GfpBannerAdView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_example)
// The view container of banner ad view
val bannerAdContainer = findViewById(R.id.banner_ad_container)
// Create a new ad parameter
val adParam = AdParam.Builder()
.setAdUnitId("YOUR_AD_UNIT_ID")
.build()
// Create a new banner ad view
bannerAdView = GfpBannerAdView(this, adParam)
// Sets the listener for banner ad events
bannerAdView.setAdListener(object : BannerAdListener() {
override fun onAdLoaded(ad: GfpBannerAd?) {
// Called when an banner ad is loaded.
}
override fun onAdClicked(ad: GfpBannerAd?) {
// Called when an banner ad is clicked.
}
override fun onAdImpression(ad: GfpBannerAd?) {
// Called when an impression is recorded for an banner ad.
}
override fun onAdMuted(ad: GfpBannerAd?) {
// (Only for NDA module) Called when an banner ad is muted.
}
override fun onAdMetaChanged(ad: GfpBannerAd?, params: MutableMap<String, String>?) {
// Called when the meta data of the banner ad changes.
}
override fun onAdSizeChanged(ad: GfpBannerAd?) {
// Called when the banner ad is changed in size.
}
override fun onError(ad: GfpBannerAd?, error: GfpError?) {
// Called when an error happened while the banner ad is
// attempting to load or rendering an ad.
}
})
// Add the banner ad view to the view container
bannerAdContainer.addView(bannerAdView)
// Load the banner ad
bannerAdView.loadAd()
}
override fun onDestroy() {
bannerAdView?.destroy()
super.onDestroy()
}
}
public class ExampleActivity extends AppCompatActivity {
private GfpBannerAdView bannerAdView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_example);
// The view container of banner ad view
FrameLayout bannerAdContainer = findViewById(R.id.banner_ad_container);
// Create a new ad parameter.
AdParam adParam = new AdParam.Builder()
.setAdUnitId("YOUR_AD_UNIT_ID")
.build();
// Create a new banner ad view.
bannerAdView = new GfpBannerAdView(this, adParam);
// sets the listener for banner ad events
bannerAdView.setAdListener(new BannerAdListener() {
@Override
public void onAdLoaded(GfpBannerAd ad) {
// Called when an banner ad is loaded.
}
@Override
public void onAdClicked(GfpBannerAd ad) {
// Called when an banner ad is clicked.
}
@Override
public void onAdImpression(GfpBannerAd ad) {
// Called when an impression is recorded for an banner ad.
}
@Override
public void onAdMuted(GfpBannerAd ad) {
// (Only for NDA module) Called when an banner ad is muted.
}
@Override
public void onAdMetaChanged(GfpBannerAd ad, Map<String, String> params) {
// Called when the meta data of the banner ad changes.
}
@Override
public void onAdSizeChanged(GfpBannerAd ad) {
// Called when the banner ad is changed in size.
}
@Override
public void onError(GfpBannerAd ad, GfpError error) {
super.onError(ad, error);
}
});
// Add the banner ad view to the view container.
bannerAdContainer.addView(bannerAdView);
// Load the banner ad
bannerAdView.loadAd();
}
@Override
protected void onDestroy() {
if (bannerAdView != null) {
bannerAdView.destroy();
}
super.onDestroy();
}
}
[Step 7] 광고 리소스 해제
배너 광고의 게재가 끝나면 광고에 할당된 리소스가 해제될 수 있도록 destroy() 메서드를 사용해야 합니다.
기선언된 GfpBannerAdView 를 재사용하여 광고를 요청하려면 destroy() 호출 없이 loadAd() 만 호출해야만 합니다. 만약, destroy() 메서드 호출한 후 loadAd() 를 호출하면, 리소스가 해제된 상태로 요청이 발생하여 광고 이벤트를 수신하지 못하는 등의 이슈가 발생할 수 있습니다.
destroy() 는 사용되거나 참조되지 않는 경우에도 모든 배너광고에서 호출해야 합니다.
아래 예시와 같이 Activity
의 onDestroy()
메서드에서 Activity
내에서 사용한 모든 GfpBannerAdView 참조를 해제해야 합니다.
- Kotlin
- Java
override fun onDestroy() {
bannerAdView?.destroy()
super.onDestroy()
}
@Override
public void onDestroy() {
if (bannerAdView != null) {
bannerAdView.destroy();
}
super.onDestroy();
}