Android(Java)에서 Google AdMob (ex. AdMob)에서 Yandex Mediation으로 마이그레이션
Android에서 Google AdMob (ex. AdMob) 광고를 Yandex Ads Mediation으로 교체하려면 코드에 다음 변경 사항을 적용하세요.
SDK 통합
Yandex Mobile Ads SDK에 대한 종속성을 앱 수준에서 모듈의 Gradle 파일에 추가하세요. 보통 app/build.gradle
입니다.
dependencies {
implementation 'com.google.android.gms:play-services-ads:22.5.0'
}
dependencies {
implementation 'com.yandex.android:mobileads:6.2.0'
implementation 'com.yandex.ads.mediation:mobileads-admob:22.5.0.0'
implementation 'com.google.android.gms:play-services-ads:22.5.0'
}
광고를 로드하기 전에 initialize()
메서드를 사용하여 라이브러리를 초기화하세요.
public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MobileAds.initialize(this, new OnInitializationCompleteListener() {
@Override
public void onInitializationComplete(InitializationStatus initializationStatus) {
}
});
}
}
public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MobileAds.initialize(this, new InitializationListener() {
@Override
public void onInitializationCompleted() {
}
});
}
}
광고 형식
전면 광고
광고 로드
// ...
import com.google.android.gms.ads.interstitial.InterstitialAd;
import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback;
public class MainActivity extends Activity {
private InterstitialAd mInterstitialAd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MobileAds.initialize(this, new OnInitializationCompleteListener() {
@Override
public void onInitializationComplete(InitializationStatus initializationStatus) {}
});
AdRequest adRequest = new AdRequest.Builder().build();
InterstitialAd.load(this,"ca-app-pub-3940256099942544/1033173712", adRequest,
new InterstitialAdLoadCallback() {
@Override
public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
// mInterstitialAd 참조는
// 광고가 로드될 때까지 null입니다.
mInterstitialAd = interstitialAd;
Log.i(TAG, "onAdLoaded");
}
@Override
public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
// 오류를 처리합니다
Log.i(TAG, loadAdError.getMessage());
mInterstitialAd = null;
}
});
}
}
// ...
import com.yandex.mobile.ads.interstitial.InterstitialAd;
import com.yandex.mobile.ads.interstitial.InterstitialAdEventListener;
public class MainActivity extends Activity {
private InterstitialAd mInterstitialAd;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MobileAds.initialize(this, new InitializationListener() {
@Override
public void onInitializationCompleted() {
}
});
final AdRequest adRequest = new AdRequest.Builder().build();
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId("demo-interstitial-yandex");
mInterstitialAd.loadAd(adRequest);
}
}
광고 콜백 설정
광고를 표시하기 전에 콜백을 설정하여 광고와 관련된 이벤트를 추적하세요.
mInterstitialAd.setFullScreenContentCallback(new FullScreenContentCallback(){
@Override
public void onAdDismissedFullScreenContent() {
// 전체 화면 콘텐츠가 해제되었을 때 호출됩니다.
Log.d("TAG", "The ad was dismissed.");
}
@Override
public void onAdFailedToShowFullScreenContent(AdError adError) {
// 전체 화면 콘텐츠를 표시하는 데 실패했을 때 호출됩니다.
Log.d("TAG", "The ad failed to show.");
}
@Override
public void onAdShowedFullScreenContent() {
// 전체 화면 콘텐츠가 표시되었을 때 호출됩니다.
// 다시 표시되지 않도록 참조를
// null로 설정하십시오.
mInterstitialAd = null;
Log.d("TAG", "The ad was shown.");
}
});
mInterstitialAd.setInterstitialAdEventListener(new InterstitialAdEventListener() {
@Override
public void onAdLoaded() {
Log.i(TAG, "onAdLoaded");
}
@Override
public void onAdFailedToLoad(@NonNull AdRequestError error) {
// 오류를 처리합니다
Log.i(TAG, error.getDescription());
}
@Override
public void onAdDismissed() {
// 전면 광고가 해제되었을 때 호출됩니다.
Log.d("TAG", "The ad was dismissed.");
}
@Override
public void onAdShown() {
// 전면 광고가 표시되었을 때 호출됩니다.
Log.d("TAG", "The ad was shown.");
}
@Override
public void onImpression(@Nullable final ImpressionData impressionData) {
// 노출이 추적되었을 때 호출됩니다
Log.d("TAG", "The ad imprassion was tracked.");
}
@Override
public void onAdClicked() {
// 사용자가 광고를 클릭했을 때 호출됩니다.
Log.d("TAG", "The ad was clicked.");
}
@Override
public void onReturnedToApplication() {
// 클릭 후 사용자가 애플리케이션으로 돌아왔을 때 호출됩니다.
Log.d("TAG", "The ad was clicked.");
}
@Override
public void onLeftApplication() {
// 사용자가 광고를 탭한 후 애플리케이션을 종료하려고 할 때 호출됩니다.
Log.d("TAG", "The ad left application after click.");
}
});
광고 표시
전면 광고는 앱 작동이 자연스럽게 중단되는 시점에 표시되어야 합니다. 예를 들어, 게임 레벨 사이 또는 사용자가 작업을 완료한 후가 있습니다. 전면 광고를 표시하려면 show()
메서드를 사용하세요.
if (mInterstitialAd != null) {
mInterstitialAd.show(MyActivity.this);
} else {
Log.d("TAG", "The interstitial ad wasn't ready yet.");
}
if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
} else {
Log.d("TAG", "The interstitial ad wasn't ready yet.");
}
배너 광고
레이아웃에 AdView 객체 추가
배너를 표시하려면 적절한 Activity 또는 Fragment에 BannerAdView
를 배치하세요. 이를 수행하려면 해당 레이아웃 XML 파일에 추가합니다.
# main_activity.xml
...
<com.google.android.gms.ads.AdView
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
</com.google.android.gms.ads.AdView>
...
# main_activity.xml
...
<com.yandex.mobile.ads.banner.BannerAdView
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true">
</com.yandex.mobile.ads.banner.BannerAdView>
...
코드에서 필요한 속성을 지정하세요.
// ...
mBannerAdView = (BannerAdView) findViewById(R.id.adView);
mBannerAdView.setAdUnitId("demo-banner-yandex");
mBannerAdView.setAdSize(AdSize.stickySize(context, 320));
// ...
-
adSize
: 원하는 배너 크기. -
adUnitId
: 광고 단위 고유 ID. 앱의 배너가 Activity의 다른 인스턴스에서 표시되는 경우, Yandex Advertising Network 인터페이스에서 각 배너에 대해 별도의 광고 단위 ID를 생성하는 것이 좋습니다.
또한 프로그래매틱 방식으로 BannerAdView
객체를 생성할 수 있습니다.
AdView adView = new AdView(this);
adView.setAdSize(AdSize.BANNER);
adView.setAdUnitId("ca-app-pub-3940256099942544/6300978111");
// TODO: adView를 뷰 계층 구조에 추가합니다.
BannerAdView adView = new BannerAdView(this);
adView.setAdSize(AdSize.stickySize(context, 320));
adView.setAdUnitId("demo-banner-yandex");
// TODO: adView를 뷰 계층 구조에 추가합니다.
광고 로드
package ...
import ...
import com.google.android.gms.ads.adRequest;
import com.google.android.gms.ads.adView;
public class MainActivity extends AppCompatActivity {
private AdView mAdView;
protected void onCreate (Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MobileAds.initialize(this, new OnInitializationCompleteListener() {
@Override
public void onInitializationComplete(InitializationStatus initializationStatus) {
}
});
mAdView = findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
}
}
package ...
import ...
import com.yandex.mobile.ads.banner.BannerAdEventListener;
import com.yandex.mobile.ads.banner.BannerAdView;
public class MainActivity extends AppCompatActivity {
private BannerAdView mAdView;
protected void onCreate (Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MobileAds.initialize(this, new InitializationListener() {
@Override
public void onInitializationCompleted() {
}
});
mAdView = findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
}
}
광고 표시 이벤트 구독
광고의 동작을 사용자 정의하기 위해 광고 수명 주기 이벤트에 구독할 수 있습니다.
mAdView.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
// 광고 로드가 완료되었을 때 실행할 코드입니다.
}
@Override
public void onAdFailedToLoad(LoadAdError adError) {
// 광고 요청이 실패했을 때 실행할 코드입니다.
}
@Override
public void onAdOpened() {
// 광고가 화면을 덮는 오버레이를 열 때
// 실행할 코드입니다.
}
@Override
public void onAdClicked() {
// 사용자가 광고를 클릭했을 때 실행할 코드입니다.
}
@Override
public void onAdClosed() {
// 사용자가 광고를 탭한 후
// 앱으로 돌아가려고 할 때 실행할 코드입니다.
}
});
mAdView.setBannerAdEventListener(new BannerAdEventListener() {
@Override
public void onAdLoaded() {
// 광고 로드가 완료되었을 때 실행할 코드입니다.
}
@Override
public onAdFailedToLoad(@NonNull AdRequestError error) {
// 광고 요청이 실패했을 때 실행할 코드입니다.
}
@Override
public void onAdClicked() {
// 사용자가 광고를 클릭했을 때 실행할 코드입니다.
}
@Override
public void onImpression(@Nullable final ImpressionData impressionData) {
// 노출이 추적되었을 때 호출됩니다
}
@Override
public void onLeftApplication() {
// 사용자가 광고를 탭한 후 애플리케이션을 종료하려고 할 때 호출됩니다.
}
@Override
public void onReturnedToApplication() {
// 사용자가 광고를 탭한 후
// 앱으로 돌아가려고 할 때 실행할 코드입니다.
}
});
보상형 광고
보상형 광고 객체 로드
import com.google.android.gms.ads.rewarded.RewardedAd;
public class MainActivity extends Activity {
private RewardedAd mRewardedAd;
private final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
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;
}
@Override
public void onAdLoaded(@NonNull RewardedAd rewardedAd) {
mRewardedAd = rewardedAd;
Log.d(TAG, "Ad was loaded.");
}
});
}
}
...
import com.yandex.mobile.ads.rewarded.RewardedAd;
import com.yandex.mobile.ads.rewarded.RewardedAdEventListener;
public class MainActivity extends Activity {
private RewardedAd mRewardedAd;
private final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
AdRequest adRequest = new AdRequest.Builder().build();
mRewardedAd = new RewardedAd(this);
mRewardedAd.setAdUnitId("demo-rewarded-yandex");
}
}
광고 콜백 설정
mRewardedAd.setFullScreenContentCallback(new FullScreenContentCallback() {
@Override
public void onAdShowedFullScreenContent() {
// 광고가 표시되었을 때 호출됩니다.
Log.d(TAG, "Ad was shown.");
}
@Override
public void onAdFailedToShowFullScreenContent(AdError adError) {
// 광고 표시에 실패했을 때 호출됩니다.
Log.d(TAG, "Ad failed to show.");
}
@Override
public void onAdDismissedFullScreenContent() {
// 광고가 해제되었을 때 호출됩니다.
// 광고를 다시 표시하지 않도록 광고 참조를 null로 설정합니다.
Log.d(TAG, "Ad was dismissed.");
mRewardedAd = null;
}
});
mRewardedAd.setRewardedAdEventListener(new RewardedAdEventListener() { @Override
public void onAdLoaded() {
Log.i(TAG, "onAdLoaded");
}
@Override
public void onAdFailedToLoad(@NonNull AdRequestError error) {
// 오류를 처리합니다
Log.i(TAG, error.getDescription());
}
public void onRewarded(@NonNull final Reward reward) {
// 보상을 처리합니다.
Log.d(TAG, "The user earned the reward.");
int rewardAmount = rewardItem.getAmount();
String rewardType = rewardItem.getType();
}
@Override
public void onAdDismissed() {
// 전면 광고가 해제되었을 때 호출됩니다.
Log.d("TAG", "The ad was dismissed.");
}
@Override
public void onAdShown() {
// 전면 광고가 표시되었을 때 호출됩니다.
Log.d("TAG", "The ad was shown.");
}
@Override
public void onImpression(@Nullable final ImpressionData impressionData) {
// 노출이 추적되었을 때 호출됩니다
Log.d("TAG", "The ad imprassion was tracked.");
}
@Override
public void onAdClicked() {
// 사용자가 광고를 클릭했을 때 호출됩니다.
Log.d("TAG", "The ad was clicked.");
}
@Override
public void onReturnedToApplication() {
// 클릭 후 사용자가 애플리케이션으로 돌아왔을 때 호출됩니다.
Log.d("TAG", "The ad was clicked.");
}
@Override
public void onLeftApplication() {
// 사용자가 광고를 탭한 후 애플리케이션을 종료하려고 할 때 호출됩니다.
Log.d("TAG", "The ad left application after click.");
}
});
광고 표시
보상형 광고를 표시하려면 RewardedAdEventListener
객체를 사용하여 보상 이벤트를 처리하세요.
if (mRewardedAd != null) {
Activity activityContext = MainActivity.this;
mRewardedAd.show(activityContext, new OnUserEarnedRewardListener() {
@Override
public void onUserEarnedReward(@NonNull RewardItem rewardItem) {
// 보상을 처리합니다.
Log.d(TAG, "The user earned the reward.");
int rewardAmount = rewardItem.getAmount();
String rewardType = rewardItem.getType();
}
});
} else {
Log.d(TAG, "The rewarded ad wasn't ready yet.");
}
if (mRewardedAd.isLoaded()) {
mRewardedAd.show();
} else {
Log.d(TAG, "The rewarded ad wasn't ready yet.");
}