インタースティシャル広告は、ホストアプリのインターフェースを覆うようにフルスクリーンで表示される広告です。
通常、アプリの操作中に画面が自然に切り替わるタイミングで表示されます。
たとえば、ゲームのレベルが切り替わる合間や、次のレベルの一時停止時などにおすすめします。
アプリにインタースティシャル広告が表示されると、ユーザーは
広告をクリックしてリンク先に移動するか、広告を閉じてアプリに戻ります。
事例紹介 をご覧ください。
このガイドでは、インタースティシャル広告を Android デバイスに統合する方法について説明します。
。
前提条件
Google Mobile Ads SDK 19.7.0 以降
スタートガイド を完了している。
必ずテスト広告でテストする
アプリを作成、テストする際は、テスト広告ではなく、
配信します。実際の広告を使用すると、アカウントが停止される可能性があります。
テスト広告を読み込むには、専用のテスト広告ユニット ID を使用すると、
Android インタースティシャル:
ca-app-pub-3940256099942544/1033173712
すべてのリクエストに対してテスト広告を返すように特別に構成されており、
独自のアプリでコーディング、テスト、デバッグの際に自由に使用できます。作成するだけで
アプリを公開する前に、必ずご自身の広告ユニット ID に置き換えてください。
Mobile Ads SDK のテスト広告の仕組みについて詳しくは、
テスト広告 。
広告を読み込む
注: Mobile Ads SDK の呼び出しはすべて、メインスレッドで行ってください。
インタースティシャル広告を読み込むには、InterstitialAd
を呼び出します。
静的
load()
メソッドを呼び出し、
InterstitialAdLoadCallback
: 読み込まれた
エラーが表示されます。他の形式の読み込みコールバックと同様に、
InterstitialAdLoadCallback
の活用
LoadAdError
: より忠実度の高いエラーの詳細を提供します。
Java
import com.google.android.gms.ads.interstitial.InterstitialAd ;
import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback ;
public class MainActivity extends Activity {
private InterstitialAd mInterstitialAd ;
private static final String TAG = "MainActivity ";
@Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState );
setContentView ( R . layout . activity_main );
AdRequest adRequest = new AdRequest . Builder (). build ();
InterstitialAd . load ( this , "ca - app - pub - 3940256099942544 / 1033173712 ", adRequest ,
new InterstitialAdLoadCallback () {
@Override
public void onAdLoaded ( @NonNull InterstitialAd interstitialAd ) {
// The mInterstitialAd reference will be null until
// an ad is loaded.
mInterstitialAd = interstitialAd ;
Log . i ( TAG , "onAdLoaded ");
}
@Override
public void onAdFailedToLoad ( @NonNull LoadAdError loadAdError ) {
// Handle the error
Log . d ( TAG , loadAdError . toString ());
mInterstitialAd = null ;
}
});
}
}
Kotlin
import com.google.android.gms.ads.interstitial.InterstitialAd;
import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback;
class MainActivity : AppCompatActivity () {
private var mInterstitialAd : InterstitialAd? = null
private final val TAG = "MainActivity "
override fun onCreate ( savedInstanceState : Bundle?) {
super . onCreate ( savedInstanceState )
setContentView ( R . layout . activity_main )
val adRequest = AdRequest . Builder (). build ()
InterstitialAd . load ( this , "ca - app - pub - 3940256099942544 / 1033173712 ", adRequest , object : InterstitialAdLoadCallback () {
override fun onAdFailedToLoad ( adError : LoadAdError ) {
Log . d ( TAG , adError ?. toString ())
mInterstitialAd = null
}
override fun onAdLoaded ( interstitialAd : InterstitialAd ) {
Log . d ( TAG , 'Ad was loaded .')
mInterstitialAd = interstitialAd
}
})
}
}
ヒント:
広告読み込みの呼び出しを使用すると、プリロードされた広告のキャッシュをあらかじめ構築しておくことができます。
必要な場合は広告の遅延なしで表示できます。
広告は 1 時間後に期限切れになるため、このキャッシュをクリアして新しい
1 時間ごとに広告を表示します
FullScreenContentCallback を設定する
FullScreenContentCallback
は、
InterstitialAd
。InterstitialAd
を表示する前に、必ず
次のコールバックを使用します。
Java
mInterstitialAd . setFullScreenContentCallback ( new FullScreenContentCallback (){
@Override
public void onAdClicked () {
// Called when a click is recorded for an ad.
Log . d ( TAG , "Ad was clicked .");
}
@Override
public void onAdDismissedFullScreenContent () {
// Called when ad is dismissed.
// Set the ad reference to null so you don't show the ad a second time.
Log . d ( TAG , "Ad dismissed fullscreen content .");
mInterstitialAd = null ;
}
@Override
public void onAdFailedToShowFullScreenContent ( AdError adError ) {
// Called when ad fails to show.
Log . e ( TAG , "Ad failed to show fullscreen content .");
mInterstitialAd = null ;
}
@Override
public void onAdImpression () {
// Called when an impression is recorded for an ad.
Log . d ( TAG , "Ad recorded an impression .");
}
@Override
public void onAdShowedFullScreenContent () {
// Called when ad is shown.
Log . d ( TAG , "Ad showed fullscreen content .");
}
});
Kotlin
mInterstitialAd ?. fullScreenContentCallback = object : FullScreenContentCallback () {
override fun onAdClicked () {
// Called when a click is recorded for an ad.
Log . d ( TAG , "Ad was clicked .")
}
override fun onAdDismissedFullScreenContent () {
// Called when ad is dismissed.
Log . d ( TAG , "Ad dismissed fullscreen content .")
mInterstitialAd = null
}
override fun onAdFailedToShowFullScreenContent ( adError : AdError?) {
// Called when ad fails to show.
Log . e ( TAG , "Ad failed to show fullscreen content .")
mInterstitialAd = null
}
override fun onAdImpression () {
// Called when an impression is recorded for an ad.
Log . d ( TAG , "Ad recorded an impression .")
}
override fun onAdShowedFullScreenContent () {
// Called when ad is shown.
Log . d ( TAG , "Ad showed fullscreen content .")
}
}
広告を表示する
インタースティシャル広告は、アプリの操作が一時停止する自然なタイミングで表示されます。
ゲームのレベルが切り替わる合間やユーザーがタスクを完了した後などが良い例です。
インタースティシャルを表示するには、
show()
メソッドを使用します。
Java
if ( mInterstitialAd != null ) {
mInterstitialAd . show ( MyActivity . this );
} else {
Log . d ( "TAG ", "The interstitial ad wasn't ready yet .");
}
Kotlin
if ( mInterstitialAd != null ) {
mInterstitialAd ?. show ( this )
} else {
Log . d ( "TAG ", "The interstitial ad wasn't ready yet .")
}
おすすめの方法
インタースティシャル広告がアプリに適した広告タイプかどうかを検討します。
インタースティシャル広告は、画面の切り替わりがあるアプリで最適に機能します。
画像の共有やアプリの完了といった、アプリ内のタスクの終了を
ゲームレベルでは、そのようなポイントが生まれます。学習計画で注力すべきポイントを
インタースティシャル広告を表示する方法と、ユーザーが
対応できます。
インタースティシャル広告を表示する際はアクションを一時停止してください。
インタースティシャル広告にはさまざまなタイプ(テキスト、イメージ、
使用できます。アプリの画面にコードを表示する際は、
リソースの使用を中断して広告が
活用してください。たとえば、スペースを表示するための呼び出しを行うと、
アプリからの音声出力は、必ず一時停止してください。
読み込み時間は十分に確保してください。
インタースティシャル広告は一定の間隔で表示することが
ユーザーに都合のよい時間を提供できるよう、
読み込みが完了するのを待ちます。次の呼び出しによって広告を事前に読み込む
通話の発信前に load()
show()
を使用すると、アプリのインタースティシャル広告をページ全体に配置できます。
準備を整えることができます。
大量の広告をユーザーに表示することは避けてください。
アプリでインタースティシャル広告の表示頻度を増やすと、
ユーザーエクスペリエンスの低下にも
つながります
クリック率の低下につながりますユーザーがそれほど頻繁にアクセスしないようにします。
中断されることがなくなります。
ソースコード
MyActivity.java
/*
* Copyright ( C ) 2013 Google , Inc .
*
* Licensed under the Apache License , Version 2.0 ( the "License ");
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : // www . apache . org / licenses / LICENSE - 2.0
*
* Unless required by applicable law or agreed to in writing , software
* distributed under the License is distributed on an "AS IS " BASIS ,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
* See the License for the specific language governing permissions and
* limitations under the License .
*/
package com . google . android . gms . example . interstitialexample ;
import android.annotation.SuppressLint ;
import android.os.Bundle ;
import android.os.CountDownTimer ;
import android.util.Log ;
import android.view.Menu ;
import android.view.MenuItem ;
import android.view.View ;
import android.widget.Button ;
import android.widget.PopupMenu ;
import android.widget.TextView ;
import android.widget.Toast ;
import androidx.annotation.NonNull ;
import androidx.appcompat.app.AppCompatActivity ;
import com.google.android.gms.ads.AdError ;
import com.google.android.gms.ads.AdRequest ;
import com.google.android.gms.ads.FullScreenContentCallback ;
import com.google.android.gms.ads.LoadAdError ;
import com.google.android.gms.ads.MobileAds ;
import com.google.android.gms.ads.RequestConfiguration ;
import com.google.android.gms.ads.interstitial.InterstitialAd ;
import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback ;
import java.util.Arrays ;
import java.util.concurrent.atomic.AtomicBoolean ;
/** Main Activity . Inflates main activity xml . */
@SuppressLint ( "SetTextI18n ")
public class MyActivity extends AppCompatActivity {
// Check your logcat output for the test device hashed ID e . g .
// "Use RequestConfiguration . Builder () . setTestDeviceIds ( Arrays . asList ( "ABCDEF012345 "))
// to get test ads on this device " or
// "Use new ConsentDebugSettings . Builder () . addTestDeviceHashedId ( "ABCDEF012345 ") to set this as
// a debug device ".
public static final String TEST_DEVICE_HASHED_ID = "ABCDEF012345 ";
private static final long GAME_LENGTH_MILLISECONDS = 3000 ;
private static final String AD_UNIT_ID = "ca - app - pub - 3940256099942544 / 1033173712 ";
private static final String TAG = "MyActivity ";
private final AtomicBoolean isMobileAdsInitializeCalled = new AtomicBoolean ( false );
private GoogleMobileAdsConsentManager googleMobileAdsConsentManager ;
private InterstitialAd interstitialAd ;
private CountDownTimer countDownTimer ;
private Button retryButton ;
private boolean gamePaused ;
private boolean gameOver ;
private boolean adIsLoading ;
private long timerMilliseconds ;
@Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState );
setContentView ( R . layout . activity_my );
// Log the Mobile Ads SDK version .
Log . d ( TAG , "Google Mobile Ads SDK Version : " + MobileAds . getVersion ());
googleMobileAdsConsentManager =
GoogleMobileAdsConsentManager . getInstance ( getApplicationContext ());
googleMobileAdsConsentManager . gatherConsent (
this ,
consentError - > {
if ( consentError != null ) {
// Consent not obtained in current session .
Log . w (
TAG ,
String . format ( "% s : % s ", consentError . getErrorCode (), consentError . getMessage ()));
}
startGame ();
if ( googleMobileAdsConsentManager . canRequestAds ()) {
initializeMobileAdsSdk ();
}
if ( googleMobileAdsConsentManager . isPrivacyOptionsRequired ()) {
// Regenerate the options menu to include a privacy setting .
invalidateOptionsMenu ();
}
});
// This sample attempts to load ads using consent obtained in the previous session .
if ( googleMobileAdsConsentManager . canRequestAds ()) {
initializeMobileAdsSdk ();
}
// Create the "retry " button , which tries to show an interstitial between game plays .
retryButton = findViewById ( R . id . retry_button );
retryButton . setVisibility ( View . INVISIBLE );
retryButton . setOnClickListener (
new View . OnClickListener () {
@Override
public void onClick ( View view ) {
showInterstitial ();
}
});
}
public void loadAd () {
// Request a new ad if one isn't already loaded .
if ( adIsLoading || interstitialAd != null ) {
return ;
}
adIsLoading = true ;
AdRequest adRequest = new AdRequest . Builder () . build ();
InterstitialAd . load (
this ,
AD_UNIT_ID ,
adRequest ,
new InterstitialAdLoadCallback () {
@Override
public void onAdLoaded ( @NonNull InterstitialAd interstitialAd ) {
// The mInterstitialAd reference will be null until
// an ad is loaded .
MyActivity . this . interstitialAd = interstitialAd ;
adIsLoading = false ;
Log . i ( TAG , "onAdLoaded ");
Toast . makeText ( MyActivity . this , "onAdLoaded ()", Toast . LENGTH_SHORT ) . show ();
interstitialAd . setFullScreenContentCallback (
new FullScreenContentCallback () {
@Override
public void onAdDismissedFullScreenContent () {
// Called when fullscreen content is dismissed .
// Make sure to set your reference to null so you don't
// show it a second time .
MyActivity . this . interstitialAd = null ;
Log . d ( "TAG ", "The ad was dismissed . ");
}
@Override
public void onAdFailedToShowFullScreenContent ( AdError adError ) {
// Called when fullscreen content failed to show .
// Make sure to set your reference to null so you don't
// show it a second time .
MyActivity . this . interstitialAd = null ;
Log . d ( "TAG ", "The ad failed to show . ");
}
@Override
public void onAdShowedFullScreenContent () {
// Called when fullscreen content is shown .
Log . d ( "TAG ", "The ad was shown . ");
}
});
}
@Override
public void onAdFailedToLoad ( @NonNull LoadAdError loadAdError ) {
// Handle the error
Log . i ( TAG , loadAdError . getMessage ());
interstitialAd = null ;
adIsLoading = false ;
String error =
String . format (
java . util . Locale . US ,
"domain : % s , code : % d , message : % s ",
loadAdError . getDomain (),
loadAdError . getCode (),
loadAdError . getMessage ());
Toast . makeText (
MyActivity . this , "onAdFailedToLoad () with error : " + error , Toast . LENGTH_SHORT )
. show ();
}
});
}
private void createTimer ( final long milliseconds ) {
// Create the game timer , which counts down to the end of the level
// and shows the "retry " button .
if ( countDownTimer != null ) {
countDownTimer . cancel ();
}
final TextView textView = findViewById ( R . id . timer );
countDownTimer =
new CountDownTimer ( milliseconds , 50 ) {
@Override
public void onTick ( long millisUnitFinished ) {
timerMilliseconds = millisUnitFinished ;
textView . setText ( "seconds remaining : " + (( millisUnitFinished / 1000 ) + 1 ));
}
@Override
public void onFinish () {
gameOver = true ;
textView . setText ( "done ! ");
retryButton . setVisibility ( View . VISIBLE );
}
};
countDownTimer . start ();
}
@Override
public void onResume () {
// Start or resume the game .
super . onResume ();
resumeGame ();
}
@Override
public void onPause () {
super . onPause ();
pauseGame ();
}
@Override
public boolean onCreateOptionsMenu ( Menu menu ) {
getMenuInflater () . inflate ( R . menu . action_menu , menu );
return true ;
}
@Override
public boolean onOptionsItemSelected ( MenuItem item ) {
View menuItemView = findViewById ( item . getItemId ());
PopupMenu popup = new PopupMenu ( this , menuItemView );
popup . getMenuInflater () . inflate ( R . menu . popup_menu , popup . getMenu ());
popup . show ();
popup
. getMenu ()
. findItem ( R . id . privacy_settings )
. setVisible ( googleMobileAdsConsentManager . isPrivacyOptionsRequired ());
popup . setOnMenuItemClickListener (
popupMenuItem - > {
if ( popupMenuItem . getItemId () == R . id . privacy_settings ) {
pauseGame ();
// Handle changes to user consent .
googleMobileAdsConsentManager . showPrivacyOptionsForm (
this ,
formError - > {
if ( formError != null ) {
Toast . makeText ( this , formError . getMessage (), Toast . LENGTH_SHORT ) . show ();
}
resumeGame ();
});
return true ;
} else if ( popupMenuItem . getItemId () == R . id . ad_inspector ) {
MobileAds . openAdInspector (
this ,
error - > {
// Error will be non - null if ad inspector closed due to an error .
if ( error != null ) {
Toast . makeText ( this , error . getMessage (), Toast . LENGTH_SHORT ) . show ();
}
});
return true ;
}
return false ;
});
return super . onOptionsItemSelected ( item );
}
private void showInterstitial () {
// Show the ad if it's ready . Otherwise restart the game .
if ( interstitialAd != null ) {
interstitialAd . show ( this );
} else {
startGame ();
if ( googleMobileAdsConsentManager . canRequestAds ()) {
loadAd ();
}
}
}
private void startGame () {
// Hide the button , and kick off the timer .
retryButton . setVisibility ( View . INVISIBLE );
createTimer ( GAME_LENGTH_MILLISECONDS );
gamePaused = false ;
gameOver = false ;
}
private void resumeGame () {
if ( gameOver || ! gamePaused ) {
return ;
}
// Create a new timer for the correct length .
gamePaused = false ;
createTimer ( timerMilliseconds );
}
private void pauseGame () {
if ( gameOver || gamePaused ) {
return ;
}
countDownTimer . cancel ();
gamePaused = true ;
}
private void initializeMobileAdsSdk () {
if ( isMobileAdsInitializeCalled . getAndSet ( true )) {
return ;
}
// Set your test devices .
MobileAds . setRequestConfiguration (
new RequestConfiguration . Builder ()
. setTestDeviceIds ( Arrays . asList ( TEST_DEVICE_HASHED_ID ))
. build ());
new Thread (
() - > {
// Initialize the Google Mobile Ads SDK on a background thread .
MobileAds . initialize ( this , initializationStatus - > {});
// Load an ad on the main thread .
runOnUiThread (() - > loadAd ());
})
. start ();
}
}
MainActivity.kt
package com . google . android . gms . example . interstitialexample
import android.os.Bundle
import android.os.CountDownTimer
import android.util.Log
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.widget.PopupMenu
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.google.android.gms.ads. *
import com.google.android.gms.ads.interstitial.InterstitialAd
import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback
import com.google.android.gms.example.interstitialexample.databinding.ActivityMainBinding
import java.util.concurrent.atomic.AtomicBoolean
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class MainActivity : AppCompatActivity () {
private val isMobileAdsInitializeCalled = AtomicBoolean ( false )
private lateinit var binding : ActivityMainBinding
private lateinit var googleMobileAdsConsentManager : GoogleMobileAdsConsentManager
private var interstitialAd : InterstitialAd ? = null
private var countdownTimer : CountDownTimer ? = null
private var gamePaused = false
private var gameOver = false
private var adIsLoading : Boolean = false
private var timerMilliseconds = 0 L
override fun onCreate ( savedInstanceState : Bundle ? ) {
super . onCreate ( savedInstanceState )
binding = ActivityMainBinding . inflate ( layoutInflater )
val view = binding . root
setContentView ( view )
// Log the Mobile Ads SDK version .
Log . d ( TAG , "Google Mobile Ads SDK Version : " + MobileAds . getVersion ())
googleMobileAdsConsentManager = GoogleMobileAdsConsentManager . getInstance ( this )
googleMobileAdsConsentManager . gatherConsent ( this ) { consentError - >
if ( consentError != null ) {
// Consent not obtained in current session .
Log . w ( TAG , "$ { consentError . errorCode }: $ { consentError . message }")
}
// Kick off the first play of the "game ".
startGame ()
if ( googleMobileAdsConsentManager . canRequestAds ) {
initializeMobileAdsSdk ()
}
if ( googleMobileAdsConsentManager . isPrivacyOptionsRequired ) {
// Regenerate the options menu to include a privacy setting .
invalidateOptionsMenu ()
}
}
// This sample attempts to load ads using consent obtained in the previous session .
if ( googleMobileAdsConsentManager . canRequestAds ) {
initializeMobileAdsSdk ()
}
// Create the "retry " button , which triggers an interstitial between game plays .
binding . retryButton . visibility = View . INVISIBLE
binding . retryButton . setOnClickListener { showInterstitial () }
}
override fun onCreateOptionsMenu ( menu : Menu ? ): Boolean {
menuInflater . inflate ( R . menu . action_menu , menu )
return super . onCreateOptionsMenu ( menu )
}
override fun onOptionsItemSelected ( item : MenuItem ): Boolean {
val menuItemView = findViewById<View> ( item . itemId )
val activity = this
PopupMenu ( this , menuItemView ) . apply {
menuInflater . inflate ( R . menu . popup_menu , menu )
menu
. findItem ( R . id . privacy_settings )
. setVisible ( googleMobileAdsConsentManager . isPrivacyOptionsRequired )
show ()
setOnMenuItemClickListener { popupMenuItem - >
when ( popupMenuItem . itemId ) {
R . id . privacy_settings - > {
pauseGame ()
// Handle changes to user consent .
googleMobileAdsConsentManager . showPrivacyOptionsForm ( activity ) { formError - >
if ( formError != null ) {
Toast . makeText ( activity , formError . message , Toast . LENGTH_SHORT ) . show ()
}
resumeGame ()
}
true
}
R . id . ad_inspector - > {
MobileAds . openAdInspector ( activity ) { error - >
// Error will be non - null if ad inspector closed due to an error .
error ? . let { Toast . makeText ( activity , it . message , Toast . LENGTH_SHORT ) . show () }
}
true
}
// Handle other branches here .
else - > false
}
}
return super . onOptionsItemSelected ( item )
}
}
private fun loadAd () {
// Request a new ad if one isn't already loaded .
if ( adIsLoading || interstitialAd != null ) {
return
}
adIsLoading = true
val adRequest = AdRequest . Builder () . build ()
InterstitialAd . load (
this ,
AD_UNIT_ID ,
adRequest ,
object : InterstitialAdLoadCallback () {
override fun onAdFailedToLoad ( adError : LoadAdError ) {
Log . d ( TAG , adError . message )
interstitialAd = null
adIsLoading = false
val error =
"domain : $ { adError . domain }, code : $ { adError . code }, " + "message : $ { adError . message } "
Toast . makeText (
this @MainActivity ,
"onAdFailedToLoad () with error $ error ",
Toast . LENGTH_SHORT ,
)
. show ()
}
override fun onAdLoaded ( ad : InterstitialAd ) {
Log . d ( TAG , "Ad was loaded . ")
interstitialAd = ad
adIsLoading = false
Toast . makeText ( this @MainActivity , "onAdLoaded ()", Toast . LENGTH_SHORT ) . show ()
}
},
)
}
// Create the game timer , which counts down to the end of the level
// and shows the "retry " button .
private fun createTimer ( milliseconds : Long ) {
countdownTimer ? . cancel ()
countdownTimer =
object : CountDownTimer ( milliseconds , 50 ) {
override fun onTick ( millisUntilFinished : Long ) {
timerMilliseconds = millisUntilFinished
binding . timer . text = "seconds remaining : $ { millisUntilFinished / 1000 + 1 } "
}
override fun onFinish () {
gameOver = true
binding . timer . text = "done ! "
binding . retryButton . visibility = View . VISIBLE
}
}
countdownTimer ? . start ()
}
// Show the ad if it's ready . Otherwise restart the game .
private fun showInterstitial () {
if ( interstitialAd != null ) {
interstitialAd ? . fullScreenContentCallback =
object : FullScreenContentCallback () {
override fun onAdDismissedFullScreenContent () {
Log . d ( TAG , "Ad was dismissed . ")
// Don't forget to set the ad reference to null so you
// don't show the ad a second time .
interstitialAd = null
}
override fun onAdFailedToShowFullScreenContent ( adError : AdError ) {
Log . d ( TAG , "Ad failed to show . ")
// Don't forget to set the ad reference to null so you
// don't show the ad a second time .
interstitialAd = null
}
override fun onAdShowedFullScreenContent () {
Log . d ( TAG , "Ad showed fullscreen content . ")
// Called when ad is dismissed .
}
}
interstitialAd ? . show ( this )
} else {
startGame ()
if ( googleMobileAdsConsentManager . canRequestAds ) {
loadAd ()
}
}
}
// Hide the button , and kick off the timer .
private fun startGame () {
binding . retryButton . visibility = View . INVISIBLE
createTimer ( GAME_LENGTH_MILLISECONDS )
gamePaused = false
gameOver = false
}
private fun pauseGame () {
if ( gameOver || gamePaused ) {
return
}
countdownTimer ? . cancel ()
gamePaused = true
}
private fun resumeGame () {
if ( gameOver || ! gamePaused ) {
return
}
createTimer ( timerMilliseconds )
gamePaused = true
}
private fun initializeMobileAdsSdk () {
if ( isMobileAdsInitializeCalled . getAndSet ( true )) {
return
}
// Set your test devices .
MobileAds . setRequestConfiguration (
RequestConfiguration . Builder () . setTestDeviceIds ( listOf ( TEST_DEVICE_HASHED_ID )) . build ()
)
CoroutineScope ( Dispatchers . IO ) . launch {
// Initialize the Google Mobile Ads SDK on a background thread .
MobileAds . initialize ( this @MainActivity ) {}
runOnUiThread {
// Load an ad on the main thread .
loadAd ()
}
}
}
// Resume the game if it's in progress .
public override fun onResume () {
super . onResume ()
resumeGame ()
}
public override fun onPause () {
super . onPause ()
pauseGame ()
}
companion object {
// This is an ad unit ID for a test ad . Replace with your own interstitial ad unit ID .
private const val AD_UNIT_ID = "ca - app - pub - 3940256099942544 / 1033173712 "
private const val GAME_LENGTH_MILLISECONDS = 3000 L
private const val TAG = "MainActivity "
// Check your logcat output for the test device hashed ID e . g .
// "Use RequestConfiguration . Builder () . setTestDeviceIds ( Arrays . asList ( "ABCDEF012345 "))
// to get test ads on this device " or
// "Use new ConsentDebugSettings . Builder () . addTestDeviceHashedId ( "ABCDEF012345 ") to set this as
// a debug device ".
const val TEST_DEVICE_HASHED_ID = "ABCDEF012345 "
}
}
GitHub の例
成功事例
次のステップ