이 자습서에서는 AdMob을 통합하는 방법에 대해 알아보고, 작성한 멋진 안드로이드 앱을 통해 수익을 창출할 수 있도록 하고, 누가 원하지 않는지 알아봅니다. AdMob은 시장에서 가장 큰 모바일 광고 플랫폼 중 하나이며 Google이 소유하고 있습니다.
유료 다운로드, 유료 구독, 인앱 구매 및 광고 표시를 통해 안드로이드에서 앱으로 수익을 창출하는 방법에는 몇 가지가 있습니다. 이들을 결합할 수 있지만 단일 모델을 선택하는 것이 좋습니다. 이 자습서에서는 광고를 게재하여 앱으로 수익을 창출하는 방법에 대해 알아봅니다.
이 자습서에서 만드는 광고의 종류는 배너, 삽입 광고 및 기본 고속 광고입니다. 각각에 대해 설명하고 응용 프로그램에서 구현하는 방법을 보여줄 것입니다. 그러나 그전에 먼저 모바일 광고 SDK를 통합하고 초기화하는 방법을 알아보겠습니다.
안드로이드 스튜디오에서 MainActivity
라는 새 프로젝트를 만듭니다.
AdMob과 앱의 통합을 시작하려면 먼저 앱 모듈 build.gradle
파일에 모바일 광고 SDK를 포함해야 합니다.
1 | compile 'com.google.android.gms:play-services-ads:11.0.2' |
Firebase를 앱에 통합하려면 Firebase에 포함 된 SDK를 사용해야 합니다.
1 | compile 'com.google.firebase:firebase-ads:11.0.2' |
Firebase를 시작하는 데 도움이 필요하면 Envato Tuts+의 Firebase 튜토리얼을 참조하십시오.
SDK를 추가 한 후에 프로젝트를 동기화해야 인터넷에서 라이브러리를 응용 프로그램으로 가져올 수 있습니다.
안드로이드 앱에 광고를 로드하기 전에 모바일 광고 SDK를 초기화해야 하므로 가능한 한 빨리 이작업을 수행하십시오. Application
클래스를 확장한 클래스를 만든 다음 해당 메서드가 응용 프로그램이 시작될 때 한 번만 호출되기 때문에 해당 클래스의 onCreate()
메서드에서 MobileAds
SDK를 초기화합니다.
01 02 03 04 05 06 07 08 09 10 11 | import com.google.android.gms.ads.MobileAds; import android.app.Application; public class App extends Application { @Override public void onCreate() { super .onCreate(); MobileAds.initialize( this , "ca-app-pub-3940256099942544/6300978111" ); } } |
MobileAds
클래스의 정적 메소드 initialize()
에 제공된 두 번째 인수는 Ad Mob에 가입할 때 얻은 Ad Mob 애플리케이션 ID 여야 합니다. 이 경우 데모 용도로 Google에서 제공하는 공개 애플리케이션 ID를 사용하고 있습니다.
우리가 만든 응용 프로그램 클래스를 AndroidManifest.xml 파일의 응용 프로그램 태그 이름 특성에 추가해야 합니다.
1 2 3 | < application android:name = ".App" > </ application > |
이 파일에있는 동안 Google 모바일 광고를 실행할 수 있도록 INTERNET
권한도 포함해야 합니다.
1 2 3 | <!-- Include required permissions for Google Mobile Ads to run. --> < uses-permission android:name = "android.permission.INTERNET" /> < uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" /> |
아래의 코드 스니펫에서 AdActivity
를 애플리케이션 태그 내의 AndroidManifest.xml 파일에 추가했습니다.
1 2 3 | < activity android:name = "com.google.android.gms.ads.AdActivity" android:configChanges = "keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:theme = "@android:style/Theme.Translucent" /> |
검사버튼삭제버튼이 활동은 SDK에서 제공합니다. 배너 광고에서 사용자가 광고를 클릭할 때 광고를 볼 수 있고, 삽입 광고의 경우 사용자가 클릭할 때 광고를 표시하는 데 유용합니다.
배너 광고는 현재 표시되는 화면의 일부를 포함합니다. 즉, 앱의 모든 콘텐츠와 광고가 화면에 함께 표시됩니다. 이렇게 하면 삽입 광고와 달리 광고가 게재되는 동안 사용자가 앱을 계속 사용할 수 있기 때문에 사용자 환경이 개선됩니다. 잠깐만 기다려주십시오. 배너 광고는 텍스트 또는 이미지 일 수 있습니다.
배너 광고를 구현하는 방법을 살펴 보겠습니다.
AdView
는 배너 광고가 포함된 맞춤 ViewGroup
이므로 이 보기를 포함하도록 activity_banner_ad.xml 레이아웃 파일을 수정해야 합니다.
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 | android:layout_width = "match_parent" android:layout_height = "match_parent" tools:context = "com.chikeandroid.tutsplus_admob.MainActivity" > < TextView android:text = "Hello World" android:layout_width = "wrap_content" android:layout_height = "wrap_content" /> < com.google.android.gms.ads.AdView android:id = "@+id/adView" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_centerHorizontal = "true" android:layout_alignParentBottom = "true" ads:adSize = "BANNER" ads:adUnitId = "ca-app-pub-3940256099942544/6300978111" > </ com.google.android.gms.ads.AdView > </ RelativeLayout > |
ad : AdSize
속성을 사용하여 AdView
크기를 정의하고 BANNER
로 설정합니다. 다른 대안으로는 LARGE_BANNER
, FULL_BANNER
, SMART_BANNER
등이 있습니다.
ads : adUnitId
AdView
속성은 Google에서 제공하는 샘플 광고 단위로 설정됩니다. 실제로 광고로 돈을 벌고 싶다면 계정과 연결된 광고 단위로 이를 업데이트해야 합니다.
광고 단위 ID는 광고 게재 위치를 식별하며 AdMob 관리 콘솔에서 찾을 수 있습니다. 이 ID는 AdMob에 앱에 표시 할 광고의 종류와 표시 형식 (이미지, 텍스트 또는 동영상)을 알려줍니다.
광고를 마침내 표시하려면 BannerAdActivity
클래스에서 위에서 만든 AdView
에 요청을 제출해야 합니다.
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 | import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.AdView; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; public class BannerAdActivity extends AppCompatActivity { private AdView mAdView; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); mAdView = (AdView) findViewById(R.id.adView); AdRequest adRequest = new AdRequest.Builder() .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) .build(); mAdView.loadAd(adRequest); } } |
빌더를 사용하여 AdRequest의 인스턴스를 생성하여 광고를 요청했습니다. 그런 다음 addTestDevice()
메소드를 사용하여 장치 ID를 인수로 전달하여 테스트 광고를 장치에 수신합니다 (이 경우에는 에뮬레이터). 그런 다음 이 AdRequest
인스턴스를 가져 와서 백그라운드 스레드 (UI / 주 스레드를 차단하지 않도록)에 광고를로드하는 AdView
메소드 loadAd()
를 마지막으로 호출했습니다.
이 시점에서 프로젝트를 실행하고 그 결과를 볼 수 있습니다.
위의 스크린샷에서 테스트 배너 광고가 보기 아래에 표시되고 있음을 알 수 있습니다. 이제 광고를 클릭하여 상호 작용하십시오.
이제 광고에서 관찰할 수 있는 이벤트 또는 콜백을 살펴보겠습니다. 사용 가능한 이벤트는 다음과 같습니다.
onAdLoaded()
: 이 메소드는 광고가 검색 될 때 시작됩니다. onAdOpened()
: 이 메소드는 광고가 열릴 때 호출됩니다. onAdClosed()
: 이 메소드는 광고가 닫힐 때 시작됩니다.onAdLeftApplication()
: 이 메소드는 사용자가 응용 프로그램을 나갈 때 호출됩니다.onAdFailedToLoad(int errorCode)
: 광고 요청이 실패하면 시작됩니다. 코드는 ERROR_CODE_NETWORK_ERROR
, ERROR_CODE_INVALID_REQUEST
, ERROR_CODE_NO_FILL
또는 ERROR_CODE_INTERNAL_ERROR
중 하나 일 수 있습니다.01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | // ... @Override protected void onCreate(Bundle savedInstanceState) { // ... mAdView.setAdListener( new AdListener() { @Override public void onAdLoaded() { super .onAdLoaded(); Toast.makeText(MainActivity. this , "onAdLoaded()" , Toast.LENGTH_SHORT).show(); } @Override public void onAdOpened() { super .onAdOpened(); Toast.makeText(MainActivity. this , "onAdOpened()" , Toast.LENGTH_SHORT).show(); } @Override public void onAdClosed() { super .onAdClosed(); Toast.makeText(MainActivity. this , "onAdClosed()" , Toast.LENGTH_SHORT).show(); } @Override public void onAdFailedToLoad( int i) { super .onAdFailedToLoad(i); Toast.makeText(MainActivity. this , "onAdFailedToLoad()" , Toast.LENGTH_SHORT).show(); } @Override public void onAdLeftApplication() { super .onAdLeftApplication(); Toast.makeText(MainActivity. this , "onAdLeftApplication()" , Toast.LENGTH_SHORT).show(); } }); } @Override public void onPause() { // This method should be called in the parent Activity's onPause() method. if (mAdView != null ) { mAdView.pause(); } super .onPause(); } @Override public void onResume() { super .onResume(); // This method should be called in the parent Activity's onResume() method. if (mAdView != null ) { mAdView.resume(); } } @Override public void onDestroy() { // This method should be called in the parent Activity's onDestroy() method. if (mAdView != null ) { mAdView.destroy(); } super .onDestroy(); } } |
리스너를 추가 한 후 프로젝트를 다시 실행하고 광고와 상호 작용하십시오. 우리가 만든 건배를 보고 호출되는 이벤트를 관찰하십시오.
배너 광고를 표시하는 것이 얼마나 쉬운 지 알 수 있었습니다. 이제 삽입 광고를 만드는 방법에 대해 알아보겠습니다.
삽입 광고는 애플리케이션의 전체 화면을 다루는 광고로, 앱의 다른 보기를 표시할 공간이 없습니다 (곧 보게 되겠지만). 이 작업은 전체 화면을 차지하고 네트워크가 느린 경우 로드하는 데 시간이 걸리기 때문에 사용자를 괴롭히지 않도록 주의해야 합니다. 이상적으로 이러한 삽입 광고는 자연재해시 앱에 표시되어야 합니다 (예 : 사용자가 다른 작업의 중간에 있을 때가 아니라 게임의 레벨 사이에서.
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | import com.google.android.gms.ads.AdListener; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.InterstitialAd; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.Toast; public class InterstitialAdActivity extends AppCompatActivity { private InterstitialAd mInterstitialAd; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); loadInterstitialAd(); } private void loadInterstitialAd() { mInterstitialAd = new InterstitialAd( this ); mInterstitialAd.setAdUnitId( "ca-app-pub-3940256099942544/1033173712" ); mInterstitialAd.setAdListener( new AdListener() { @Override public void onAdLoaded() { super .onAdLoaded(); Toast.makeText(MainActivity. this , "onAdLoaded()" , Toast.LENGTH_SHORT).show(); if (mInterstitialAd.isLoaded()) { mInterstitialAd.show(); } } @Override public void onAdFailedToLoad( int i) { super .onAdFailedToLoad(i); Toast.makeText(MainActivity. this , "onAdFailedToLoad()" , Toast.LENGTH_SHORT).show(); } }); AdRequest adRequest = new AdRequest.Builder().build(); mInterstitialAd.loadAd(adRequest); } } |
위 코드에서 InterstitialAdActivity
클래스의 InterstitialAd
클래스 인스턴스를 선언하고 초기화했습니다. Google이 제공 한 인수를 유일한 인수로 setAdUnitId()
메서드에 전달하여 추가 단위 ID를 설정합니다.
배너 광고에서 했던 것처럼 광고의 이벤트를 수신하므로 ListLoaded()
및 onAdFailedToLoad(int i)
에서 오버로드 된 메소드를 발생시키는 리스너를 설정합니다. 빌더를 사용하여 AdRequest
클래스의 인스턴스를 만든 다음 메서드 loadAd()
를 호출하여 이 요청을 메소드의 인수로 전달합니다. 우리는 isLoaded()
메소드를 사용하여 광고가 로드된 시기를 결정한 다음 show()
메서드를 호출하여 최종적으로 표시합니다.
배너 광고와 마찬가지로 AdListener
를 추가할 수도 있습니다.
이 시점에서 우리는 앱을 실행하고 그 결과를 볼 수 있습니다.
위의 스크린 샷에서 테스트 삽입 광고가 게재되고 있음을 알 수 있습니다.
네이티브 광고 익스프레스는 게시자에게 앱의 자연스러운 느낌에 맞게 광고의 디자인을 맞춤 설정할 수 있는 기능을 제공합니다. 이 맞춤 설정은 AdMob 계정에서 자신의 글꼴, 색상, 크기 등을 정의하는 CSS 템플릿을 정의하여 수행됩니다. 이미지, 설명 및 제목을 변경할 수는 없지만 광고주가 설정합니다.
맞춤 광고는 NativeExpressAdView
에서 앱에 표시 될 수 있습니다.
NativeExpressAdView
포함아래에는 레이아웃 그룹에 ViewGroup
인 NativeExpressAdView
가 포함되어 있습니다. 또한 android:layout_height
및 android:layout_width
를 wrap_content
로 정의합니다. ads:adSize
는 "320x300"
이며 Google에서 제공하는 NativeExpress 광고 단위 ID를 사용합니다 (데모 용).
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | android:layout_width = "match_parent" android:layout_height = "match_parent" tools:context = "com.chikeandroid.tutsplus_admob.BannerAdActivity" > < TextView android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "Native Express Ad!" /> < com.google.android.gms.ads.NativeExpressAdView android:id = "@+id/adView" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_centerHorizontal = "true" android:layout_alignParentBottom = "true" ads:adSize = "320x300" ads:adUnitId = "ca-app-pub-3940256099942544/2177258514" > </ com.google.android.gms.ads.NativeExpressAdView > </ RelativeLayout > |
그런 다음 AdRequest
를 작성한 다음 표시할 광고를 로드하기 시작합니다. 또한 액티비티 라이프싸이클 콜백에 응답하는 코드를 추가할 것 입니다. 원하는 경우 배너 광고와 마찬가지로 AdListener
를 추가할 수도 있습니다.
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.NativeExpressAdView; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; public class NativeExpressAdActivity extends AppCompatActivity { NativeExpressAdView mNativeExpressAdView; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_native_ad); mNativeExpressAdView = (NativeExpressAdView) findViewById(R.id.adView); AdRequest.Builder adRequestBuilder = new AdRequest.Builder(); adRequestBuilder.addTestDevice(AdRequest.DEVICE_ID_EMULATOR); mNativeExpressAdView.loadAd(adRequestBuilder.build()); } @Override public void onResume() { super .onResume(); mNativeExpressAdView.resume(); } @Override public void onPause() { mNativeExpressAdView.pause(); super .onPause(); } @Override public void onDestroy() { mNativeExpressAdView.destroy(); super .onDestroy(); } } |
그게 전부입니다! 이제 앱을 실행하고 Native Express 광고를 실제로 볼 수 있습니다.
다양한 유형의 광고에 대해 학습했으므로 이제 애플리케이션에 통합할 수 있습니다. 실제 광고를 게재하고 수익을 창출하려면 광고주의 실제 광고와 연결된 실제 광고 단위 ID가있는 AdMob 계정이 필요합니다. 가입하려면 AdMob 웹 사이트를 방문하십시오.
이 자습서에서는 AdMob에 대해 알아보고 Android에 배너, 삽입 광고 및 기본 고속 광고와 같은 다양한 AdMob 광고 형식을 통합하는 방법에 대해 살펴 보았습니다.
안드로이드용 AdMob에 대해 자세히 알아보려면 공식 문서를 참조하세요. 그리고 그동안 안드로이드 앱 개발에 대한 다른 코스 및 자습서를 확인하십시오.
SSISO Community