앱 만들기/안드로이드

안드로이드의 기술 # 애드몹 전면 광고 만들기

나도 처음이야 2020. 9. 25.

지난 시간에는 애드몹의 기본 설정 방법을 살펴보았습니다.

오늘은, 애드몹 광고 중 전면 광고 적용법을 알아보겠습니다.

우선, 애드몹 사이트에서 광고 단위를 만들었다는 가정아래 시작합니다.

 

developers.google.com/admob/android/interstitial?hl=ko

 

전면 광고  |  Android  |  Google Developers

전면 광고는 호스트 앱의 인터페이스를 완전히 덮는 전체 화면 광고입니다. 일반적으로 활동이 바뀌는 시점 또는 게임에서 다음 레벨로 넘어갈 때처럼 앱 이용이 잠시 중단될 때 자연스럽게 광�

developers.google.com

1. 전면 광고 객체 만들기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    package ...
 
    import com.google.android.gms.ads.InterstitialAd;
 
    public class MainActivity extends Activity {

// 전면 광고를 위한 객체 생성.
        private InterstitialAd mInterstitialAd;
 
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
// 전면 광고 객체 만들기.
            MobileAds.initialize(thisnew OnInitializationCompleteListener() {
                @Override
                public void onInitializationComplete(InitializationStatus initializationStatus) {}
            });
    
            mInterstitialAd = new InterstitialAd(this);
// 구글 에서 제공하는 테스트 ID
            mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
        }
    }
cs

 

onCreate() 함수에 전면 광고 객체를 만들어 줍니다.

그리고, 테스트 아이디를 사용하여 광고를 설정해줍니다.  

앱이 런칭 되기전 까지는 구글에서 제공하는 테스트 ID 를 사용하는 것을 권장 합니다.

(런칭 테스트 시에는 setAdUnitId 인자값으로 애드몹에서 생성한 광고 단위 ID 를 넣어주면 됩니다)

 

 

2. 광고 로드 코드를 추가합니다.

mInterstitialAd.loadAd(new AdRequest.Builder().build());

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    package ...
 
    import com.google.android.gms.ads.AdRequest;
    import com.google.android.gms.ads.InterstitialAd;
 
    public class MainActivity extends Activity {
 
        private InterstitialAd mInterstitialAd;
 
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mInterstitialAd = new InterstitialAd(this);
            mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
            // 광고 로드
            mInterstitialAd.loadAd(new AdRequest.Builder().build());
        }
    }
cs

전면 광고에 대한 준비가 모두 끝났습니다.

배너 광고와 다르게 전면 광고는 XML 화면 편집 내용이 없습니다.

소스상에서만 위 처럼 세팅을 하면 기본 광고 로딩은 완료가 됩니다.

 

3. 광고 게재

1
2
3
4
5
6
7
8
9
10
    mMyButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (mInterstitialAd.isLoaded()) {
                mInterstitialAd.show();
            } else {
                Log.d("TAG""The interstitial wasn't loaded yet.");
            }
        }
    });
cs

위 코드에서 키 포인트는 

mInterstitialAd.show(); 함수 입니다.

해당 함수를 호출하면 광고가 화면에 보여집니다. 하기 처럼 말이죠.

위 예제에서는 버튼을 만들어서 버튼이 눌릴때 광고가 로드 되었다면, 광고를 보여주고

로딩이 아직 되지 않았다면,,, 어떤 처리를 하라는 식의 샘플을 제공하고 있습니다.

 

애드몹 테스트 전면광고

그렇기에,  광고 로딩이 완료 되었다면  mInterstitialAd.show(); 로 광고를 보여 주기만 해도 됩니다.

위 처럼 버튼이 아니라, 화면이 전환시에는 전환 하기 앞서 광고를 로딩하고 show() 함수를 통해 전면 광고를 보여준 후다음 화면을 보여주면 됩니다.

즉, 보상 같은 개념이죠... 

그래서, 전면 광고는 게임의 스테이지 사이 혹은 특정 동작 다음 페이지를 보게 할때 많이 구현하는 광고 이며

애드몹에서도 그런 동작을 권장 하고 있습니다.

그냥 앱이 켜질때 꺼질때 아무런 동작도 없이 바로 광고가 나오면 안된다는 거죠.

 

전면 광고가 보여졌다면,

사용자가 왼쪽 상단 X 를 터치 해야지만 광고가 중단이 됩니다.

백버튼으로도 광고가 종료되지는 않습니다. 이점은 최근 광고 단가의 효율성을 위한 애드몹의 수정사항으로 보입니다.

 

