AdMob
1. 기본 요건
ADX Android SDK를 프로젝트에 추가합니다.
Rewarded Ad용으로 발급받은 애드몹 Ad Unit ID를 사용합니다.
광고를 요청하기 전에 SDK 초기화를 먼저 진행합니다.
SDK 초기화는 앱 실행 시 한 번만 호출하여 주시고, 광고 요청은 초기화가 완료된 후에 이뤄져야 합니다.
AndroidManifest.xml
파일에<meta-data>
태그에"com.google.android.gms.ads.APPLICATIONID"
와 발급된 애드몹 APP ID를 추가합니다.
<application>
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="YOUR_ADMOB_APP_ID"/>
</application>
</manifest>
2. 구현
Rewarded Ad load에 시간이 걸릴 수 있으니, 미리 load 해두신 다음 사용하시는 것을 권장드립니다.
AdRequest
를 생성합니다.GDPR 관련 규정을 준수하는 경우, 사용자가 개인정보 활용 및 수집을 거부한 상태(
ADXConsentStateDenied
)일 때npa
를1
로 추가합니다.
RewardAd
의load()
로 광고를 로드합니다.광고 로드가 완료되면
onAdLoaded
callback이 호출됩니다.표시 할 광고가 있는지 확인 후,
show()
로 광고를 표시합니다.광고 시청을 모두 완료하면
onUserEarnedReward
callback을 받은 후 보상을 지급하도록 처리합니다.
public class RewardedVideoAdMobActivity extends AppCompatActivity {
private RewardedAd rewardedAd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rewarded_video_admob);
loadAd();
}
public void loadAd() {
Bundle extras = new Bundle();
if (ADXGDPR.ADXConsentState.values()[ADXGdprManager.getResultGDPR(this)] == ADXGDPR.ADXConsentState.ADXConsentStateDenied) {
extras.putString("npa", "1");
}
AdRequest adRequest = new AdRequest.Builder()
.addNetworkExtrasBundle(AdMobAdapter.class, extras)
.build();
RewardedAd.load(this, "<YOUR_ADMOB_AD_UNIT_ID>", adRequest, new RewardedAdLoadCallback() {
@Override
public void onAdLoaded(@NonNull RewardedAd rewardedAd) {
// Ad successfully loaded.
Log.d(TAG, "onAdLoaded");
mRewardedAd = rewardedAd;
mRewardedAd.setFullScreenContentCallback(new FullScreenContentCallback() {
@Override
public void onAdFailedToShowFullScreenContent(@NonNull AdError adError) {
// Ad failed to display.
Log.d(TAG, "onRewardedAdFailedToShow : " + adError.getCode());
}
@Override
public void onAdShowedFullScreenContent() {
// Ad opened.
mRewardedAd = null;
Log.d(TAG, "onAdShowedFullScreenContent");
}
@Override
public void onAdDismissedFullScreenContent() {
// Ad closed.
Log.d(TAG, "onAdDismissedFullScreenContent");
loadAd();
}
@Override
public void onAdImpression() {
// Ad Impression
Log.d(TAG, "onAdImpression");
}
});
}
@Override
public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
// Ad failed to load.
Log.d(TAG, "onRewardedAdFailedToLoad : " + loadAdError.getCode());
}
});
}
public void showAd() {
if (mRewardedAd != null) {
mRewardedAd.show(this, new OnUserEarnedRewardListener() {
@Override
public void onUserEarnedReward(@NonNull RewardItem rewardItem) {
// User earned reward.
Log.d(TAG, "onUserEarnedReward");
}
});
} else {
Log.d(TAG, "The rewarded ad wasn't loaded yet.");
loadAd();
}
}
@Override
protected void onDestroy() {
mRewardedAd = null;
super.onDestroy();
}
}
class RewardedVideoAdMobActivity : AppCompatActivity() {
private var mRewardedAd: RewardedAd? = null
private var mButton: Button? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_rewarded_video_admob)
loadAd()
}
fun loadAd() {
val extras = Bundle()
if (ADXGDPR.ADXConsentState.values()[ADXGdprManager.getResultGDPR(this)] == ADXGDPR.ADXConsentState.ADXConsentStateDenied) {
extras.putString("npa", "1")
}
val adRequest = AdRequest.Builder()
.addNetworkExtrasBundle(AdMobAdapter::class.java, extras)
.build()
RewardedAd.load(this, "<YOUR_ADMOB_AD_UNIT_ID>", adRequest, object : RewardedAdLoadCallback() {
override fun onAdLoaded(rewardedAd: RewardedAd) {
// Ad successfully loaded.
Log.d(TAG, "onAdLoaded")
mRewardedAd = rewardedAd
mRewardedAd?.fullScreenContentCallback = object : FullScreenContentCallback() {
override fun onAdFailedToShowFullScreenContent(adError: AdError) {
// Ad failed to display.
Log.d(TAG, "onRewardedAdFailedToShow : " + adError.code)
}
override fun onAdShowedFullScreenContent() {
// Ad opened.
mRewardedAd = null
Log.d(TAG, "onAdShowedFullScreenContent")
}
override fun onAdDismissedFullScreenContent() {
// Ad closed.
Log.d(TAG, "onAdDismissedFullScreenContent")
loadAd()
}
override fun onAdImpression() {
// Ad Impression
Log.d(TAG, "onAdImpression")
}
}
}
override fun onAdFailedToLoad(loadAdError: LoadAdError) {
// Ad failed to load.
Log.d(TAG, "onRewardedAdFailedToLoad : " + loadAdError.code)
}
})
}
fun showAd() {
if (mRewardedAd != null) {
mRewardedAd!!.show(this) { // User earned reward.
Log.d(TAG, "onUserEarnedReward")
}
} else {
Log.d(TAG, "The rewarded ad wasn't loaded yet.")
loadAd()
}
}
override fun onDestroy() {
mRewardedAd = null
super.onDestroy()
}
}
3. Callback
FullScreenContentCallback
을 설정하여 특정 이벤트를 수신할 수 있습니다.
RewardedAd
는 일회용 객체로 보상형 광고가 표시된 후에는 다시 표시되지 않습니다.
이전 광고가 닫힌 직후 다음 보상형 광고가 로드될 수 있도록 onAdDidDismissFullScreenContent()
에 다른 보상형 광고를 로드하는 것이 좋습니다.
mRewardedAd.setFullScreenContentCallback(new FullScreenContentCallback() {
@Override
public void onAdFailedToShowFullScreenContent(@NonNull AdError adError) {
// Ad failed to display.
Log.d(TAG, "onRewardedAdFailedToShow : " + adError.getCode());
}
@Override
public void onAdShowedFullScreenContent() {
// Ad opened.
mRewardedAd = null;
Log.d(TAG, "onAdShowedFullScreenContent");
}
@Override
public void onAdDismissedFullScreenContent() {
// Ad closed.
Log.d(TAG, "onAdDismissedFullScreenContent");
loadAd();
}
@Override
public void onAdImpression() {
// Ad Impression
Log.d(TAG, "onAdImpression");
}
});
mRewardedAd?.fullScreenContentCallback = object : FullScreenContentCallback() {
override fun onAdFailedToShowFullScreenContent(adError: AdError) {
// Ad failed to display.
Log.d(TAG, "onRewardedAdFailedToShow : " + adError.code)
}
override fun onAdShowedFullScreenContent() {
// Ad opened.
mRewardedAd = null
Log.d(TAG, "onAdShowedFullScreenContent")
}
override fun onAdDismissedFullScreenContent() {
// Ad closed.
Log.d(TAG, "onAdDismissedFullScreenContent")
loadAd()
}
override fun onAdImpression() {
// Ad Impression
Log.d(TAG, "onAdImpression")
}
}
4. 테스트 기기 등록
개발 중 상용 광고 키로 광고를 테스트하려는 경우 아래 단계에 따라 테스트 기기를 등록 후 사용해주시기 바랍니다.
테스트 기기 미등록 상태로 테스트할 경우 계정이 정지될 수 있습니다.
1) ADXLibrary를 적용 후 광고를 로드하는 코드가 삽입된 상태로 실행해주시면 콘솔에서 해당 로그를 확인하실 수 있습니다.
I/Ads: Use RequestConfiguration.Builder.setTestDeviceIds(Arrays.asList("33BE2250B43518CCDA7DE426D04EE231"))
to get test ads on this device."
2) 출력된 Device ID를 복사하여 아래와 같이 setTestDeviceIds()
를 호출하여 테스트 기기를 등록해주시면 됩니다.
앱을 출시하기 전에 이러한 테스트 기기를 설정하는 코드를 반드시 삭제하세요.
RequestConfiguration configuration = new RequestConfiguration.Builder()
.setTestDeviceIds(Arrays.asList("33BE2250B43518CCDA7DE426D04EE231")).build();
MobileAds.setRequestConfiguration(configuration);
val configuration = RequestConfiguration.Builder()
.setTestDeviceIds(Arrays.asList("33BE2250B43518CCDA7DE426D04EE231")).build()
MobileAds.setRequestConfiguration(configuration)
Last updated