前回の続きになります。
今回は英語の情報すらも少なかったので、前回以上に手間取りました。
ポイントは一点だけ。
- displayInterstitial()の呼び出し方
です。
前回の続きとなりますので、バナー広告が表示出来ている前提で進めます。
参考にするのはこちらのガイドです。
インタースティシャル広告で使えるテスト用の広告ユニットIDが見当たらなかったので
AdMobの「+新しいアプリを収益化」から広告ユニットIDを取得しておきます。
(バナー広告用のテストIDは使えませんでした)
画面に従うだけですので、この手順は割愛します。
取得した広告ユニットIDをstring.xmlに追加します。
1 2 3 4 5 6 7 8 9 10 11 |
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">レインボー ハート クラッシュ</string> <string name="hello_world">Hello world!</string> <string name="action_settings">Settings</string> <string name="banner_ad_unit_id">ca-app-pub-3940256099942544/6300978111</string> <string name="interstitial_ad_unit_id">ca-app-pub-****************/**********</string> </resources> |
次に、MainActivity.javaにコードを追加していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
public class MainActivity extends MultiSceneActivity { //広告表示スペース private AdView adView; private InterstitialAd interstitial; ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main); //バナー広告の読み込み adView = (AdView)findViewById(R.id.adView); AdRequest adRequest = new AdRequest.Builder().build(); adView.loadAd(adRequest); // Create the interstitial. interstitial = new InterstitialAd(this); String MY_AD_UNIT_ID = getResources().getString(R.string.interstitial_ad_unit_id); interstitial.setAdUnitId(MY_AD_UNIT_ID); // Create ad request. AdRequest interstitialAdRequest = new AdRequest.Builder().build(); // Begin loading your interstitial. interstitial.loadAd(interstitialAdRequest); } // Invoke displayInterstitial() when you are ready to display an interstitial. @Override public void displayInterstitial() { if (interstitial.isLoaded()) { interstitial.show(); } } ... } |
今回もonCreateに記述します。
displayInterstitial()もMainActivity内に作ります。
displayInterstitial()は忘れずに@Overrideしておいてください。
そして、displayInterstitial()をMainSceneから呼び出せるように
MultiSceneActivityにも以下の様に追加します。
1 2 3 4 5 6 |
public abstract class MultiSceneActivity extends SimpleLayoutGameActivity { ... //AdMobインタースティシャル広告を表示する public abstract void displayInterstitial(); ... } |
あとはMainSceneの任意の場所でdisplayInterstitial()を呼び出すだけなのですが、
ここで注意しなければいけないのが
- メインのUIスレッドで呼び出す必要がある
という事です。
ここが理解できておらず、解決策を求めて3日程ネットを彷徨い歩いていました。
というわけで、displayInterstitial()を呼び出すときは別スレッドで呼び出します。
1 2 3 4 5 6 7 8 9 10 11 |
public class MainScene extends KeyListenScene implements IOnSceneTouchListener, OnClickListener { ... getBaseActivity().runOnUiThread(new Runnable() { @Override public void run() { getBaseActivity().displayInterstitial(); } }); ... } |
onClickやゲームオーバー時など、好みの場所で呼び出してあげてください。
こんな感じで広告が全画面表示されます。