Android Studio/java

28. [안드로이드/java] 구글 애드몹 보상형광고 넣기

drizzle0925 2021. 10. 27. 15:29
728x90

이전에 com.google.android.gms:play-services-ads:11.8.0으로 보상형광고를 넣은적 있습니다. (아래링크)

https://like-a-drizzle.tistory.com/109

 

09. [안드로이드/JAVA] 구글 애드몹 보상형광고 넣기

안드로이드 스튜디오에서 새 프로젝트를 생성합니다. Empty Activity를 선택합니다. (다른거 선택해도 무관합니다) Name을 정해주고, Minimun SDK는 API19로 했습니다. 설정을 완료하셨다면 Finish를 눌러주

like-a-drizzle.tistory.com

 

그런데 이번에 com.google.android.gms:play-services-ads:20.0.0으로 올렸는데 코드 전체에 에러가 발생했습니다.

찾아보니 19.7.0에서 대폭 내용이 업데이트되면 코드 작성방법이도 많이 변경된거 같습니다.

이번에 새롭게 보상형 광고의 구현 방법을 정리해 보았습니다.

 

안드로이드 스튜디오에서 새 프로젝트를 생성합니다.

 

Name을 입력하고 Finish를 클릭합니다.

 

build.gradle (Project) 파일을 열어서 google()을 확인합니다.

 

 

build gradle (module)에 아래 코드를 추가합니다.

코드를 추가하고 Sync Now를 클릭합니다.

implementation 'com.google.android.gms:play-services-ads:20.0.0'

 

 

app > manifests > AndroidManifest.xml에 아래 코드를 추가합니다.

<uses-permission android:name="android.permission.INTERNET" />

<application
android:hardwareAccelerated="true"
...

<!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 -->
<meta-data
    android:name="com.google.android.gms.ads.APPLICATION_ID"
    android:value="ca-app-pub-3940256099942544~3347511713"/>

 

 

res > layout > activity_main.xml에 아래 코드를 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="가지고 있는 코인"
        android:textSize="30sp"
        android:textStyle="bold"/>

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="0"
        android:textSize="50sp"
        />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button"
        android:text="광고 보고 코인 받기"
        android:textSize="20sp"
        android:layout_marginTop="20dp"/>
</LinearLayout>

 

MainActivity 에 아래 코드를 입력합니다.

package com.drizzle.reward;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.google.android.gms.ads.AdError;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.FullScreenContentCallback;
import com.google.android.gms.ads.LoadAdError;
import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.OnUserEarnedRewardListener;
import com.google.android.gms.ads.initialization.InitializationStatus;
import com.google.android.gms.ads.initialization.OnInitializationCompleteListener;
import com.google.android.gms.ads.rewarded.RewardItem;
import com.google.android.gms.ads.rewarded.RewardedAd;
import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback;

public class MainActivity extends AppCompatActivity {
    private RewardedAd mRewardedAd;
    private final String TAG = "--->AdMob";

    private Button btn;
    private TextView textView;

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

        btn = findViewById(R.id.button);
        textView = findViewById(R.id.textView);

        MobileAds.initialize(this, new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {
                loadRewardedAd();
            }
        });

        btn.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                showRewardedAd();
            }
        });
    }

    private void loadRewardedAd() {
        AdRequest adRequest = new AdRequest.Builder().build();

        RewardedAd.load(this, "ca-app-pub-3940256099942544/5224354917",
                adRequest, new RewardedAdLoadCallback(){
            @Override
            public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
                Log.d(TAG, loadAdError.getMessage());
                mRewardedAd = null;
                Log.d(TAG, "onAdFailedToLoad");
            }

            @Override
            public void onAdLoaded(@NonNull RewardedAd rewardedAd) {
                mRewardedAd = rewardedAd;
                Log.d(TAG, "광고가 로드 되었습니다.");

                mRewardedAd.setFullScreenContentCallback(new FullScreenContentCallback(){
                    @Override
                    public void onAdShowedFullScreenContent() {
                        Log.d(TAG, "광고가 표시되었습니다.");
                        mRewardedAd = null;
                    }

                    @Override
                    public void onAdFailedToShowFullScreenContent(AdError adError) {
                        Log.d(TAG, "광고 표시에 실패했습니다..");
                    }

                    @Override
                    public void onAdDismissedFullScreenContent() {
                        Log.d(TAG, "광고가 닫혔습니다.");
                        // 광고를 닫으면 다시 광고를 로드합니다.
                        loadRewardedAd();
                    }
                });
            }
        });
    }
    private void showRewardedAd(){
        if(mRewardedAd != null){
            mRewardedAd.show(this, new OnUserEarnedRewardListener() {
                @Override
                public void onUserEarnedReward(@NonNull RewardItem rewardItem) { // 사용자에게 보상을 제공
                    Log.d(TAG,"사용자가 보상을 받았습니다.");
                    int rewardAmount = rewardItem.getAmount();
                    String rewardType = rewardItem.getType();

                    int reward = Integer.parseInt(textView.getText().toString().trim());

                    textView.setText(String.valueOf(reward + rewardAmount));
                }
            });
        }else{
            Log.d(TAG, "보상형 광고가 아직 준비되지 않았습니다.");
        }
    }
}

결과물


Github

https://github.com/jun0925/rewarded_Ad_SDK_20_0_0_AdMob_AndroidStuido

 

GitHub - jun0925/rewarded_Ad_SDK_20_0_0_AdMob_AndroidStuido

Contribute to jun0925/rewarded_Ad_SDK_20_0_0_AdMob_AndroidStuido development by creating an account on GitHub.

github.com

 

728x90