Google Interstitial(インタースティシャル)広告の今どきの実装方法はどこに

さあ、そんな広告を実装しようと思いました。

Interstitials_-_Google_Mobile_Ads_SDK_—_Google_Developers

とりあえず、ぐぐろうとします。

頭悪いので、そこでまず悩みます。

「Google」なのか「Admob」なのか

「インタースティシャル」なのか「インターステイシャル」なのか

「interstatial」なのか「interstitial」なのか

「GooglePlaySDK(gms)」同梱なのか、別SDKなのか。

とりあえず、こんなこまかいことは Google検索に考えてもらうとして

これら単語をやみくもに入力、検索して実装説明方法を探します。

それらしいのがみつかりました。

import com.google.android.gms.ads.doubleclick.*;

public class InterstitialExample extends Activity {

  private PublisherInterstitialAd interstitial;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Create the interstitial.
    interstitial = new PublisherInterstitialAd(this);
    interstitial.setAdUnitId(MY_AD_UNIT_ID);

    // Create ad request.
    PublisherAdRequest adRequest = new PublisherAdRequest.Builder().build();

    // Begin loading your interstitial.
    interstitial.loadAd(adRequest);

  }

  // Invoke displayInterstitial() when you are ready to display an interstitial.
  public void displayInterstitial() {
    if (interstitial.isLoaded()) {
      interstitial.show();
    }
  }
}

DoubleClick for Publishers (DFP) Interstitial Ads - Google Mobile Ads SDK — Google Developers

が、動きません。Admobの上位の「DFP」なるしくみのようです。

で次。

import com.google.ads.*;

public class BannerExample extends Activity {
  private InterstitialAd interstitial;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // インタースティシャルを作成する
    interstitial = new InterstitialAd(this, MY_INTERSTITIAL_UNIT_ID);

    // 広告リクエストを作成する
    AdRequest adRequest = new AdRequest();
    // インタースティシャルの読み込みを開始する
    interstitial.loadAd(adRequest);
  }
}

Google AdMob Ads Android(上級) - Google Mobile Ads SDK — Google Developers

これもダメです。

最新の「GooglePlay SDK(gms)」の実装ではなく、古いAdmobSDKの実装方法のようです。

で、次。

import com.google.android.gms.ads.*;

public class BannerExample extends Activity {

  private InterstitialAd interstitial;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Create the interstitial.
    interstitial = new InterstitialAd(this);
    interstitial.setAdUnitId(MY_AD_UNIT_ID);

    // Create ad request.
    AdRequest adRequest = new AdRequest.Builder().build();

    // Begin loading your interstitial.
    interstitial.loadAd(adRequest);

  }

  // Invoke displayInterstitial() when you are ready to display an interstitial.
  public void displayInterstitial() {
    if (interstitial.isLoaded()) {
      interstitial.show();
    }
  }
}

Interstitials - Google Mobile Ads SDK — Google Developers

この実装方法でいけました。

公式ドキュメントを探すだけでもめんどくさいです。

「Admob」なのか「DFP」
「日本語ページ」なのか「英語ページ」
「GooglePlaySDK(gms)同梱」なのかそうでないのか

Google検索を利用しての検索結果も混合していますのでご注意を。

結局は、上の該当公式ドキュメントにも記載されてるリンクから以下のコードサンプル1ページをみるだけでケリがつくはず。

package com.google.example.gms.ads.advanced;

import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.InterstitialAd;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

/**
 * An {@link Activity} that requests and can display an InterstitialAd.
 */
public class InterstitialSample extends Activity {
  /** The log tag. */
  private static final String LOG_TAG = "InterstitialSample";

  /** Your ad unit id. Replace with your actual ad unit id. */
  private static final String AD_UNIT_ID = "INSERT_YOUR_AD_UNIT_ID_HERE";

  /** The interstitial ad. */
  private InterstitialAd interstitialAd;

  /** The button that show the interstitial. */
  private Button showButton;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Create an ad.
    interstitialAd = new InterstitialAd(this);
    interstitialAd.setAdUnitId(AD_UNIT_ID);

    // Set the AdListener.
    interstitialAd.setAdListener(new AdListener() {
      @Override
      public void onAdLoaded() {
        Log.d(LOG_TAG, "onAdLoaded");
        Toast.makeText(InterstitialSample.this, "onAdLoaded", Toast.LENGTH_SHORT).show();

        // Change the button text and enable the button.
        showButton.setText("Show Interstitial");
        showButton.setEnabled(true);
      }

      @Override
      public void onAdFailedToLoad(int errorCode) {
        String message = String.format("onAdFailedToLoad (%s)", getErrorReason(errorCode));
        Log.d(LOG_TAG, message);
        Toast.makeText(InterstitialSample.this, message, Toast.LENGTH_SHORT).show();

        // Change the button text and disable the button.
        showButton.setText("Ad Failed to Load");
        showButton.setEnabled(false);
      }
    });

    showButton = (Button) findViewById(R.id.showButton);
    showButton.setEnabled(false);
  }

  /** Called when the Load Interstitial button is clicked. */
  public void loadInterstitial(View unusedView) {
    // Disable the show button until the new ad is loaded.
    showButton.setText("Loading Interstitial...");
    showButton.setEnabled(false);

    // Check the logcat output for your hashed device ID to get test ads on a physical device.
    AdRequest adRequest = new AdRequest.Builder()
        .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
        .addTestDevice("INSERT_YOUR_HASHED_DEVICE_ID_HERE")
        .build();

    // Load the interstitial ad.
    interstitialAd.loadAd(adRequest);
  }

  /** Called when the Show Interstitial button is clicked. */
  public void showInterstitial(View unusedView) {
    // Disable the show button until another interstitial is loaded.
    showButton.setText("Interstitial Not Ready");
    showButton.setEnabled(false);

    if (interstitialAd.isLoaded()) {
      interstitialAd.show();
    } else {
      Log.d(LOG_TAG, "Interstitial ad was not ready to be shown.");
    }
  }

  /** Gets a string error reason from an error code. */
  private String getErrorReason(int errorCode) {
    String errorReason = "";
    switch(errorCode) {
      case AdRequest.ERROR_CODE_INTERNAL_ERROR:
        errorReason = "Internal error";
        break;
      case AdRequest.ERROR_CODE_INVALID_REQUEST:
        errorReason = "Invalid request";
        break;
      case AdRequest.ERROR_CODE_NETWORK_ERROR:
        errorReason = "Network Error";
        break;
      case AdRequest.ERROR_CODE_NO_FILL:
        errorReason = "No fill";
        break;
    }
    return errorReason;
  }
}

InterstitialSample.java at master · GitHub

なるべく検索している時間は少なくしたいものです。


関連ワード:  AndroidGoogleライブラリ今さら聞けない初心者開発