中介适配器接收来自 Google 移动广告 SDK 的消息和请求,并与第三方广告联盟 SDK 通信以完成这些请求。
本指南适用于希望为 Google 移动广告中介构建激励广告中介适配器的广告联盟。下面的代码段中使用了示例 SDK 进行演示。您可以在我们的 Android中介项目中找到为此示例 SDK 构建的适配器的完整实现。本指南介绍了如何构建适配器。
定义适配器类名称和服务器参数
对于通过 AdMob 中介平台进行中介的广告联盟,通常需要使用一个或多个标识符来识别发布商。这些标识符以服务器参数的形式表示。当您在 AdMob 界面中配置用于中介的第三方广告联盟时,可以定义这些标识符。
在开发中介适配器之前,您必须向 Google 提供您的适配器类名称和其他必需参数,以获得广告网络的访问权限。
实现 Adapter 类
第一步是实现 Adapter 抽象类:
...
import com.google.android.gms.ads.mediation.Adapter;
...
public class SampleAdapter extends Adapter {
...
}
此变更可确保您的类实现下面讨论的多种方法。
报告版本号
适配器必须向 Google 移动广告 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 移动广告 SDK 后,系统会对在 AdMob 界面中为该应用配置的所有适配器调用 initialize()
。
List<MediationConfiguration>
参数会提供在 AdMob 界面中为广告联盟配置的所有展示位置的相关信息。使用此信息来初始化广告联盟 SDK。初始化广告联盟 SDK 后,您可以通过对 initialize()
调用中提供的 InitializationCompleteCallback
参数调用 onInitializationSucceeded()
或 onInitializationFailed()
方法,向 Google 移动广告 SDK 报告初始化是成功还是失败。
...
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 移动广告 SDK 报告广告加载是成功还是失败。
在调用 onSuccess()
后,MediationRewardedAdCallback
对象将可用,稍后您将使用该对象中继其他广告事件,例如点击或授予的奖励。
...
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());
}
...
}
展示广告
当系统通知 SDK 成功加载广告后,Google 移动广告 SDK 可能会随时调用适配器的 showAd()
方法。适配器应展示激励广告。如果由于任何原因无法展示广告,请调用 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);
}
...
}
向移动广告 SDK 报告广告事件
展示广告后,适配器应使用广告成功加载时提供的 MediationRewardedAdCallback
对象,根据需要向 Google 移动广告 SDK 报告广告生命周期事件。
通常,这些回调是从广告联盟 SDK 触发的回调方法转发的。以下示例实现了示例 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 移动广告 SDK 报告的广告事件:
广告事件 | 说明 |
---|---|
onAdOpened() | 向 Google 移动广告 SDK 发出广告将打开的通知。 |
onVideoStart() | 向 Google 移动广告 SDK 发出激励广告开始播放的通知。 |
reportAdImpression() | 向 Google 移动广告 SDK 发出广告展示了一次的通知。 |
onVideoComplete() | 向 Google 移动广告 SDK 发出激励广告已播放完毕的通知。 |
onUserEarnedReward() | 向 Google 移动广告 SDK 发出用户已获得奖励的通知。 |
reportAdClicked() | 向 Google 移动广告 SDK 发出用户已点击广告的通知。 |
onAdClosed() | 向 Google 移动广告 SDK 发出广告已关闭的通知。 |
onAdFailedToShow() | 向 Google 移动广告 SDK 发出广告未能展示的通知。 |