달달한 스토리

728x90
반응형

최근에 이제 프로젝트로 마무리하고 있는 앱에

 

집중적으로 투자하기 위해 글을 많이 쓰지 못했다.

 

그래도 배운 것을 기록하는 것도, 매일 코딩하는 것 못지 않게 중요하다고 생각한다.

 

이제 장장 4달이 되어가는 이 앱 만들기도 끝이 보인다.

 

오늘 내 앱에 적용한 것은 적응형 광고와 전면 광고 다는 법이다.

 

순서대로 보겠다.

 


적응형 광고

띠 배너인 적응형 광고는 기존 스마트 배너(이제 없어진다고 함)에 비해

 

훨씬 더 앱에 사이즈에 맞게 최적화 되어 알맞게 사이즈가 자동으로 맞춰지는

 

띠배너이다.

 

다음은 내가 만든 앱에 일부분이다.

 

 

그림과 같이 아래에 내비게이션 뷰에다가

 

배너를 달아 다른 프래그먼트로 이동해도

 

계속해서 보이게 해두었다.

 

우선 

 

구글에 로그인을 하여 애드몹도 가입해서 unit키를 와 id키를 얻어오는

 

과정은 인터넷에 널렸기에 생략을 하겠다.

    <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="@string/app_id" />
allprojects {
    repositories {
        google()

    }
}


dependencies {
    implementation 'com.google.android.gms:play-services-ads:19.8.0'
    }

 

위에는 매니페스트 어플리케이션 안에 넣고,

 

아래는 앱 빌드에 라이브러리로 추가한다.

public class MainActivity extends AppCompatActivity {

    private AdView adView;
    private FrameLayout adContainerView;

	//배너를 빌드해준다. 
    private void loadBanner() {
        AdRequest adRequest = new AdRequest.Builder().build();
        AdSize adSize = getAdSize(); //사이즈 가져오기
        adView.setAdSize(adSize); //애드뷰에 알맞는 사이즈 넣기
        adView.loadAd(adRequest); //애드 뷰 로드

    }

	//애드몹에 사이즈를 리턴해준다.
    private AdSize getAdSize() {
        Display display = getWindowManager().getDefaultDisplay();
        DisplayMetrics outMetrics = new DisplayMetrics();
        display.getMetrics(outMetrics);

        float widthPixels = outMetrics.widthPixels;
        float density = outMetrics.density;

        int adWidth = (int) (widthPixels / density);

        return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth);
    }

        @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.bottom_navi);

		//애드몹 초기화 해주기
        MobileAds.initialize(this, initializationStatus -> { });

		//애드몹 띠 배너 나올 프레임레이아웃 참조해주기
        adContainerView = findViewById(R.id.ad_view_container6);
        adView = new AdView(this);
        adView.setAdUnitId(getString(R.string.admob__unit_TTIBanner));
        //ca-app-pub-3940256099942544/6300978111 -> 테스트용 unit id
        adContainerView.addView(adView);프레임 레이아웃에 애드뷰 삽입
        loadBanner(); 
        }
        

 

자바코드는 이렇게 작성해준다.

 

여기서 주의할 점은 저기 띠 배너에 unit 번호를 넣을 곳인데,

 

자신이 발급받은 번호는 앱을 출시 할 때 넣는 것이다.

 

저기 배너 번호는 애드몹 사이트에서 발급해준 테스트용 unit id이다.

 

테스트 때, 저것을 사용하지 않으면, 제재를 먹을 수 있으니,

 

테스트시에는 홈페이지에서 알려주는 unit id를 사용하자.

 

https://developers.google.com/admob/android/banner?hl=ko#banner_sizes

 

배너 광고  |  Android  |  Google Developers

배너 광고는 기기 화면의 상단이나 하단에서 앱의 레이아웃 안에 게재됩니다. 사용자가 앱과 상호작용하는 동안 배너가 화면에 표시되며, 일정 시간이 지나면 자동으로 새로 고침될 수 있습니

developers.google.com

 <FrameLayout
        android:id="@+id/ad_view_container6"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

그리고 띠배너가 달리는 원하는 곳에

 

