Google Mobile Ads SDK'sı da özel arama stillerini destekler. Uygulamanız Google Mobile Ads SDK'sını zaten kullanıyorsa AFSMA SDK sürümü .
19.0.0 veya daha yeni bir sürüme 18.1.0 veya daha eski bir sürüme geçiyorsanız lütfen bkz. taşıma rehberimize göz atın.
Ön koşullar
Bu uygulama kılavuzunda, aşağıdaki konularda bilgi sahibi olduğunuz varsayılmaktadır:
- Özel arama stilleriyle AdSense Özel Arama Ağı Reklamları
- Android uygulaması geliştirme
AFS Native SDK'yı içe aktarma
SDK'yı ekleme
AFS Native SDK'sını uygulamanıza eklemek için aşağıdakileri yapın:
Uygulama modülü dizininizdeki build.gradle
dosyasını açın.
SDK'nın en son sürümü için dependencies
altında yeni bir derleme kuralı ekleyin:
dependencies {
implementation 'com.google.android.gms:play-services-afs-native:19.1.0'
}
Üst düzey build.gradle
dosyanızda google()
deposuna veya maven { url "https://maven.google.com" }
dosyasına referans bulunduğundan emin olun.
Bu talimatları uygulayın.
Google Play Bağımsız Sürüm Eşleştirici Eklentisi'ni projenize dahil edin.
Bu eklentinin uygulanması, AFS Native SDK'sı Google Play Hizmetleri'nin uyumlu olmayan bir sürümüyle kullanıldığında uygulamanın derlenmesine izin vermek yerine bir Gradle derleme hatasına neden olur ve çalışma zamanında kilitlenmelere neden olabilir. Alternatif olarak
failOnVersionConflict()
ResolutionStrategy
projenize ekleyerek Google Play'in uyumsuz sürümleri kullanıldığında derleme hatasına neden olabilirsiniz
Projenizde hizmetler kullanılır.
Değişiklikleri kaydedin ve araç çubuğunda Projeyi Gradle Dosyalarıyla Senkronize Et'i tıklayın.
Android Destek Kitaplıkları yerine AndroidX'i kullanma
SDK'nın 17.0.0
sürümünden itibaren uygulamanız Android Destek Kitaplıkları yerine Jetpack (AndroidX) Kitaplıkları kullanmalıdır. Uyumluluk koşulları:
com.android.tools.build:gradle
uygulamasını v3.2.1 veya sonraki bir sürüme ayarlayın.compileSdkVersion
değerini 28 veya sonraki bir değere ayarlayın.- Uygulamanızı Jetpack (AndroidX) kullanacak şekilde güncelleyin; buradaki talimatları uygulayın: AndroidX'e taşıma.
Sınıflar
Uygulamanızda AFS doğal reklamları yayınlamak için aşağıdaki sınıfları uygulayın:
- Bu sınıf, eşzamansız olarak reklam isteğinde bulunma, önbelleğe alma ve reklamları alma ve reklam oluşturma.
- Her reklam bağlamı için ayrı bir
SearchAdController
gerekir; Örneğin, arama sonuçları listesi ve başka bir liste ile birlikte reklamları gösteren bir ekrana belirli bir ürünün ayrıntılarının yanında reklam gösteren bir ekranda her durum için bir tane olacak şekilde iki ayrıSearchAdController
örneği oluşturun. - Oluşturucuya web mülk kodunuz (yayıncı kimliği), döndürülen reklamlara uygulanacak stil kimliği ve
SearchAdOptions
sağlanmalıdır. Oluşturucuda sağlananContext
,SearchAdController
öğesini içeren veView
reklamını yerleştireceğinizActivity
olmalıdır. - Yeni bir kullanıcı araması belirtmek ve eşzamansız bir reklam isteği başlatmak için
loadAds
işlevini çağırın. ÖncekiloadAds
numaralı telefona yapılan aramalardan yüklenen tüm reklamlar şu numaradan temizlenir: yeni bir çağrı yapıldığında dahili reklam önbelleğini korur. - Reklam öğeleri göstermek için
createAdView
ileView
oluşturun. - Reklamlar yüklendikten sonra, önbelleğe alınmış bir reklamı bu
View
içinde oluşturmak içincreateAdView
ile daha önce oluşturulmuş birView
ilepopulateAdView
'ü çağırın. DoldurulacakView
değerine ek olarak, reklamı benzersiz şekilde tanımlamak için biradKey
(kendi seçeceğiniz bir dize) sağlayın. Bu işlem, önbellekten döndürülen belirli reklam öğesini buadKey
ile ilişkilendirir. Böylece, aynıadKey
gelecektepopulateAdView
çağrısına iletildiğinde aynı reklam döndürülür. Örneğin,populateAdView
ilk kezadKey="keyA"
ile çağrılırsa ve yürüyüş botları için bir reklam oluşturursaadKey="keyA"
ilepopulateAdView
'e yapılan her bir sonraki çağrı, yürüyüş botları için aynı reklamı doldurur. (loadAds
adresine yeni bir çağrı yapmak, önbelleğe alınan tüm reklamları ve ilişkili reklam anahtarlarını temizler.)
- Reklamların nasıl isteneceğini ve gösterileceğini özelleştirmek için bu nesneyi
SearchAdController
oluşturucuya iletin.SearchAdOptions.Builder
numaralı telefondanbuild()
adlı kişiyi şu numara için arayın:SearchAdOptions
nesnesi oluşturun.
View
SearchAdController
üzerindecreateAdView()
çağrısı yaparak reklamları barındıracak birView
nesnesi oluşturun. Aynı anda en fazla bir reklam gösterir ancak aynıView
, zaman içinde farklı reklamlar göstermek için yeniden kullanılabilir.
SearchAdController
üzerindeloadAds
yöntemini birSearchAdRequest
ile çağırın kullanarak eşzamansız bir reklam isteği başlatabilirsiniz.build()
numaralı telefonu şu telefondan ara:SearchAdRequest
nesnesi oluşturmak içinSearchAdRequest.Builder
.
- Bu arayüzü uygulayın ve çeşitli durumlar için geri çağırma işlevleri kaydetmek üzere
SearchAdController
yapıcısına iletin. - Not: İptal edilen bir istekte (arama)
AdListener
geri arama yapılmaz ilkloadAds
loadAds
arama sonlandırıldı).
Örnek uygulama
Aşağıdaki örnekte, bir Activity
örneğinde SearchAdController
oluşturulması gösterilmektedir.
// MainActivity.java implementation
// (MainActivity is a subclass of Activity)
SearchAdController adController;
// adContainer where we will place our ads in this example.
ViewGroup adContainer;
protected void onCreate(Bundle bundle){
super.onCreate(bundle);
adContainer = (ViewGroup) findViewById(...);
// Specify ad options (not required).
SearchAdOptions.Builder adOptionsBuilder = new SearchAdOptions.Builder();
adOptionsBuilder.setAdType(SearchAdOptions.AD_TYPE_TEXT);
adOptionsBuilder.setPrefetch(true);
adOptionsBuilder.setNumAdsRequested(3);
// Provide a callback to trigger when ads are loaded.
AdListener adListener = new AdListener() {
public void onAdLoaded() {
createAndShowAd();
}
};
// Instantiate the SearchAdController.
adController = new SearchAdController(this, "your-client-id", "your-style-id",
adOptionsBuilder.build(), adListener);
}
Kullanıcı sorgu başlattığında SearchAdRequest
oluşturup loadAds
yöntemini çağırın
SearchAdController
kullanarak eşzamansız bir reklam isteği başlatın.
// Create the request.
SearchAdRequest.Builder requestBuilder = new SearchAdRequest.Builder();
requestBuilder.setQuery("user query here");
// Load the ads.
adController.loadAds(requestBuilder.build());
Yüklenen bir reklamı reklam görünümüne doldurmak için onAdLoaded
geri çağırmanızı uygulayın.
private void createAndShowAd() {
// Create a new view that will contain the ad.
View adView = adController.createAdView();
// Attach the new view to the view hierarchy.
adContainer.addView(adView);
// Display the ad inside the adView. We need to provide an adKey to
// indicate which ad is to be displayed in the adView. In this example,
// since we only have one ad, we can provide any constant string. However,
// if you intend to display multiple ads, each ad you wish to display
// should be given a unique adKey of your choosing.
adController.populateAdView(adView, "demoAd");
}
Belirtilen sorguyla alakalı bir reklam artık adView
özelliğinde görünecek.
Hataları inceleme
SearchAdController
, uygulamanızı reklamların gösterilmeye hazır olduğunu bildirmek için onAdLoaded()
yöntemini içeren bir AdListener
nesnesi gerektirir. Ayrıca
Hataları tespit edip düzeltebilmek için onAdFailedToLoad()
yöntemini uygulayın.
Örneğin, hata ayıklamak için aşağıdaki AdListener
kullanabilirsiniz:
uygulama:
AdListener adListener = new AdListener() {
public void onAdLoaded() {
// Called when an ad is loaded.
Toast.makeText(MainActivity.this, "Ad Loaded",
Toast.LENGTH_SHORT).show();
Log.d(MainActivity.class.getSimpleName(), "Ad Loaded");
}
public void onAdLeftApplication() {
// Called when an ad leaves the application
// (to go to the browser for example).
Toast.makeText(MainActivity.this, "Ad Left Application",
Toast.LENGTH_SHORT).show();
Log.d(MainActivity.class.getSimpleName(), "Ad Left Application");
}
@Override
public void onAdFailedToLoad(int errorCode) {
// Called when an ad request failed.
Toast.makeText(MainActivity.this, "Ad Failed to Load: " + errorCode,
Toast.LENGTH_SHORT).show();
Log.e(MainActivity.class.getSimpleName(), "Ad Failed to Load: " +
errorCode);
}
};
onAdFailedToLoad()
geri çağırma yönteminde kullanılan sabitler
AdListener'da tanımlanmıştır.