插頁式廣告自訂事件

必要條件

完成自訂事件設定

請求插頁式廣告

當刊登序列中介服務鏈執行到自訂事件委刊項,系統會以您在建立自訂事件時指定的類別名稱,呼叫 loadInterstitialAd() 方法。在本例中,該方法位於 SampleCustomEvent,會接著呼叫 SampleInterstitialCustomEventLoader 中的 loadInterstitialAd() 方法。

如要請求插頁式廣告,請建立或修改 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 (Beta 版)。

在 AdMob UI 中定義的選用參數會包含在廣告設定,使用 adConfiguration.getServerParameters().getString(MediationConfiguration.CUSTOM_EVENT_SERVER_PARAMETER_FIELD) 即可存取。這項參數通常是廣告單元 ID,廣告聯播網 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 (Beta 版)

呼叫 onSuccess() 後,轉接程式可使用傳回的 MediationInterstitialAdCallback 物件,將呈現事件從第三方 SDK 轉送至 Google Mobile Ads SDK (Beta)。SampleInterstitialCustomEventLoader 類別可延伸 SampleAdListener 介面,將回呼從範例廣告聯播網轉送到 Google Mobile Ads SDK。

自訂事件應盡量將這些回呼轉送至 Google Mobile Ads SDK,這樣應用程式才能收到相應的事件通知。以下是回呼使用範例:

Java

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

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

到這裡就完成插頁式廣告的自訂事件導入設定!GitHub 上有完整的範例可參考。範例可直接用於支援的廣告聯播網,您也可修改現有範例,顯示自訂事件插頁式廣告。