插頁式廣告會全螢幕顯示,覆蓋整個應用程式的介面。
這類廣告顯示的時間點通常都是在應用程式流程中的自然轉換點,
例如在活動之間或遊戲關卡之間的暫停期間。
應用程式顯示插頁式廣告時,使用者可以選擇輕觸
並繼續前往廣告的到達網頁,或關閉廣告並返回應用程式。
歡迎參閱我們的個案研究 。
本指南說明如何將插頁式廣告整合至 Android
應用程式。
必要條件
Google Mobile Ads SDK 19.7.0 以上版本。
完成入門指南 。
一律使用測試廣告進行測試
建構及測試應用程式時,請務必使用測試廣告,而非
現場及正式環境廣告否則可能導致帳戶遭到停權。
要載入測試廣告,最簡單的方法是使用我們專屬的測試廣告單元編號。
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
}
})
}
}
提示:
您可以在
,確保廣告在需要時不會延遲放送。
由於廣告會在一小時後過期,建議您清除這個快取,然後使用新的快取資料重新載入
廣告。
設定 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 上的範例
成功案例
後續步驟