插页式广告是全屏广告,会覆盖所在应用的整个界面。
它们通常在应用流程的自然过渡点展示
例如,在活动之间或游戏关卡之间的暂停时段中。
当应用展示插页式广告时,用户可以选择点按
或关闭广告并返回应用。
请参阅我们的案例研究 。
本指南介绍了如何将插页式广告植入到 Android 应用中,
应用。
前提条件
Google 移动广告 SDK 19.7.0 或更高版本。
完成入门指南 。
始终使用测试广告进行测试
在构建和测试应用时,请务必使用测试广告
实际投放的广告。否则,可能会导致您的账号被暂停。
要加载测试广告,最简便的方法就是使用我们的专用测试广告单元 ID
Android 插页式广告:
ca-app-pub-3940256099942544/1033173712
该测试广告单元 ID 已经过专门配置,可为每个请求返回测试广告,
在自己应用的编码、测试和调试过程中随意使用。只需制作
请务必在发布应用前用您自己的广告单元 ID 替换该测试广告单元。
如需详细了解移动广告 SDK 的测试广告如何运作,请参阅
测试广告 。
加载广告
注意 :请在主线程中进行对移动广告 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 上的示例
成功案例
后续步骤