반응형
Godot 4.4 환경에서 범용적으로 사용되는 Poing Studios의 AdMob 플러그인을 활용하여 안드로이드 앱에 광고를 연동하는 전체 과정을 정리합니다. Godot 4.3 버전부터 변경된 빌드 시스템(익스포트 창 UI 변경) 내용이 반영되어 있습니다.
1. 사전 준비 사항
- Godot 4.4 에디터
- Google AdMob 계정: 가입 및 활성화 완료 상태
- 안드로이드 빌드 환경: Android SDK 및 JDK 설치, Godot 내 경로 설정 완료 상태
2. 플러그인 설치 및 활성화
- Godot 에디터 상단 중앙의 AssetLib 탭으로 이동합니다.
- 검색창에
AdMob을 검색하고, 개발자가 poing.studios인 플러그인을 선택합니다. - Download 후 Install을 클릭하여 프로젝트의
res://addons/경로에 설치합니다. - 상단 메뉴의 프로젝트(Project) > 프로젝트 설정(Project Settings)을 엽니다.
- 플러그인(Plugins) 탭에서 AdMob 항목의 체크박스를 눌러 활성화(Enable) 합니다.
3. 플랫폼 SDK 다운로드 및 App ID 설정
- 에디터 상단 툴바에 생성된 AdMob Manager (또는 프로젝트 > 도구 > AdMob Manager)를 클릭합니다.
- Android > Download & Install을 클릭하여 안드로이드용 AdMob SDK 바이너리를 프로젝트에 다운로드합니다.
- 설정 메뉴에서 APPLICATION_ID 속성에 AdMob 대시보드에서 발급받은 실제 앱 ID(
ca-app-pub-XXXXXXXXXXXXXXXX~YYYYYYYYYY)를 입력합니다.
4. 안드로이드 빌드 및 내보내기 설정 (★ Godot 4.3 이상 주의점)
Godot 4.3 버전부터 익스포트 창 하단에 있던 Plugins 체크 목록 UI가 제거되었습니다. 플러그인은 프로젝트 설정에서 활성화되어 있고, Gradle Build를 사용하면 자동으로 포함됩니다.
- 상단 메뉴에서 프로젝트(Project) > 설치(Install) > Android Build Template을 클릭합니다. (
res://android/build/폴더 생성됨) - 프로젝트(Project) > 내보내기(Export) 창을 엽니다.
- 상단의 추가(Add) 버튼을 눌러 Android 프리셋을 생성합니다.
- 우측 설정 옵션 중 Gradle Build 항목을 찾아 체크합니다.
- (과거 버전과 달리 내보내기 창 하단에서 AdMob 플러그인을 수동으로 체크할 필요가 없습니다. 창을 닫습니다.)
5. AdMob 대시보드 필수 설정
실제 광고 송출 및 테스트를 위해 대시보드에서 다음 작업을 수행해야 합니다.
- 광고 단위(Ad Unit) 생성:
- 앱 메뉴 > 광고 단위 추가에서 배너, 전면, 보상형 등 필요한 광고 단위를 생성합니다.
- 생성된 광고 단위 ID(
ca-app-pub-.../...)를 메모합니다.
- 테스트 기기 등록 (필수):
- 설정 > 테스트 기기 메뉴에서 본인 스마트폰을 등록합니다.
- 스마트폰의 설정 > Google > 광고 메뉴에서 확인한 광고 ID(ADID)를 입력해야 정책 위반(계정 정지)을 피할 수 있습니다.
6. GDScript 광고 호출 코드 구현
광고를 관리할 싱글톤(AutoLoad) 또는 메인 스크립트에 아래 코드를 작성하여 사용합니다. (아래 코드는 Google에서 제공하는 개발용 테스트 ID를 기준으로 작성되었습니다.)
extends Node
var banner_view : BannerView
var interstitial_ad : InterstitialAd
var rewarded_ad : RewardedAd
func _ready() -> void:
# 1. SDK 초기화 (앱 실행 시 1회만 호출)
MobileAds.initialize()
# ==========================================
# 2. 배너 광고 (Banner Ad)
# ==========================================
func load_banner() -> void:
var unit_id = "ca-app-pub-3940256099942544/6300978111" # 안드로이드 배너 테스트 ID
var ad_request = AdRequest.new()
var ad_size = AdSize.get_current_orientation_anchored_adaptive_banner_ad_size(AdSize.FULL_WIDTH)
banner_view = BannerView.new(unit_id, ad_size, AdPosition.Values.BOTTOM)
banner_view.load_ad(ad_request)
banner_view.on_ad_loaded.connect(_on_banner_loaded)
func _on_banner_loaded() -> void:
banner_view.show()
# ==========================================
# 3. 전면 광고 (Interstitial Ad)
# ==========================================
func load_interstitial() -> void:
var unit_id = "ca-app-pub-3940256099942544/1033173712" # 안드로이드 전면 테스트 ID
var ad_request = AdRequest.new()
var loader = InterstitialAdLoader.new()
loader.on_ad_loaded.connect(_on_interstitial_loaded)
loader.on_ad_failed_to_load.connect(_on_interstitial_failed)
loader.load(unit_id, ad_request)
func _on_interstitial_loaded(ad : InterstitialAd) -> void:
interstitial_ad = ad
interstitial_ad.on_ad_dismissed_full_screen_content.connect(_on_interstitial_closed)
interstitial_ad.show()
func _on_interstitial_failed(error : LoadAdError) -> void:
print("전면 광고 로드 실패: ", error.message)
func _on_interstitial_closed() -> void:
interstitial_ad = null
# ==========================================
# 4. 보상형 광고 (Rewarded Ad)
# ==========================================
func load_rewarded_ad() -> void:
var unit_id = "ca-app-pub-3940256099942544/5224354917" # 안드로이드 보상형 테스트 ID
var ad_request = AdRequest.new()
var loader = RewardedAdLoader.new()
loader.on_ad_loaded.connect(_on_rewarded_loaded)
loader.load(unit_id, ad_request)
func _on_rewarded_loaded(ad : RewardedAd) -> void:
rewarded_ad = ad
rewarded_ad.on_user_earned_reward.connect(_on_user_earned_reward)
rewarded_ad.on_ad_dismissed_full_screen_content.connect(_on_rewarded_closed)
rewarded_ad.show()
func _on_user_earned_reward(reward : RewardItem) -> void:
print("보상 지급 처리 - 종류: ", reward.type, " / 수량: ", reward.amount)
func _on_rewarded_closed() -> void:
rewarded_ad = null
7. 테스트 및 최종 빌드 주의사항
- 테스트 단계: 위 스크립트에 기재된
ca-app-pub-3940256099942544/...형태의 테스트용 ID를 반드시 유지해야 합니다. 자신의 실제 광고 단위 ID로 개발 중 과도한 트래픽을 발생시키면 부정 클릭으로 간주되어 계정이 영구 정지될 수 있습니다. - 출시 빌드 단계: 플레이 스토어 배포용 AAB/APK 파일을 빌드하기 직전에 스크립트 내의
unit_id변수값을 대시보드에서 발급받은 본인의 실제 광고 단위 ID로 교체하고 빌드합니다.
반응형