X 를 터치 한 이후 다음 화면을 보여주거나

다음 액션은 어떻게 취할까요? 바로 광고 리스너를 등록해서 해결할 수 있습니다.

 

4. 광고 이벤트

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    mInterstitialAd.setAdListener(new AdListener() {
        @Override
// 광고 로드가 완료되면 호출됨.
        public void onAdLoaded() {
            // Code to be executed when an ad finishes loading.
        }
 
        @Override
        public void onAdFailedToLoad(int errorCode) {
            // Code to be executed when an ad request fails.
        }
 
        @Override
        public void onAdOpened() {
            // Code to be executed when the ad is displayed.
        }
 
        @Override
        public void onAdClicked() {
            // Code to be executed when the user clicks on an ad.
        }
 
        @Override
        public void onAdLeftApplication() {
            // Code to be executed when the user has left the app.
        }
 
        @Override
// 광고가 닫히면 호출됨.
        public void onAdClosed() {
            // Code to be executed when the interstitial ad is closed.
        }
    });
cs

광고 리스너를 위와 같이 구현합니다.

광고 로드가 완료되고 광고를 보여 줄 준비가 되었다면, 

onAdLoaded() 함수가 호출됩니다. 

 

그리고, 광고가 닫히면 onAdClosed() 함수가 불려집니다.

바로 이 함수에 다음 동작 액션을 구현하면 정상 동작을 하겠죠?

그 외에도 위 콜백 함수등의 특성에 따라 각자 원하는 코드를 적용하면 되겠습니다.

 

필자는 하기처럼  구글 샘플 코드를 수정 해보았습니다.

버튼을 누르면 전면 광고가 나오고 다시 광고를 로드하는 동작을 합니다.

1
2
3
4
5
6
7
8
9
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
 
import androidx.appcompat.app.AppCompatActivity;
 
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.InterstitialAd;
import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.initialization.InitializationStatus;
import com.google.android.gms.ads.initialization.OnInitializationCompleteListener;
 
public class MainActivity extends AppCompatActivity {
 
    private InterstitialAd mInterstitialAd;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        MobileAds.initialize(thisnew OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {
            }
        });
 
        mInterstitialAd = new InterstitialAd(this);
        mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
        mInterstitialAd.loadAd(new AdRequest.Builder().build());
 
        mInterstitialAd.setAdListener(new AdListener() {
            @Override
            public void onAdLoaded() {
                // Code to be executed when an ad finishes loading.
                Log.d("test""# onAdLoaded");
            }
 
            @Override
            public void onAdFailedToLoad(int errorCode) {
                // Code to be executed when an ad request fails.
                Log.d("test""# onAdFailedToLoad");
            }
 
            @Override
            public void onAdOpened() {
                // Code to be executed when the ad is displayed.
                Log.d("test""# onAdOpened");
            }
 
            @Override
            public void onAdClicked() {
                // Code to be executed when the user clicks on an ad.
                Log.d("test""# onAdClicked");
            }
 
            @Override
            public void onAdLeftApplication() {
                // Code to be executed when the user has left the app.
                Log.d("test""# onAdLeftApplication");
            }
 
            @Override
            public void onAdClosed() {
                // Code to be executed when the interstitial ad is closed.
                Log.d("test""# onAdClosed");
// 테스트 예제로, 광고가 닫히면 다시 광고를 로드해준다.
// 다음 광고를 위해.
                mInterstitialAd.loadAd(new AdRequest.Builder().build());
            }
        });
        Button btn = (Button)findViewById(R.id.button);
        btn.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mInterstitialAd.isLoaded()) {
                    mInterstitialAd.show();
                } else {
                    Log.d("TAG""The interstitial wasn't loaded yet.");
                }
            }
        });
 
    }
 
 
}
cs
 
 
 

 

전면 광고 테스트 영상

 

구글에서는 전면 광고의 권장사항을 하기처럼 표기하고 있습니다.

구현시 광고 로딩 하는 부분과 광고 앞뒤의 시나리오 등만 주의 한다면 큰 문제는 없어 보입니다.

감사합니다. ^^

 

권장사항

전면 광고가 앱의 광고로 적절한 유형인지 생각해 봐야 합니다.

전면 광고를 게재하려면 앱 사용을 잠시 중단하는 순간이 있어야 합니다.

충분한 로드 시간을 확보하세요.

광고를 과도하게 게재하면 안 됩니다.

반응형

댓글