Bu kılavuz, Google Analytics 4'te uygulama açılış reklamlarını Google Mobile Ads Android SDK'sı.
Uygulama açılış reklamları, para kazanmak isteyen yayıncılara yönelik özel bir reklam biçimidir uygulama yükleme ekranlarına ekleyebilirsiniz. Uygulama açılış reklamları herhangi bir zamanda kapatılabilir. Bu reklamlar, Kullanıcılarınız uygulamanızı ön plana getirdiğinde gösterilecek.
Uygulama açılış reklamları, otomatik olarak küçük bir marka alanı gösterir. Böylece kullanıcılar, uygulamanızın en iyi şekilde yararlanabilirsiniz. Aşağıda uygulama açılış reklamının nasıl göründüğüne ilişkin bir örnek verilmiştir:
Özetle önemli adımlar şunlardır:
- Google Mobile Ads SDK'sını başlatmak için
Application
sınıfını genişletin. - Bir reklamı sizin görüntülemeniz gerekmeden önce yükleyen bir yardımcı program sınıfı oluşturun.
- Bir reklam yükleyin.
ActivityLifecycleCallbacks.
için dinle- Reklamı gösterin ve geri çağırmaları yapın.
- İşlem sırasında reklam göstermek için
LifecycleObserver
arayüzünü uygulayın ve kaydedin. ön plan etkinlikleri.
Ön koşullar
- Google Mobile Ads SDK'sı 19.4.0 veya sonraki sürümler.
- Başlarken rehberini inceleyin.
Her zaman test reklamlarıyla test etme
Uygulamalarınızı oluştururken ve test ederken, uygulamalarınızın yanı sıra üretim reklamlarıdır. Aksi takdirde hesabınız askıya alınabilir.
Test reklamlarını yüklemenin en kolay yolu, uygulama için özel test reklam birimi kimliğimizi kullanmaktır reklamları aç:
ca-app-pub-3940256099942544/9257395921
Her istek için test reklamları döndürecek şekilde özel olarak yapılandırılmıştır ve kod yazma, test etme ve hata ayıklama sırasında kendi uygulamalarınızda kullanabileceğiniz ücretsiz bir araçtır. Sadece uygulamanızı yayınlamadan önce bunu kendi reklam birimi kimliğinizle değiştirdiğinizden emin olun.
Mobile Ads SDK'sının test reklamlarının işleyiş şekli hakkında daha fazla bilgi için Test Reklamlar.
Uygulama sınıfını genişletme
Application
sınıfını genişleten yeni bir sınıf oluşturun ve aşağıdakini ekleyin
Google Mobile Ads SDK'sını başlatma kodu.
Java
/** Application class that initializes, loads and show ads when activities change states. */
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
new Thread(
() -> {
// Initialize the Google Mobile Ads SDK on a background thread.
MobileAds.initialize(this, initializationStatus -> {});
})
.start();
}
}
Kotlin
/** Application class that initializes, loads and show ads when activities change states. */
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
val backgroundScope = CoroutineScope(Dispatchers.IO)
backgroundScope.launch {
// Initialize the Google Mobile Ads SDK on a background thread.
MobileAds.initialize(this@MyApplication) {}
}
}
}
Bu işlem, SDK'yı başlatır ve daha sonra kullanacağınız iskeleti sağlar. kaydolması gerektiğini bileceksiniz.
Sonra, aşağıdaki kodu AndroidManifest.xml
cihazınıza ekleyin:
<application
android:name="com.google.android.gms.example.appopendemo.MyApplication" ...>
...
</application>
Gerçek paket adınızı referans gösterdiğinizden emin olun.
Hizmet sınıfınızı uygulayın
Reklamınız hızlı bir şekilde gösterilmelidir. Bu nedenle, ihtiyaç duymadan önce reklamınızı yüklemek en iyisidir. gösterebilmelisiniz. Bu şekilde, kullanıcı giriş yapar yapmaz bir reklamınız yayınlanmaya hazır olur uygulamanıza. Planınızı yayınlamadan önce reklam isteklerinde bulunmak için bir yardımcı program sınıfı uygulayın. ve reklamı göstermesi gerekir.
MyApplication
sınıfı içinde AppOpenAdManager
adında yeni bir sınıf oluşturun ve
aşağıdaki gibi doldurun:
Java
public class MyApplication extends Application {
...
/** Inner class that loads and shows app open ads. */
private class AppOpenAdManager {
private static final String LOG_TAG = "AppOpenAdManager";
private static final String AD_UNIT_ID = "ca-app-pub-3940256099942544/9257395921";
private AppOpenAd appOpenAd = null;
private boolean isLoadingAd = false;
private boolean isShowingAd = false;
/** Constructor. */
public AppOpenAdManager() {}
/** Request an ad. */
private void loadAd(Context context) {
// We will implement this below.
}
/** Check if ad exists and can be shown. */
private boolean isAdAvailable() {
return appOpenAd != null;
}
}
}
Kotlin
private const val String LOG_TAG = "AppOpenAdManager"
private const val String AD_UNIT_ID = "ca-app-pub-3940256099942544/9257395921"
public class MyApplication extends Application {
...
/** Inner class that loads and shows app open ads. */
private inner class AppOpenAdManager {
private var appOpenAd: AppOpenAd? = null
private var isLoadingAd = false
var isShowingAd = false
/** Request an ad. */
fun loadAd(context: Context) {
// We will implement this below.
}
/** Check if ad exists and can be shown. */
private fun isAdAvailable(): Boolean {
return appOpenAd != null
}
}
}
Artık bir yardımcı sınıfınız olduğuna göre bunu kendi
MyApplication
sınıf:
Java
public class MyApplication extends Application {
private AppOpenAdManager appOpenAdManager;
@Override
public void onCreate() {
super.onCreate();
new Thread(
() -> {
// Initialize the Google Mobile Ads SDK on a background thread.
MobileAds.initialize(this, initializationStatus -> {});
})
.start();
appOpenAdManager = new AppOpenAdManager(this);
}
}
Kotlin
class MyApplication : Application() {
private lateinit var appOpenAdManager: AppOpenAdManager
override fun onCreate() {
super.onCreate()
val backgroundScope = CoroutineScope(Dispatchers.IO)
backgroundScope.launch {
// Initialize the Google Mobile Ads SDK on a background thread.
MobileAds.initialize(this@MyApplication) {}
}
appOpenAdManager = AppOpenAdManager()
}
}
Reklam yükle
Bir sonraki adım, loadAd()
yöntemini doldurmaktır.
Java
private class AppOpenAdManager {
...
/** Request an ad. */
public void loadAd(Context context) {
// Do not load ad if there is an unused ad or one is already loading.
if (isLoadingAd || isAdAvailable()) {
return;
}
isLoadingAd = true;
AdRequest request = new AdRequest.Builder().build();
AppOpenAd.load(
context, AD_UNIT_ID, request,
AppOpenAd.APP_OPEN_AD_ORIENTATION_PORTRAIT,
new AppOpenAdLoadCallback() {
@Override
public void onAdLoaded(AppOpenAd ad) {
// Called when an app open ad has loaded.
Log.d(LOG_TAG, "Ad was loaded.");
appOpenAd = ad;
isLoadingAd = false;
}
@Override
public void onAdFailedToLoad(LoadAdError loadAdError) {
// Called when an app open ad has failed to load.
Log.d(LOG_TAG, loadAdError.getMessage());
isLoadingAd = false;
}
});
}
...
}
Kotlin
private inner class AppOpenAdManager {
...
/** Request an ad. */
fun loadAd(context: Context) {
// Do not load ad if there is an unused ad or one is already loading.
if (isLoadingAd || isAdAvailable()) {
return
}
isLoadingAd = true
val request = AdRequest.Builder().build()
AppOpenAd.load(
context, AD_UNIT_ID, request,
AppOpenAd.APP_OPEN_AD_ORIENTATION_PORTRAIT,
object : AppOpenAdLoadCallback() {
override fun onAdLoaded(ad: AppOpenAd) {
// Called when an app open ad has loaded.
Log.d(LOG_TAG, "Ad was loaded.")
appOpenAd = ad
isLoadingAd = false
}
override fun onAdFailedToLoad(loadAdError: LoadAdError) {
// Called when an app open ad has failed to load.
Log.d(LOG_TAG, loadAdError.message)
isLoadingAd = false;
}
})
}
...
}
AppOpenAdLoadCallback
, AppOpenAd
olduğunda çağrılan yöntemler içeriyor
yüklemeyi bitirir.
Mevcut etkinliği takip edin
Reklamı göstermek için Activity
bağlamına ihtiyacınız vardır. Her bir
öğrenmek istiyorsanız, Google Etiket Yöneticisi'ni kullanarak
Application.ActivityLifecycleCallbacks
Application
sınıfınızda.
Java
public class MyApplication extends Application implements ActivityLifecycleCallbacks {
private Activity currentActivity;
...
/** ActivityLifecycleCallback methods. */
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {}
@Override
public void onActivityStarted(Activity activity) {
// Updating the currentActivity only when an ad is not showing.
if (!appOpenAdManager.isShowingAd) {
currentActivity = activity;
}
}
@Override
public void onActivityResumed(Activity activity) {}
@Override
public void onActivityStopped(Activity activity) {}
@Override
public void onActivityPaused(Activity activity) {}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {}
@Override
public void onActivityDestroyed(Activity activity) {}
}
Kotlin
class MyApplication : Application(), Application.ActivityLifecycleCallbacks {
private var currentActivity: Activity? = null
...
/** ActivityLifecycleCallback methods. */
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}
override fun onActivityStarted(activity: Activity) {
// Updating the currentActivity only when an ad is not showing.
if (!appOpenAdManager.isShowingAd) {
currentActivity = activity
}
}
override fun onActivityResumed(activity: Activity) {}
override fun onActivityPaused(activity: Activity) {}
override fun onActivityStopped(activity: Activity) {}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
override fun onActivityDestroyed(activity: Activity) {}
}
Geçerli etkinliğin kaydını tutarak, etkinlik sırasında kaydedilen ilerlemeyi
reklam. Şimdi bu arayüzü
registerActivityLifecycleCallbacks
yöntemini çağırın.
Java
public class MyApplication extends Application {
...
@Override
public void onCreate() {
super.onCreate();
this.registerActivityLifecycleCallbacks(this);
new Thread(
() -> {
// Initialize the Google Mobile Ads SDK on a background thread.
MobileAds.initialize(this, initializationStatus -> {});
})
.start();
appOpenAdManager = new AppOpenAdManager();
}
}
Kotlin
class MyApplication : Application() {
...
override fun onCreate() {
super.onCreate()
registerActivityLifecycleCallbacks(this)
val backgroundScope = CoroutineScope(Dispatchers.IO)
backgroundScope.launch {
// Initialize the Google Mobile Ads SDK on a background thread.
MobileAds.initialize(this@MyApplication) {}
}
appOpenAdManager = AppOpenAdManager()
}
}
registerActivityLifecycleCallbacks
Activity
etkinliklerinin tümünü dinlemenizi sağlar. Etkinliklerin ne zaman yapılacağını dinleyerek
başlatma ve yok etme durumlarında, şu andaki referans
Activity
. Daha sonra bunları uygulama açılış reklamınızı sunarken kullanacaksınız.
Reklamı gösterme ve tam ekran geri çağırma etkinliklerini işleme
Aşağıdaki kod, bir reklamın ne zaman gösterileceğini ve daha sonra yeniden yükleneceğini gösterir.
Java
public class MyApplication extends Application {
...
/** Interface definition for a callback to be invoked when an app open ad is complete. */
public interface OnShowAdCompleteListener {
void onShowAdComplete();
}
private class AppOpenAdManager {
...
/** Shows the ad if one isn't already showing. */
public void showAdIfAvailable(
@NonNull final Activity activity,
@NonNull OnShowAdCompleteListener onShowAdCompleteListener){
// If the app open ad is already showing, do not show the ad again.
if (isShowingAd) {
Log.d(LOG_TAG, "The app open ad is already showing.");
return;
}
// If the app open ad is not available yet, invoke the callback then load the ad.
if (!isAdAvailable()) {
Log.d(LOG_TAG, "The app open ad is not ready yet.");
onShowAdCompleteListener.onShowAdComplete();
loadAd(activity);
return;
}
appOpenAd.setFullScreenContentCallback(
new FullScreenContentCallback() {
@Override
public void onAdDismissedFullScreenContent() {
// Called when fullscreen content is dismissed.
// Set the reference to null so isAdAvailable() returns false.
Log.d(LOG_TAG, "Ad dismissed fullscreen content.");
appOpenAd = null;
isShowingAd = false;
onShowAdCompleteListener.onShowAdComplete();
loadAd(activity);
}
@Override
public void onAdFailedToShowFullScreenContent(AdError adError) {
// Called when fullscreen content failed to show.
// Set the reference to null so isAdAvailable() returns false.
Log.d(LOG_TAG, adError.getMessage());
appOpenAd = null;
isShowingAd = false;
onShowAdCompleteListener.onShowAdComplete();
loadAd(activity);
}
@Override
public void onAdShowedFullScreenContent() {
// Called when fullscreen content is shown.
Log.d(LOG_TAG, "Ad showed fullscreen content.");
}
});
isShowingAd = true;
appOpenAd.show(activity);
}
...
}
}
Kotlin
class MyApplication : Application() {
...
/** Interface definition for a callback to be invoked when an app open ad is complete. */
interface OnShowAdCompleteListener {
fun onShowAdComplete()
}
private inner class AppOpenAdManager {
...
/** Shows the ad if one isn't already showing. */
fun showAdIfAvailable(
activity: Activity,
onShowAdCompleteListener: OnShowAdCompleteListener) {
// If the app open ad is already showing, do not show the ad again.
if (isShowingAd) {
Log.d(LOG_TAG, "The app open ad is already showing.")
return
}
// If the app open ad is not available yet, invoke the callback then load the ad.
if (!isAdAvailable()) {
Log.d(LOG_TAG, "The app open ad is not ready yet.")
onShowAdCompleteListener.onShowAdComplete()
loadAd(activity)
return
}
appOpenAd?.setFullScreenContentCallback(
object : FullScreenContentCallback() {
override fun onAdDismissedFullScreenContent() {
// Called when full screen content is dismissed.
// Set the reference to null so isAdAvailable() returns false.
Log.d(LOG_TAG, "Ad dismissed fullscreen content.")
appOpenAd = null
isShowingAd = false
onShowAdCompleteListener.onShowAdComplete()
loadAd(activity)
}
override fun onAdFailedToShowFullScreenContent(adError: AdError) {
// Called when fullscreen content failed to show.
// Set the reference to null so isAdAvailable() returns false.
Log.d(LOG_TAG, adError.message)
appOpenAd = null
isShowingAd = false
onShowAdCompleteListener.onShowAdComplete()
loadAd(activity)
}
override fun onAdShowedFullScreenContent() {
// Called when fullscreen content is shown.
Log.d(LOG_TAG, "Ad showed fullscreen content.")
}
})
isShowingAd = true
appOpenAd?.show(activity)
}
...
}
}
FullScreenContentCallback
; reklamın sunulması,
başarısız olduğu veya kapatıldığı durumlarda. Kullanıcı
bir uygulama açılış reklamını tıkladıktan sonra
başka bir uygulama açılış reklamıyla
gösterilir.
Uygulama ön plan oluşturma etkinliklerini dinle
Kitaplıkları gradle dosyanıza ekleyin
Uygulama ön plan etkinlikleri hakkında bildirim almak için bir
LifecycleObserver
Öncelikle uygulama düzeyindeki build.gradle
dosyanızı şu şekilde düzenleyin:
LifecycleObserver
kitaplıklarını dahil edin:
apply plugin: 'com.android.application'
dependencies {
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'com.google.android.gms:play-services-ads:23.2.0'
def lifecycle_version = "2.3.1"
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version"
annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
}
LifecycleObserver arayüzünü uygulama
Application
sınıfınızda ön plandaki etkinlikleri aşağıdaki gibi dinleyebilirsiniz:
LifecycleObserver
arayüzünü uygulamak.
Java
public class MyApplication extends Application
implements ActivityLifecycleCallbacks, LifecycleObserver { {
...
@Override
public void onCreate() {
super.onCreate();
this.registerActivityLifecycleCallbacks(this);
new Thread(
() -> {
// Initialize the Google Mobile Ads SDK on a background thread.
MobileAds.initialize(this, initializationStatus -> {});
})
.start();
ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
appOpenAdManager = new AppOpenAdManager();
}
/** LifecycleObserver method that shows the app open ad when the app moves to foreground. */
@OnLifecycleEvent(Event.ON_START)
protected void onMoveToForeground() {
// Show the ad (if available) when the app moves to foreground.
appOpenAdManager.showAdIfAvailable(currentActivity);
}
/** Show the ad if one isn't already showing. */
private void showAdIfAvailable(@NonNull final Activity activity) {
showAdIfAvailable(
activity,
new OnShowAdCompleteListener() {
@Override
public void onShowAdComplete() {
// Empty because the user will go back to the activity that shows the ad.
}
});
}
}
Kotlin
class MyApplication : Application(),
Application.ActivityLifecycleCallbacks, LifecycleObserver {
...
override fun onCreate() {
super.onCreate()
registerActivityLifecycleCallbacks(this)
val backgroundScope = CoroutineScope(Dispatchers.IO)
backgroundScope.launch {
// Initialize the Google Mobile Ads SDK on a background thread.
MobileAds.initialize(this@MyApplication) {}
}
ProcessLifecycleOwner.get().lifecycle.addObserver(this)
appOpenAdManager = AppOpenAdManager()
}
/** LifecycleObserver method that shows the app open ad when the app moves to foreground. */
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onMoveToForeground() {
// Show the ad (if available) when the app moves to foreground.
currentActivity?.let {
appOpenAdManager.showAdIfAvailable(it)
}
}
/** Show the ad if one isn't already showing. */
fun showAdIfAvailable(activity: Activity) {
showAdIfAvailable(
activity,
object : OnShowAdCompleteListener {
override fun onShowAdComplete() {
// Empty because the user will go back to the activity that shows the ad.
}
})
}
}
LifecycleObserver
cihazınızı kaydettiğinizde uygulamanız uygulama lansmanıyla ilgili olarak uyarı alır
ve reklamı uygun zamanlarda gösterebilmek
için iyi bir fırsattır.
Reklam geçerlilik süresini dikkate alın
Süresi dolmuş bir reklamı göstermediğinizden emin olmak için AppOpenAdManager
öğesine bir yöntem ekleyin.
bu kontrollerden yararlanabilirsiniz. Ardından,
yöntemini kullanarak reklamın hâlâ geçerli olup olmadığını kontrol edebilirsiniz.
Java
private class AppOpenAdManager {
...
/** Keep track of the time an app open ad is loaded to ensure you don't show an expired ad. */
private long loadTime = 0;
/** Request an ad. */
public void loadAd(Context context) {
// Do not load ad if there is an unused ad or one is already loading.
if (isLoadingAd || isAdAvailable()) {
return;
}
isLoadingAd = true;
AdRequest request = new AdRequest.Builder().build();
AppOpenAd.load(
context, AD_UNIT_ID, request,
AppOpenAd.APP_OPEN_AD_ORIENTATION_PORTRAIT,
new AppOpenAdLoadCallback() {
@Override
public void onAdLoaded(AppOpenAd ad) {
// Called when an app open ad has loaded.
Log.d(LOG_TAG, "Ad was loaded.");
appOpenAd = ad;
isLoadingAd = false;
loadTime = (new Date()).getTime();
}
@Override
public void onAdFailedToLoad(LoadAdError loadAdError) {
// Called when an app open ad has failed to load.
Log.d(LOG_TAG, loadAdError.getMessage());
isLoadingAd = false;
}
});
}
...
/** Utility method to check if ad was loaded more than n hours ago. */
private boolean wasLoadTimeLessThanNHoursAgo(long numHours) {
long dateDifference = (new Date()).getTime() - this.loadTime;
long numMilliSecondsPerHour = 3600000;
return (dateDifference < (numMilliSecondsPerHour * numHours));
}
/** Check if ad exists and can be shown. */
public boolean isAdAvailable() {
return appOpenAd != null && wasLoadTimeLessThanNHoursAgo(4);
}
}
Kotlin
private inner class AppOpenAdManager {
...
/** Keep track of the time an app open ad is loaded to ensure you don't show an expired ad. */
private var loadTime: Long = 0
/** Request an ad. */
fun loadAd(context: Context) {
// Do not load ad if there is an unused ad or one is already loading.
if (isLoadingAd || isAdAvailable()) {
return
}
isLoadingAd = true
val request = AdRequest.Builder().build()
AppOpenAd.load(
context, AD_UNIT_ID, request,
AppOpenAd.APP_OPEN_AD_ORIENTATION_PORTRAIT,
object : AppOpenAdLoadCallback() {
override fun onAdLoaded(ad: AppOpenAd) {
// Called when an app open ad has loaded.
Log.d(LOG_TAG, "Ad was loaded.")
appOpenAd = ad
isLoadingAd = false
loadTime = Date().time
}
override fun onAdFailedToLoad(loadAdError: LoadAdError) {
// Called when an app open ad has failed to load.
Log.d(LOG_TAG, loadAdError.message)
isLoadingAd = false;
}
})
}
...
private fun wasLoadTimeLessThanNHoursAgo(numHours: Long): Boolean {
val dateDifference: Long = Date().time - loadTime
val numMilliSecondsPerHour: Long = 3600000
return dateDifference < numMilliSecondsPerHour * numHours
}
private fun isAdAvailable(): Boolean {
return appOpenAd != null && wasLoadTimeLessThanNHoursAgo(4)
}
}
Baştan başlatma ve yükleme ekranları
Şu ana kadarki dokümanlarda, uygulama açılış reklamlarını yalnızca kullanıcılar tarafından uygulamanız bellekte askıya alındığında ön planda tutulur. "Sıfırdan başlangıç" şu durumda olur: Uygulamanız başlatılmış ancak daha önce bellekte askıya alınmamış olmalıdır.
Soğuk başlatmaya örnek olarak, bir kullanıcının uygulamanızı ilk kez açması verilebilir. Soğuk başlatmalarda, önceden yüklenmiş ve kullanıma hazır bir uygulama açılış reklamınız olmaz. anında gösterilmesidir. Reklam isteğinde bulunmanız ile reklam almanız arasındaki gecikme kullanıcıların uygulamanızı indirmeden önce kısa bir süre kullanabildiği bir durum şaşırtıcı bir reklam görüyor. Güvenli olmayan bir kötü kullanıcı deneyimi.
Uygulama açılış reklamlarını baştan başlatma durumunda kullanmanın tercih edilen yolu, yükleme ekranı kullanmaktır. oyun veya uygulama öğelerinizi yüklemek ve reklamı yalnızca yükleme sırasından itibaren göstermek için tıklayın. Uygulamanızın yüklenmesi tamamlandı ve kullanıcıyı ana içeriği kullanıyorsanız reklamı göstermeyin.
En iyi uygulamalar
Uygulama açılış reklamları, uygulamanız ilk kez açıkken yükleme ekranından para kazanmanıza yardımcı olur. ancak her ne kadar önemli olduğunu anladığımıza göre keyif almasını sağlayın. Aşağıdakileri yapmanız önerilir:
- Kullanıcılarınız uygulamanızı birkaç kez kullandıktan sonra ilk uygulama açılış reklamınızı gösterin.
- Uygulama açılış reklamlarını kullanıcıların normalde bekleyecekleri zamanlarda gösterin yüklemenizi sağlar.
- Uygulama açılış reklamının altında bir yükleme ekranı ve yükleme ekranınız varsa
reklam kapatılmadan önce yükleme işlemini tamamladığında,
onAdDismissedFullScreenContent()
yönteminde yükleme ekranı gösteriliyor.
GitHub'daki örnekler
Sonraki adımlar
Aşağıdaki konuları inceleyin: