Адаптер медиации получает сообщения и запросы от Google Mobile Ads SDK и взаимодействует со сторонним сетевым SDK для выполнения этих запросов.
Это руководство предназначено для рекламных сетей, желающих создать адаптер посредничества рекламы с вознаграждением для Google Mobile Ads Mediation. Пример SDK используется в приведенных ниже фрагментах кода в демонстрационных целях. Полную реализацию адаптера , созданного для этого примера SDK, можно найти в нашем проекте медиацииAndroid . В этом руководстве объясняется, как собрать адаптер.
Определите имя класса адаптера и параметры сервера.
Рекламным сетям, работающим через посредническую платформу AdMob, обычно требуется один или несколько идентификаторов для идентификации издателя. Эти идентификаторы представлены как параметры сервера и определяются при настройке сторонней рекламной сети для посредничества в пользовательском интерфейсе AdMob .
Прежде чем разрабатывать адаптер медиации, вы должны предоставить Google имя класса адаптера и другие необходимые параметры, чтобы получить доступ к вашей рекламной сети.
Реализация класса адаптера
Первым шагом является реализация абстрактного класса адаптера :
...
import com.google.android.gms.ads.mediation.Adapter;
...
public class SampleAdapter extends Adapter {
...
}
Это изменение гарантирует, что ваш класс реализует несколько методов, обсуждаемых ниже.
Номера версий отчета
Адаптер должен сообщать Google Mobile Ads SDK как версию самого адаптера, так и версию стороннего SDK. Версии сообщаются с помощью VersionInfo
.
Адаптеры Google с открытым исходным кодом и версии с открытым исходным кодом используют схему версии адаптера из 4 цифр, но VersionInfo
допускает только 3 цифры. Чтобы обойти эту проблему, рекомендуется объединить последние две цифры в версию патча, как показано ниже:
...
import com.google.android.gms.ads.VersionInfo;
...
public class SampleAdapter extends Adapter implements SampleRewardedAdListener {
...
@Override
public VersionInfo getVersionInfo() {
String versionString = BuildConfig.VERSION_NAME;
String[] splits = versionString.split("\\.");
if (splits.length >= 4) {
int major = Integer.parseInt(splits[0]);
int minor = Integer.parseInt(splits[1]);
int micro = Integer.parseInt(splits[2]) * 100 + Integer.parseInt(splits[3]);
return new VersionInfo(major, minor, micro);
}
return new VersionInfo(0, 0, 0);
}
@Override
public VersionInfo getSDKVersionInfo() {
String versionString = SampleAdRequest.getSDKVersion();
String[] splits = versionString.split("\\.");
if (splits.length >= 3) {
int major = Integer.parseInt(splits[0]);
int minor = Integer.parseInt(splits[1]);
int micro = Integer.parseInt(splits[2]);
return new VersionInfo(major, minor, micro);
}
return new VersionInfo(0, 0, 0);
}
...
}
Инициализируйте адаптер
При инициализации приложения Google Mobile Ads SDK initialize()
вызывается на всех адаптерах, настроенных для приложения в пользовательском интерфейсе AdMob.
Аргумент List<MediationConfiguration>
предоставляет информацию обо всех местах размещения, настроенных для вашей рекламной сети в пользовательском интерфейсе AdMob. Используйте эту информацию для инициализации SDK вашей рекламной сети. После инициализации SDK вашей рекламной сети сообщите об успешной или неудачной инициализации в SDK Google Mobile Ads, вызвав метод onInitializationSucceeded()
или onInitializationFailed()
для аргумента InitializationCompleteCallback
, указанного в вызове initialize()
.
...
import com.google.android.gms.ads.mediation.InitializationCompleteCallback;
import com.google.android.gms.ads.mediation.MediationConfiguration;
...
public class SampleAdapter extends Adapter {
...
@Override
public void initialize(
Context context,
InitializationCompleteCallback initializationCompleteCallback,
List<MediationConfiguration> mediationConfigurations) {
if (context == null) {
initializationCompleteCallback.onInitializationFailed(
"Initialization Failed: Context is null.");
return;
}
// The Sample SDK doesn't have an initialization method, so this example
// immediately reports a success callback.
initializationCompleteCallback.onInitializationSucceeded();
}
...
}
Запросить рекламу с вознаграждением
Используйте метод loadRewardedAd()
для запроса рекламы с вознаграждением. Сохраните ссылку на MediationAdLoadCallback
, которая позволяет сообщать об успешной или неудачной загрузке объявления в Google Mobile Ads SDK.
Объект MediationRewardedAdCallback
будет доступен после вызова onSuccess()
, который вы позже будете использовать для ретрансляции других рекламных событий, таких как клики или предоставленные вознаграждения.
...
import com.google.ads.mediation.sample.sdk.SampleAdRequest;
import com.google.ads.mediation.sample.sdk.SampleRewardedAd;
import com.google.ads.mediation.sample.sdk.SampleRewardedAdListener;
import com.google.android.gms.ads.mediation.MediationAdLoadCallback;
import com.google.android.gms.ads.mediation.MediationRewardedAd;
import com.google.android.gms.ads.mediation.MediationRewardedAdCallback;
...
public class SampleAdapter extends Adapter, SampleRewardedAdListener
implements MediationRewardedAd {
...
/**
* A MediationAdLoadCallback that handles any callback when a Sample rewarded
* ad finishes loading.
*/
private MediationAdLoadCallback<MediationRewardedAd, MediationRewardedAdCallback> adLoadCallBack;
/**
* Represents a SampleRewardedAd.
*/
private SampleRewardedAd sampleRewardedAd;
/**
* Used to forward rewarded video ad events to the Google Mobile Ads SDK..
*/
private MediationRewardedAdCallback rewardedAdCallback;
...
// Hold a reference to the MediationAdLoadCallback object to report ad load
// events to the Google Mobile Ads SDK.
@Override
public void loadRewardedAd(
MediationRewardedAdConfiguration mediationRewardedAdConfiguration,
MediationAdLoadCallback<MediationRewardedAd, MediationRewardedAdCallback>
mediationAdLoadCallback) {
adLoadCallBack = mediationAdLoadCallback;
MediationRewardedAdConfiguration adConfiguration = mediationRewardedAdConfiguration;
String adUnitId = adConfiguration.getServerParameters().getString(SAMPLE_AD_UNIT_KEY);
sampleRewardedAd = new SampleRewardedAd(adUnitId);
SampleAdRequest request = new SampleAdRequest();
sampleRewardedAd.setListener(this);
sampleRewardedAd.loadAd(request);
}
// Hold a reference to the MediationRewardedAdCallback object to report ad
// lifecycle events to the Google Mobile Ads SDK.
@Override
public void onRewardedAdLoaded() {
rewardedAdCallback = mediationAdLoadCallBack.onSuccess(this);
}
@Override
public void onRewardedAdFailedToLoad(SampleErrorCode error) {
mediationAdLoadCallBack.onFailure(error.toString());
}
...
}
Показать объявление
Google Mobile Ads SDK может вызвать метод showAd()
вашего адаптера в любое время после того, как SDK получит уведомление об успешной загрузке объявления. Адаптер должен отображать рекламу с вознаграждением. Если по какой-либо причине объявление не может быть показано, вызовите обратный вызов onAdFailedToShow()
.
public class SampleAdapter extends Adapter, SampleRewardedAdListener
implements MediationRewardedAd {
...
@Override
public void showAd(Context context) {
if (!(context instanceof Activity)) {
rewardedAdCallback.onAdFailedToShow(
"An activity context is required to show Sample rewarded ad.");
return;
}
Activity activity = (Activity) context;
if (!sampleRewardedAd.isAdAvailable()) {
rewardedAdCallback.onAdFailedToShow("No ads to show.");
return;
}
sampleRewardedAd.showAd(activity);
}
...
}
Сообщайте о рекламных событиях в Mobile Ads SDK
После отображения объявления адаптер должен сообщать о событиях жизненного цикла объявления соответствующим образом в Google Mobile Ads SDK, используя объект MediationRewardedAdCallback
, предоставляемый во время успешной загрузки объявления.
Обычно эти обратные вызовы перенаправляются из методов обратных вызовов, запускаемых SDK вашей рекламной сети. В этом примере реализуются обратные вызовы Sample SDK и сопоставляются с обратными вызовами, доступными в MediationRewardedAdCallback
.
public class SampleAdapter extends Adapter, SampleRewardedAdListener
implements MediationRewardedAd {
...
@Override
public void onAdRewarded(final String rewardType, final int amount) {
RewardItem rewardItem =
new RewardItem() {
@Override
public String getType() {
return rewardType;
}
@Override
public int getAmount() {
return amount;
}
};
rewardedAdCallback.onUserEarnedReward(rewardItem);
}
@Override
public void onAdClicked() {
rewardedAdCallback.reportAdClicked();
}
@Override
public void onAdFullScreen() {
rewardedAdCallback.onAdOpened();
rewardedAdCallback.onVideoStart();
rewardedAdCallback.reportAdImpression();
}
@Override
public void onAdClosed() {
rewardedAdCallback.onAdClosed();
}
@Override
public void onAdCompleted() {
rewardedAdCallback.onVideoComplete();
}
...
}
Рекламные события, о которых следует сообщать в Google Mobile Ads SDK, подробно описаны ниже:
Рекламное событие | Описание |
---|---|
onAdOpened() | Уведомляет Google Mobile Ads SDK о том, что объявление будет открыто. |
onVideoStart() | Уведомляет Google Mobile Ads SDK о начале воспроизведения объявления с вознаграждением. |
отчетРекламное впечатление() | Уведомляет Google Mobile Ads SDK о показе объявления. |
onVideoComplete() | Уведомляет Google Mobile Ads SDK о завершении воспроизведения объявления с вознаграждением. |
onUserEarnedReward() | Уведомляет Google Mobile Ads SDK о том, что пользователь получил вознаграждение. |
отчет по клику по объявлению() | Уведомляет Google Mobile Ads SDK о клике по объявлению. |
onAdClosed() | Уведомляет Google Mobile Ads SDK о том, что объявление закрыто. |
onAdFailedToShow() | Уведомляет Google Mobile Ads SDK о том, что объявление не удалось показать. |