- 파이어스토어 (NoSQL 서비스)
- 클라우드 메시징 (푸시 메시지 기능)
- 구글 애널리틱스 (사용자 분석, 통계 툴)







다음 페이지에서 회원가입
👉 애드몹 홈페이지
[홈] ➡️ [시작하기]

다음으로 선택 후 [계속] ➡️ [완료]

[앱] ➡️ [광고단위] ➡️ [시작하기] ➡️ 배너광고 선택 ➡️ 광고 단위 이름 작성 ➡️ [광고 단위 만들기]

생성되는 두 가지 중 아래의 ID를 따로 복사하여 저장해두기 ➡️ [완료]
[앱] ➡️ [앱 설정] ➡️ [앱ID] 복사

안드로이드 스튜디오 매니패스트 파일의 application 태그 내에 다음 코드 추가
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="방금 복사한 앱 ID 넣기" />
implementation("com.google.android.gms:play-services-ads:22.6.0")
<com.google.android.gms.ads.AdView xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
ads:adSize="BANNER"
ads:adUnitId="광고 단위 ID 넣기"
ads:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
🚨 테스트 시 꼭 테스트 광고 단위 ID 사용하기
- 애드몹에서 승인을 받지 않고 광고 단위 ID를 사용하면 앱 실행 시 광고가 보이지 않고,
승인을 받았더라도 테스트 시에 실제 광고 단위 ID를 사용하게 되면 계정 자체가 정지될 수 있음- 테스트용 광고 단위 ID는 아래 링크에서 확인 가능
👉 안드로이드용 테스트 광고 단위 ID 공식 문서
// 전면 광고 설정 변수
var mInterstitialAd : InterstitialAd? = null
// 전면 광고 다시 로드하는 함수
override fun onResume() {
super.onResume()
setInterstitialAds()
}
// 플로팅 버튼 클릭했을 때 전면 광고 나오는 함수
private fun setFab() {
binding.fab.setOnClickListener {
if (mInterstitialAd != null) { // 변수에 fullScreenContentCallback 인터페이스 등록 => 전면 광고가 닫히고 열렸을 때, 실패했을 때를 콜백 함수로 확인할 수 있음
mInterstitialAd!!.fullScreenContentCallback = object: FullScreenContentCallback() {
override fun onAdDismissedFullScreenContent() {
Log.d("ads log", "전면 광고가 닫혔습니다.")
val intent = Intent(this@MainActivity, MapActivity::class.java)
intent.putExtra("currentLat", latitude)
intent.putExtra("currntLng", longitude)
// startMapActivityResult.launch() : 지도 페이지로 이동하고, 등록해둔 onActivityResult 콜백에 보낸 값이 전달
startMapActivityResult.launch(intent)
}
override fun onAdFailedToShowFullScreenContent(adError: AdError) {
Log.d("ads log", "전면 광고가 열리는 데 실패 ${adError.message}")
}
override fun onAdShowedFullScreenContent() {
Log.d("ads log", "전면 광고가 성공적으로 열렸습니다.")
mInterstitialAd = null // 전면 광고는 재사용이 어렵기 때문에 null로 만들어주기
}
}
mInterstitialAd!!.show(this@MainActivity)
} else {
Log.d("InterstitialAd", "전면 광고가 로딩되지 않았습니다.")
Toast.makeText(this@MainActivity, "잠시 후 다시 시도해주세요.", Toast.LENGTH_SHORT).show()
}
}
}
// 배너 광고 설정 함수
private fun setBannerAds() {
MobileAds.initialize(this) // 구글 모바일 광고 SDK 초기화
val adRequest = AdRequest.Builder().build() // AdRequest 객체 생성 => 광고 요청에 대한 타깃팅 정보 있음
binding.adView.loadAd(adRequest) // 애드뷰에 광고 로드
// 애드뷰 리스너
binding.adView.adListener = object : AdListener() {
override fun onAdLoaded() {
Log.d("ads log", "배너 광고가 로드되었습니다.")
}
override fun onAdFailedToLoad(adError: LoadAdError) {
Log.d("ads log", "배너 광고가 로드 실패했습니다. ${adError.responseInfo}")
}
override fun onAdOpened() {
Log.d("ads log", "배너 광고를 열었습니다.")
}
override fun onAdClicked() {
Log.d("ads log", "배너 광고를 클릭했습니다.")
}
override fun onAdClosed() {
Log.d("ads log", "배너 광고를 닫았습니다.")
}
}
// 전면 광고 설정 함수
private fun setInterstitialAds() {
val adRequest = AdRequest.Builder().build()
InterstitialAd.load(this, "ca-app-pub-3940256099942544/1033173712", adRequest, object : InterstitialAdLoadCallback() {
override fun onAdFailedToLoad(adError: LoadAdError) {
Log.d("ads log", "전면 광고가 로드 실패했습니다. ${adError.responseInfo}")
mInterstitialAd = null
}
override fun onAdLoaded(interstitialAd: InterstitialAd) {
Log.d("ads log", "전면 광고가 로드되었습니다.")
mInterstitialAd = interstitialAd
}
})
}

