Google Mobile Ads SDK'sı da özel arama stillerini destekler. Uygulamanız halihazırda Google Mobile Ads SDK'sını kullanıyorsa bunun yerine AFSMA SDK'sı sürümünü kullanmanızı öneririz.
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 taşıma rehberimize bakın.
Ön koşullar
Bu uygulama kılavuzunda, aşağıdaki konularda bilgi sahibi olduğunuz varsayılır:
- Özel arama stilleri içeren AdSense Özel Arama Reklamları
- Android uygulaması geliştirme
AFS Yerel SDK'sını içe aktarın
SDK'yı ekleme
Uygulamanıza AFS Yerel SDK'sı eklemek için aşağıdakileri yapın:
Uygulama modülü dizininizde build.gradle
dosyasını açın.
SDK'nın en son sürümü için dependencies
altına yeni bir derleme kuralı ekleyin:
dependencies {
implementation 'com.google.android.gms:play-services-afs-native:19.1.0'
}
Üst düzey build.gradle
öğenizin google()
veya maven { url "https://maven.google.com" }
için bir referans içerdiğinden emin olun.
Google Play Bağımsız Sürüm Eşleştirici Eklentisi'ni projenize eklemek için bu talimatları uygulayın.
Bu eklentinin uygulanması, AFS Yerel SDK'sı Google Play Hizmetleri'nin uyumsuz bir sürümüyle kullanıldığında uygulamanın derlenmesine izin vermek yerine, ancak çalışma zamanında kilitlenmelerine yol açabilecek bir gradle derleme hatasına neden olur. Alternatif olarak, projenizde Google Play Hizmetleri'nin uyumlu olmayan sürümleri kullanıldığında derleme hatasına neden olmak için projenize failOnVersionConflict()
ResolutionStrategy'yi uygulayın.
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ın Android Destek Kitaplıkları yerine Jetpack (AndroidX) Kitaplıklarını kullanması gerekir. Uyumluluk gereksinimleri:
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; AndroidX'e Taşıma bölümündeki talimatları uygulayın.
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, reklamları önbelleğe alıp alma ve reklamları oluşturma işlemlerinden sorumludur.
- Her reklam bağlamı için ayrı bir
SearchAdController
gereklidir. Örneğin, arama sonuçları listesinin yanında reklamları gösteren bir ekran ve reklamları belirli bir ürünün ayrıntılarıyla birlikte gösteren başka bir ekran varsa her durum için bir tane olacak şekilde iki ayrıSearchAdController
örneği oluşturmalısınız. - Oluşturucuya, döndürülen reklamlara uygulanacak web mülkü kodunuz (yayıncı kimliği), stil kimliği ve
SearchAdOptions
sağlanmalıdır. Oluşturucuda sağlananContext
,SearchAdController
öğesini içeren veView
reklamı yerleştireceğinizActivity
öğesi olmalıdır. - Yeni bir kullanıcı araması belirtmek ve eşzamansız bir reklam isteği başlatmak için
loadAds
komutunu çağırın. ÖncekiloadAds
çağrılarından yüklenen tüm reklamlar, yeni bir çağrı yapıldığında dahili reklam önbelleğinden temizlenir. - Reklam öğelerini görüntülemek için
createAdView
ile birView
oluşturun. - Reklamlar yüklendikten sonra, söz konusu
View
içinde önbelleğe alınmış bir reklam oluşturmak için öncedencreateAdView
ile oluşturulmuşView
ilepopulateAdView
çağrısı yapın. DoldurulacakView
öğesine ek olarak, reklamı benzersiz şekilde tanımlamak için rastgele bir dize olanadKey
değerini sağlayın. Bu, önbellekten döndürülen belirli reklam öğesini söz konusuadKey
ile ilişkilendirir. Böylece,populateAdView
gelecekteki bir çağrıya aynıadKey
iletildiğinde aynı reklam döndürülür. Örneğin,populateAdView
,adKey="keyA"
ile ilk kez çağrılırsa ve yürüyüş botları için bir reklam oluşturursaadKey="keyA"
ilepopulateAdView
için yapılan her bir çağrı, yürüyüş botları için aynı reklamı doldurur. (loadAds
için yeni bir çağrı yapıldığında, önbelleğe alınan tüm reklamlar ve ilişkili reklam anahtarları temizlenir.)
- Reklamların istenme ve görüntülenme şeklini özelleştirmek için bu nesneyi
SearchAdController
oluşturucuya iletin.SearchAdOptions
nesnesi oluşturmak içinSearchAdOptions.Builder
üzerindebuild()
çağrısı yapın.
View
SearchAdController
üzerindecreateAdView()
işlevini çağırarak reklamların bekletileceği birView
nesnesi oluşturun. Aynı anda en fazla bir reklam gösterir ancak aynıView
, zaman içinde farklı reklamlar görüntülemek için geri dönüştürülebilir.
- Eşzamansız reklam isteği başlatmak için
SearchAdController
üzerindeloadAds
yönteminiSearchAdRequest
ile çağırın.SearchAdRequest
nesnesi oluşturmak içinSearchAdRequest.Builder
üzerindebuild()
çağrısı yapın.
- Bu arayüzü uygulayın ve çeşitli durumlar için geri çağırmaları kaydetmek üzere
SearchAdController
oluşturucuya iletin. - Not: İptal edilen bir istekte (ilk çağrı çözümlenmeden önce
loadAds
numaralı telefona yapılan başka bir çağrı tarafından geçici olarak kesilenloadAds
çağrısı)AdListener
geri çağırması yapılmaz.
Örnek uygulama
Aşağıdaki örnek, bir Activity
örneği içinde SearchAdController
oluşturmayı gösterir.
// 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ı bir sorgu başlattığında SearchAdRequest
oluşturun ve eşzamansız reklam isteği başlatmak için SearchAdController
üzerinde loadAds
yöntemini çağırı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
, reklamların gösterilmeye hazır olduğunu uygulamanıza bildirmek için onAdLoaded()
yöntemine sahip bir AdListener
nesnesini gerektirir. Hataları tespit edip düzeltebilmek için onAdFailedToLoad()
yöntemini de uygulamalısınız.
Örneğin, uygulamanızda hata ayıklamak için aşağıdaki AdListener
kullanabilirsiniz:
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 sabit değerler AdListener'da tanımlanır.