插页式广告自定义事件

前提条件

完成自定义事件设置

请求插页式广告

在达到广告瀑布流中介链内的自定义事件订单项时, 系统会对您在创建自定义事件时提供的类名称调用 loadInterstitialAd() 方法 在本例中, 该方法位于 SampleCustomEvent 中,然后调用 loadInterstitialAd() 方法在 SampleInterstitialCustomEventLoader 中。

若要请求插页式广告,请创建或修改可扩展 Adapter 的类,以实现 loadInterstitialAd()。此外,请创建一个新类来 实现 MediationInterstitialAd

在我们的 自定义事件示例中, SampleCustomEvent 会扩展 Adapter 类,然后委托给 SampleInterstitialCustomEventLoader

Java

package com.google.ads.mediation.sample.customevent;

import com.google.android.gms.ads.mediation.Adapter;
import com.google.android.gms.ads.mediation.MediationAdConfiguration;
import com.google.android.gms.ads.mediation.MediationAdLoadCallback;
import com.google.android.gms.ads.mediation.MediationInterstitialAd;
import com.google.android.gms.ads.mediation.MediationInterstitialAdCallback;
...

public class SampleCustomEvent extends Adapter {
  private SampleInterstitialCustomEventLoader interstitialLoader;
  @Override
  public void loadInterstitialAd(
      @NonNull MediationInterstitialAdConfiguration adConfiguration,
      @NonNull
          MediationAdLoadCallback<MediationInterstitialAd, MediationInterstitialAdCallback>
              callback) {
    interstitialLoader = new SampleInterstitialCustomEventLoader(adConfiguration, callback);
    interstitialLoader.loadAd();
  }
}

SampleInterstitialCustomEventLoader 负责以下任务:

  • 加载插页式广告,并在加载完成后调用 MediationAdLoadCallback 方法。

  • 实现 MediationInterstitialAd 接口。

  • 接收广告事件回调并将其报告给 Google Mobile Ads SDK

Ad Manager 界面中定义的可选参数 包含在广告配置中。您可以通过 adConfiguration.getServerParameters().getString(MediationConfiguration.CUSTOM_EVENT_SERVER_PARAMETER_FIELD)访问该参数。 通常,此参数是实例化广告对象时广告联盟 SDK 所需的广告单元标识符。

Java

package com.google.ads.mediation.sample.customevent;

import com.google.android.gms.ads.mediation.Adapter;
import com.google.android.gms.ads.mediation.MediationInterstitialAdConfiguration;
import com.google.android.gms.ads.mediation.MediationAdLoadCallback;
import com.google.android.gms.ads.mediation.MediationInterstitialAd;
import com.google.android.gms.ads.mediation.MediationInterstitialAdCallback;
...

public class SampleInterstitialCustomEventLoader extends SampleAdListener
    implements MediationInterstitialAd {

  /** A sample third-party SDK interstitial ad. */
  private SampleInterstitial sampleInterstitialAd;

  /** Configuration for requesting the interstitial ad from the third-party network. */
  private final MediationInterstitialAdConfiguration mediationInterstitialAdConfiguration;

  /** Callback for interstitial ad events. */
  private MediationInterstitialAdCallback interstitialAdCallback;

  /** Callback that fires on loading success or failure. */
  private final MediationAdLoadCallback<MediationInterstitialAd, MediationInterstitialAdCallback>
      mediationAdLoadCallback;

  /** Constructor. */
  public SampleInterstitialCustomEventLoader(
      @NonNull MediationInterstitialAdConfiguration mediationInterstitialAdConfiguration,
      @NonNull MediationAdLoadCallback<MediationInterstitialAd, MediationInterstitialAdCallback>
              mediationAdLoadCallback) {
    this.mediationInterstitialAdConfiguration = mediationInterstitialAdConfiguration;
    this.mediationAdLoadCallback = mediationAdLoadCallback;
  }

  /** Loads the interstitial ad from the third-party ad network. */
  public void loadAd() {
    // All custom events have a server parameter named "parameter" that returns
    // back the parameter entered into the UI when defining the custom event.
    Log.i("InterstitialCustomEvent", "Begin loading interstitial ad.");
    String serverParameter = mediationInterstitialAdConfiguration.getServerParameters().getString(
        MediationConfiguration.CUSTOM_EVENT_SERVER_PARAMETER_FIELD);
    Log.d("InterstitialCustomEvent", "Received server parameter.");

    sampleInterstitialAd =
        new SampleInterstitial(mediationInterstitialAdConfiguration.getContext());
    sampleInterstitialAd.setAdUnit(serverParameter);

    // Implement a SampleAdListener and forward callbacks to mediation.
    sampleInterstitialAd.setAdListener(this);

    // Make an ad request.
    Log.i("InterstitialCustomEvent", "start fetching interstitial ad.");
    sampleInterstitialAd.fetchAd(
        SampleCustomEvent.createSampleRequest(mediationInterstitialAdConfiguration));
  }

public SampleAdRequest createSampleRequest(
      MediationAdConfiguration mediationAdConfiguration) {
    SampleAdRequest request = new SampleAdRequest();
    request.setTestMode(mediationAdConfiguration.isTestRequest());
    request.setKeywords(mediationAdConfiguration.getMediationExtras().keySet());
    return request;
  }
}

无论广告是已成功提取还是遇到错误,您都需要调用 onSuccess()onFailure()。 通过传入实现 MediationInterstitialAd 的类的实例来调用 onSuccess()

通常,这些方法是在您的适配器所实现的 第三方 SDK 的回调中实现的。在此示例中,示例 SDK 具有一个 SampleAdListener 及相关回调:

Java

@Override
public void onAdFetchSucceeded() {
  interstitialAdCallback = mediationAdLoadCallback.onSuccess(this);
}

@Override
public void onAdFetchFailed(SampleErrorCode errorCode) {
  mediationAdLoadCallback.onFailure(SampleCustomEventError.createSampleSdkError(errorCode));
}

MediationInterstitialAd 需要实现 showAd() 方法来展示 广告:

Java

@Override
public void showAd(@NonNull Context context) {
  sampleInterstitialAd.show();
}

将中介事件转发给 Google Mobile Ads SDK

调用 onSuccess() 后,适配器便可以使用返回的 MediationInterstitialAdCallback 对象,将展示事件从 第三方 SDK 转发至 Google Mobile Ads SDK。The SampleInterstitialCustomEventLoader 类扩展了 SampleAdListener 接口,可将回调从示例广告联盟转发到 Google 移动 广告 SDK。

您的自定义事件必须尽可能多地转发这些回调,以便您的应用从 Google 移动广告 SDK 接收这些等效事件。以下是使用回调的示例:

Java

@Override
public void onAdFullScreen() {
  interstitialAdCallback.reportAdImpression();
  interstitialAdCallback.onAdOpened();
}

@Override
public void onAdClosed() {
  interstitialAdCallback.onAdClosed();
}

这样就完成了插页式广告的自定义事件实现。GitHub 上提供了完整的 示例。 GitHub 上提供了完整的示例。 您可在已获支持的广告联盟上直接使用这些示例代码,也可在修改后用于 展示自定义事件插页式广告。