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.");
}

지원 문의