이 프레이아웃을 xml에 설정해주면 된다.

 


전면 광고

 

아마 이 광고 단가가 제일 비싸다고 알려져 있을 것이다.

 

사용자한테는 짜증 날 수 있겠지만,

 

어쩔 수 없다.

 

개발자도 먹고 살아야 한다.

 

문서를 보니

 

 

이렇다고 한다.

 

변경사항을 보니

 

 

곧 20버전이 나온다고 한다.

 

하지만 나는 지금 당장 저 광고가 필요하므로,

 

19.7.0버전을 사용하기로 했다.

 

미리 예행 연습이라고 생각하면 된다.

 

코드는 위에 라이브러리를 그대로 공통으로 쓰고,

 

아래는 자바 코드이다.

public class Fragment extends Fragment {

    private Button button;
    private InterstitialAd interstitialAd; //전면광고 애드몹

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        loadingStart();
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        viewGroup = (ViewGroup) inflater.inflate(R.layout.fragment, container, false);

        FullAd(); //애드몹 전면 광고 다운
        
        button = findViewById(R.id.button);
        button.setOnClickListener( v-> {
         showInterstitial(); //광고 보여주기
        });

        return viewGroup;
    }


    /**
     * 애드몹 전면 광고
     */
    private void FullAd() {

        // 애드 몹 전면광고 초기화 //시작
        MobileAds.initialize(getContext(), new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {
            }
        });

        loadAd(); //광고 다운받기
        startGame(); //광고가 값이 없으면 다시 다운 받기
      
    }
    
    /**
     * 이 아래는 전부 전면 광고이다.
     */
    public void loadAd() {

        AdRequest adRequest = new AdRequest.Builder().build();
        InterstitialAd.load(
                getContext(),
                getString(R.string.여기도 개발자 사이트에서 준 전면광고 배너 unit id를 넣을 것),
                adRequest,
                new InterstitialAdLoadCallback() {
                    @Override
                    public void onAdLoaded(@NonNull InterstitialAd interstitialAd2) {

                        interstitialAd = interstitialAd2;
                        interstitialAd.setFullScreenContentCallback(
                                new FullScreenContentCallback() {
                                    @Override
                                    public void onAdDismissedFullScreenContent() {
                                        interstitialAd = null;
                                        //광고가 사라질 때,
                                    }

                                    @Override
                                    public void onAdFailedToShowFullScreenContent(AdError adError) {
                                        interstitialAd = null;
                                        //광고 보여주기 실패할 때,
                                    }

                                    @Override
                                    public void onAdShowedFullScreenContent() {
                                     //광고가 보여질 때
                                    }
                                });
                    }

                    @Override
                    public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
                        interstitialAd = null; //광고 받기 실패시
                    }
                });
    }


    private void showInterstitial() {
        if (interstitialAd != null) { //광고가 로드 되었으면 보여주기
            interstitialAd.show(getActivity());
        } else {
            //만약 로드가 안되었다면, 로드하기 호출
            startGame();
        }
    }

    private void startGame() {
        //여기서 로드하기 // 한마디로 다운은 처음에 받지만, 실패할경우 한 번 더 받게 리사이클 돌게 해둔 것이다.
        if (interstitialAd == null) {
            loadAd();
        }
    }
    

ca-app-pub-3940256099942544/1033173712

 

이 id도 테스트용으로 사용해야 한다.

 

설명은 코드마다 써놨으니,

 

잘 이해가 될거라 믿는다.

 

아 xml은 딱히 상관 없다.

 

전면 광고는 저 showIntersririal()가 

 

미리 다운로드 된 광고를 보여주는 메서드이기 때문에,

 

원하는 곳에 호출하기를 누르면 된다.

 

그러면

 

버튼을 눌렀을 때, 이런식으로 테스트 광고 화면이 나온다.

 

이로써 애드몹 광고를 간단히 알아보았다.

 

사실 어려울 줄 알았는데, 생각보다 쉬워서

 

다행이었다.

 

이걸로 앱을 만들고 수입을 벌어보자.

 

오늘은 여기 까지 하겠다.

728x90
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading