Reklamy pełnoekranowe zakrywają interfejs aplikacji, w której się wyświetlają. Wyświetlają się zwykle w naturalnych momentach przejściowych w aplikacji, np. między działaniami lub podczas przerwy między poziomami gry. Gdy aplikacja wyświetla reklamę pełnoekranową, użytkownik może ją kliknąć, aby przejść do miejsca docelowego, lub zamknąć i wrócić do aplikacji. Przeczytaj jeden z naszych case study.
Z tego poradnika dowiesz się, jak zintegrować reklamy przejściowe z aplikacją na Androida.
Wymagania wstępne
- Pakiet SDK do reklam mobilnych Google w wersji 19.7.0 lub nowszej.
- Zapoznaj się z przewodnikiem dla początkujących.
Zawsze testuj reklamy za pomocą reklam testowych
Podczas tworzenia i testowania aplikacji używaj reklam testowych, a nie reklam produkcyjnych. Jeśli tego nie zrobisz, możemy zawiesić Twoje konto.
Najłatwiejszym sposobem wczytywania reklam testowych jest użycie dedykowanego identyfikatora testowej jednostki reklamowej na potrzeby reklam pełnoekranowych na Androida:
ca-app-pub-3940256099942544/1033173712
Jest on specjalnie skonfigurowany tak, aby zwracać reklamy testowe w przypadku każdego żądania. Możesz go używać w swoich aplikacjach podczas kodowania, testowania i debugowania. Pamiętaj tylko, aby przed opublikowaniem aplikacji zastąpić go własnym identyfikatorem jednostki reklamowej.
Więcej informacji o działaniu reklam testowych w pakiecie SDK do reklam mobilnych znajdziesz w artykule Reklamy testowe.
Wczytywanie reklamy
Aby załadować reklamę przejściową, wywołaj stałą metodę InterstitialAd
load()
i przekaż obiekt InterstitialAdLoadCallback
, aby otrzymać załadowaną reklamę lub ewentualne błędy. Podobnie jak inne wywołania zwrotne wczytywania formatu, InterstitialAdLoadCallback
wykorzystuje LoadAdError
, aby zapewnić większą dokładność informacji o błędach.
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;
}
});
}
}
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
}
})
}
}
Ustaw FullScreenContentCallback
FullScreenContentCallback
obsługuje zdarzenia związane z wyświetlaniem InterstitialAd
. Zanim wyświetlisz InterstitialAd
, ustaw wywołanie zwrotne:
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.");
}
});
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.")
}
}
Wyświetlanie reklamy
Reklamy pełnoekranowe powinny wyświetlać się w naturalnych przerwach w aplikacji. Dobrym przykładem jest przerwa między poziomami w grze lub po wykonaniu zadania przez użytkownika.
Aby wyświetlić reklamę pełnoekranową, użyj metody show()
.
if (mInterstitialAd != null) {
mInterstitialAd.show(MyActivity.this);
} else {
Log.d("TAG", "The interstitial ad wasn't ready yet.");
}
if (mInterstitialAd != null) {
mInterstitialAd?.show(this)
} else {
Log.d("TAG", "The interstitial ad wasn't ready yet.")
}
Sprawdzone metody
- Zastanów się, czy reklamy pełnoekranowe są odpowiednim typem reklamy dla Twojej aplikacji.
- Reklamy pełnoekranowe najlepiej sprawdzają się w aplikacjach z naturalnymi punktami przejścia. Taki punkt może powstać na przykład po zakończeniu zadania w aplikacji, takiego jak udostępnienie zdjęcia lub ukończenie poziomu gry. Zastanów się, w jakich momentach w przebiegu działania aplikacji będą się wyświetlać reklamy przejściowe i jak użytkownik zareaguje na ich wyświetlenie.
- Pamiętaj, aby wstrzymać działanie podczas wyświetlania reklamy pełnoekranowej.
- Dostępne są różne typy reklam pełnoekranowych: tekstowe, graficzne, wideo i inne. Pamiętaj, aby podczas wyświetlania przez aplikację reklamy interaktywnej wstrzymać korzystanie z niektórych zasobów, aby reklama mogła z nich korzystać. Jeśli na przykład wywołasz wyświetlenie reklamy pośredniej, zatrzymaj dźwięk generowany przez aplikację.
- Zaplanuj odpowiedni czas wczytywania.
- Podobnie jak w przypadku reklam przejściowych ważne jest, aby wyświetlać je w odpowiednim momencie, ale też zadbać o to, aby użytkownik nie musiał czekać na ich załadowanie. Wczytanie reklamy z wyprzedzeniem przez wywołanie funkcji
load()
przed wywołaniem funkcjishow()
może zapewnić, że w momencie wyświetlenia reklamy pełnoekranowej w aplikacji będzie ona w pełni załadowana. - Nie zalewaj użytkownika reklamami.
- Chociaż zwiększenie częstotliwości wyświetlania reklam przejściowych w aplikacji może wydawać się świetnym sposobem na zwiększenie przychodów, może też pogorszyć wrażenia użytkownika i obniżyć współczynnik klikalności. Zadbaj o to, aby użytkownicy nie byli zbyt często przerywane, ponieważ uniemożliwia im to korzystanie z aplikacji.
Kod źródłowy
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 = 0L 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 = 3000L 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" } }
Przykłady w GitHub
Historie sukcesu
Dalsze kroki
- Jeśli jeszcze tego nie zrobisz, utwórz własną pełnoekranową jednostkę reklamową w interfejsie internetowym AdMob.
- Dowiedz się więcej o kierowaniu reklam i wskazówkach dotyczących banerów interaktywnych.
- Dowiedz się więcej o prywatności użytkowników.
- Poznaj zoptymalizowane inicjowanie pakietu SDK i wczytywanie reklam (beta).