이전에 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
'Android Studio > java' 카테고리의 다른 글
30. [안드로이드/java] 버튼 테두리 없애기 (0) | 2021.10.28 |
---|---|
29. [안드로이드/java] 라인(수평선, 수직성) 그리기 (0) | 2021.10.28 |
27. [안드로이드/java] 동적으로 버튼 색 변경하기 (0) | 2021.10.26 |
26. [안드로이드/java] 카운트 다운 타이머 CountDownTimer 기 (0) | 2021.10.25 |
25. [안드로이드/java] 텍스트 변경 메서드 setText() (0) | 2021.10.25 |